MySQL5.7配置调优
安装完MYSQL后,需要进行调整的配置项
## 可以处理的最大数据包大小,默认1M。推荐设置成 128M
max_allowed_packet=128M
## 最大连接数,默认150。
max_connections=700
max_connect_errors=10
## 核心交易系统(金融、游戏)设置为1,默认为1,影响系统写性能。其他推荐设置成2。
innodb_flush_log_at_trx_commit=2
## 核心交易系统(金融、游戏)设置为 REPEATABLE-READ,默认为REPEATABLE-READ。其他推荐设置成READ-COMMITTED。
transaction_isolation=READ-COMMITTED
## 推荐设置成16M
innodb_log_buffer_size=16M
## 2的倍数,小于CPU的核心数
innodb_buffer_pool_instances=6
## 设置成系统内存的 20% ~ 60%,innodb_buffer_pool_instances的整数倍
innodb_buffer_pool_size=18G
## 默认200,sata/sas硬盘:2000,ssd硬盘:8000
innodb_io_capacity_max=8000
## 设置成 innodb_io_capacity_max 的一半
innodb_io_capacity=4000
## 连接操作的缓冲区的大小,默认256k,推荐设置成 2~4M
join_buffer_size=4M
ONLY_FULL_GROUP_BY
MySQL 5.7版本开始启用ONLY_FULL_GROUP_BY,主要是为了避免查询selelct语句当中出现语义不明确的列,对于一些比较严谨的语义来说它的作用相当重要。
即,使用group by 语句时,你的输出语句当中只能是使用了聚合函数的字段和group by的字段,若有其他不明确的字段则报错。
要去掉这个限制,有两种方式:
- 临时处理
set global sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
- 永久处理
my.cnf 中
[mysqld]
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION