这个报错通常是因为InnoDB缓冲池内存不够用,先检查服务器内存使用情况,用top命令看一下。如果内存紧张,重启MySQL服务就能暂时解决:远程登录服务器,运行systemctl restart mysqld,或者service mysql restart。然后调大innodb_buffer_pool_size参数,比如设到总内存的70%,在my.cnf里加一行innodb_buffer_pool_size = 4G,重启生效。远程处理的话,用SSH连服务器,编辑配置文件,修改完重启数据库就行。如果是云服务器,还可以直接在控制台扩容内存。
论坛用户分享
我遇到ER_IB_MSG_1231这个错误,日志里说InnoDB: Cannot allocate 1231 bytes of memory,明显是内存申请失败。服务器内存就4G,MySQL占了太多。我直接kill掉mysqld进程,然后ps aux | grep mysql杀干净,重启服务就好用了。远程的话,我用putty连上阿里云,df -h看磁盘,free -h看内存,都正常,就是MySQL吃内存。改了/etc/my.cnf,innodb_buffer_pool_size=2G,net.ipv4.tcp_keepalive_time=600,还加了skip-name-resolve,重启后稳了。
博客经验
MySQL 8.0上碰到ER_IB_MSG_1231,原因是undo日志空间满了。解决方案:远程SSH进服务器,登录MySQL,执行SET GLOBAL innodb_undo_tablespaces=2; 然后重启。或者直接增大undo目录空间,df -h /var/lib/mysql/undo看大小,不够就lvextend扩容。修复后我还设置了innodb_max_undo_log_size=10G,避免再出问题。远程操作超简单,用mysqldump备份数据先,以防万一。
技术贴吧讨论
兄弟们,ER_IB_MSG_1231是我在高并发时遇到的,远程云主机上。日志显示ib_buffer_pool申请内存失败。先用mysql -u root -p连进去,SHOW ENGINE INNODB STATUS;看详细错误。修复:编辑my.cnf,innodb_buffer_pool_instances=8,innodb_buffer_pool_size=6G(服务器16G内存),然后远程执行systemctl restart mysql。完事运行mysqlcheck -o --all-databases检查表。远程处理关键是提前建好脚本,一键重启和配置。
StackOverflow摘录翻译
This error ER_IB_MSG_1231 means InnoDB failed to allocate memory for the buffer pool. Remote fix: Connect via SSH, check free -m, if low, increase innodb_buffer_pool_size in my.cnf to 50-70% of RAM, restart MySQL. Also, tune innodb_flush_log_at_trx_commit=2 for better performance. I did this on AWS RDS by modifying parameters group and rebooting instance.
国内社区全文
昨天服务器报MySQL ER_IB_MSG_1231,远程用Xshell连,top一看mysqld占3G内存,杀进程重启先救急。然后优化:vi /etc/my.cnf 加了 innodb_buffer_pool_size = 8G innodb_log_file_size = 1G innodb_log_buffer_size = 16M,重启mysql。还清了慢查询日志,set global slow_query_log=0。以后监控内存用zabbix,远程告警。
FAQ
Q: ER_IB_MSG_1231和内存无关会是什么?
A: 可能是undo tablespace满了,检查SHOW ENGINE INNODB STATUS;里的undo部分,增大innodb_undo_log_size。
Q: 远程重启MySQL安全吗?
A: 先mysqldump全备份,或用Percona XtraBackup热备,然后重启,风险低。
Q: 怎么防止这个错误重现?
A: 监控内存和InnoDB状态,设innodb_buffer_pool_size合适值,定期优化表。
Q: 云数据库如阿里云RDS怎么修?
A: 控制台改参数组,innodb_buffer_pool_size加大,实例重启或扩容规格。