快速修复步骤:1. 检查redo log文件是否满,使用SHOW ENGINE INNODB STATUS查看log sequence number和checkpoint;2. 执行OPTIMIZE TABLE或ALTER TABLE tbl ENGINE=InnoDB FORCE;来清理日志;3. 如果远程处理,SSH登录服务器,kill掉卡住的进程后重启mysqld;4. 临时设置innodb_log_writer_threads=1降低并发;5. 确认磁盘IO无瓶颈后,SET GLOBAL innodb_max_dirty_pages_pct=75;。
阿里云社区
ER_IB_MSG_LOG_WRITER_WAIT_ON_CONSUMER 这个错误表示InnoDB redo log writer线程在等待消费者线程。这个问题通常发生在高并发写入场景下,redo log缓冲区满了,writer无法及时写入日志文件。常见原因是innodb_log_writer_threads参数设置过高,或者redo log文件太小。解决办法:增大redo log文件大小到4G以上,设置innodb_log_file_size=2G,innodb_log_files_in_group=2。
CSDN博客
现象:MySQL日志中反复出现ER_IB_MSG_LOG_WRITER_WAIT_ON_CONSUMER,查询变慢。分析:log writer线程等待log consumer,可能是由于刷盘延迟。修复:执行flush logs;然后修改my.cnf添加innodb_flush_log_at_trx_commit=2,减少fsync调用。远程处理:用pt-kill杀掉长事务,再重启实例。
腾讯云开发者社区
这个报错是MySQL 8.0+版本引入的多线程redo log机制导致的。writer线程生成log记录,consumer负责写入ib_logfile。等待表示consumer跟不上。指南:监控performance_schema.events_waits_summary_global_by_event_name表,看wait/sum_timer_wait高的线程。修复代码:SET GLOBAL innodb_log_writer_threads=1; 服务重启生效。
知乎专栏
遇到这个错误,服务器负载高,CPU飙升。远程修复:登录服务器,ps aux|grep mysql找出进程,pstack PID查看栈,确认是log writer阻塞。然后ib_logfile0删除重建:mv ib_logfile* /tmp,重启MySQL自动重建。注意备份数据先。
博客园文章
故障案例:主从复制延迟,slave报ER_IB_MSG_LOG_WRITER_WAIT_ON_CONSUMER。从库日志满导致。处理:stop slave; RESET SLAVE; CHANGE MASTER TO...重配从库。预防:定期PURGE BINARY LOGS BEFORE '2023-01-01';
MySQL官方论坛片段
User reported: ER_IB_MSG_LOG_WRITER_WAIT_ON_CONSUMER every few seconds. Solution: Increase innodb_log_buffer_size to 64M, and ensure SSD disk for data dir. Also, tune innodb_io_capacity=2000 for better IO throughput.
Q: ER_IB_MSG_LOG_WRITER_WAIT_ON_CONSUMER是什么原因?
A: redo log writer等待consumer,通常log文件小或IO慢。
Q: 如何远程修复不重启?
A: SET GLOBAL innodb_log_writer_threads=1; 然后flush logs;。
Q: 预防这个错误怎么做?
A: 增大innodb_log_file_size到2G以上,用SSD磁盘。
Q: MySQL版本影响吗?
A: 主要8.0+多线程log,有此问题。