在一次生产环境排查问题中,发现mysql的从库延时很大。后来通过如下操作解决。
先看下服务器的innodb_flush_log_at_trx_commit参数值,如果值为非2,将参数innodb_flush_log_at_trx_commit值设置为2
mysql> show variables like '%innodb_flush_log_at_trx_commit%';
+--------------------------------+-------+
| Variable_name | Value |
+--------------------------------+-------+
| innodb_flush_log_at_trx_commit | 1 |
+--------------------------------+-------+
1 row in set
mysql> set global innodb_flush_log_at_trx_commit=2;
innodb_flush_log_at_trx_commit 参数解释:
0(延迟写): log_buff --每隔1秒--> log_file —实时—> disk
1(实时写,实时刷): log_buff —实时—> log_file —实时—> disk
2(实时写,延迟刷): log_buff —实时—> log_file --每隔1秒--> disk
0:最快减少mysql写的等待
1:最大安全性,不会丢失数据
2:折中,减少操作系统文件写入等待时间