分析 group by 语句的异常原因

  • 看错误,可能会扯到 SQL_MODE 的配置

SQL_MODE

  • 配置 mysql 处理 sql 的方式
  • todo

如何比较系统运行配置和配置文件中的配置是否一致

查看当前系统运行配置

  • show 指令

    show variables like <参数>

set 指令设置系统运行配置

  1. session: 设置对当前 session 有效

    set [session | @@session ] =

  1. global: 设置对当前 session 无效,仅对后续的连接生效;需要设置到 my.cnf ,避免重启失效

    set [global | @@global ] =

  1. persist: 8.0 支持;设置会保存到一个文件(mysqld-auto.cnf)中,避免 db 重启丢失
    1. 是否对当前 session 有效呢?

      set [persist| @@persist] =

比较

  • 使用 percona toolkit 中的 pt-config-diff 工具

    pt-config-diff u=, p=,h=,P=


性能参数举例

服务器配置参数

参数 说明 备注
max_connections 设置 mysql 运行访问的连接数
interactive_timeout 设置交互连接的 timeout 时间
wait_timeout 设置非交互连接的 timeout 时间
max_allowed_packet 控制 mysql 可以接收的数据包大小 主从复制的节点,需要保持一致
sysnc_binlog 每写多少次缓冲会向磁盘同步一次 binlog 主从复制时,master 写 1,避免 binlog 丢失
sort_buffer_size 设置每个 session 使用的排序缓冲区大小 占用空间=设置 * 线程(连接数)
需要小心配置
join_buffer_size 设置每个 session 使用的连接缓冲区大小
read_buffer_size 指定了当对一个 myisam 进行表扫描似乎锁支配的读缓冲区大小;
创建临时表也会使用该缓冲区;
4k的倍数
read_rnd_buffer_size 设置控制 index 缓冲区大小
binlog_cache_size 设置每个 session 用于缓存未提交的事务缓存大小

存储引擎参数

参数
说明 备注
innodb_flush_log_at_trx_commit 0: 每秒进行一次重做日志磁盘刷新操作;
1: 每次事务提交都会刷新事务日志到磁盘中
2: 每次事务提交先写入 os cache 中,每秒向磁盘刷新一次
建议 1
innodb_buffer_pool_size
innodb_buffer_pool_instances
innodb_file_per_table 5.7 后默认启用