在批量更新数据的时候,mysqld.err中多次出现了:

130701 11:53:42  InnoDB: ERROR: the age of the last checkpoint is 2863227109,
InnoDB: which exceeds the log group capacity 566225511.
InnoDB: If you are using big BLOB or TEXT rows, you must set the
InnoDB: combined size of log files at least 10 times bigger than the

 



查看show engine innodb status \G



---
LOG
---
Log sequence number 35 1084195310
Log flushed up to   35 1082093330
Last checkpoint at  34 2875247845
0 pending log writes, 0 pending chkp writes
175831373 log i/o's done, 5.55 log i/o's/second



 



发现Log flushed up跟Last checkpoint 确实相差比较大,在redo log 中的capacity变量,代表最后的checkpoint不能超过这个阀值;若超过这个阀值则需将innodb buffer pool 中的脏数据写回到磁盘。



 



只是偶尔出现一次这类告警,不调整my.cnf参数也可以;若经常出现这类告警,可以将innodb_log_file_size参数调大。



 



innodb_log_file_size 参数的调整需重启数据库,对于生产线的数据库需选择好重启的时机,调整时如下操作:



1.停止mysql;



2.修改my.cnf中的innodb_log_file_size参数的大小;



3.将ib_logfile* 的文件移至其他目录(在正常关闭的情况下可以直接删除,最好还是移至其他目录,若mysql正常启动后再删除也不迟);



4.启动mysql,检查启动是否正常。