Mysql表添加字段报innodb_online_alter_log_max_size不够解决方案

时间:2022-09-24 10:33:43

问题描述:

在生产执行以下语句时

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

下面是我的公众号二维码,欢迎添加

Mysql表添加字段报innodb_online_alter_log_max_size不够解决方案