问题描述:
在生产执行以下语句时
mysql -uroot -proot -e "ALTER TABLE TEST.TEST ADD TESTINFO VARCHAR(512) NOT NULL DEFAULT ''"
报以下错误信息
RROR 1799 (HY000) at line 1: Creating index 'PRIMARY' required more than 'innodb_online_alter_log_max_size' bytes of modification log. Please try again
看日志信息发现是innodb_online_alter_log_max_size过小,于是就去mysql5.6官方文档去查看此参数的作用,原来在5.6版本之后,mysql可以实现在线做DDL操作,为实现此功能,引入innodb_online_alter_log_max_size参数,这个参数作用时,在做DDL操作期间,产生的insert,update,delete操作都会记录在一个临时日志文件中,而此临时文件存放在临时排序区(innodb_sort_buffer_size),innodb_sort_buffer_size参数上限由innodb_online_alter_log_max_size参数决定,当修改表数据量过大时,需要几个小时,那么临时日志就需要记录这几个小时的产生的日志,业务量大时,就会将此临时排序区撑爆,此时mysql就会回滚此ddl操作,类似的操作有创建索引,主键等
解决办法:
innodb_online_alter_log_max_size参数默认是128M,此参数可以在线修改并立刻生效,如果要永久生效,则需要在my.cnf添加配置
SET GLOBAL innodb_online_alter_log_max_size=A BIGER VALUE
下面是我的公众号二维码,欢迎添加