MySQL系统表故障探究
发表于:2025-11-06 作者:千家信息网编辑
千家信息网最后更新 2025年11月06日,最近在巡检的时候,发现mysql错误日志中,报如下错误: 1779986 2015-10-06 00:06:37 7f5215214700 InnoDB: Error: Table "mysql"."
千家信息网最后更新 2025年11月06日MySQL系统表故障探究最近在巡检的时候,发现mysql错误日志中,报如下错误:
在错误日志中追溯原因,发现是在一次故障迁移中,删除过ibdata1文件,在重启之后,自动创建的ibdata1文件,但这几张innodb系统表并没加载到表空间中。这些错误虽然并不影响业务,但很影响备份,在错误日志中大量出现,也是很烦的。
那么对于这样的错误,我们该如何处理?
1、如果是slave备机,停止复制,记录pos等信息(对于不复制mysql库来说,也没有必要做这一步) mysql>stop slave ;
2、删除上述系统表 drop table mysql.innodb_index_stats; drop table mysql.innodb_table_stats;
drop table mysql.slave_master_info;
drop table mysql.slave_relay_log_info;
drop table mysql.slave_worker_info ;
3、删除相关的.frm与 .ibd 文件
rm -rf innodb_*_stats* rm -rf slave_*
4、重新创建上述系统表
注意:不要轻易删除ibdata1文件,在不同的版本、不同的分支,系统表都有可能不太一样,如mysql 5.6 与 MariaDB 10.0的系统表,mysql5.5 与mysql 5.6 的 系统表等等,在做迁移或升级时,很容易忽略掉这些细节,所以在做之前,一定要备份,不要任性而为。
参考文章:http://bugs.mysql.com/bug.php?id=67179
1779986 2015-10-06 00:06:37 7f5215214700 InnoDB: Error: Table "mysql"."innodb_table_stats" not found.1779987 2015-10-06 00:06:37 7f5215214700 InnoDB: Recalculation of persistent statistics requested for table "xxxx"."xxxxxx" but the required persistent statistics storage is not present or is corrupted. Using transient stats instead.经过排查,发现是mysql 的几张系统表不见了,到底是那几张呢? MySQL 5.6的ibdata1表空间包含了5个InnoDB基础表,如下:mysql> select table_name from information_schema.tables where table_schema='mysql' and engine='InnoDB';+----------------------+| table_name |+----------------------+| innodb_index_stats || innodb_table_stats || slave_master_info || slave_relay_log_info || slave_worker_info |+----------------------+5 rows in set (0.00 sec)在MySQL 5.6之前,如果关闭MySQL后删除ibdata1,再重新启动MySQL的时候ibdata1会被重新创建, 但从MySQL 5.6开始,这5个表不会被重建,究其缘由是因为这几张表的存储引擎是innodb,而且在MySQL5.5 中并没有这几张表。大致来看看5.6与5.5系统表的区别:
MySQL 5.5 系统表 +---------------------------+| columns_priv || db || event || func || help_category || help_keyword || help_relation || help_topic || host || ndb_binlog_index || plugin || proc || procs_priv || proxies_priv || servers || tables_priv || time_zone || time_zone_leap_second || time_zone_name || time_zone_transition || time_zone_transition_type || user |+---------------------------+22 rows in set (0.00 sec)MySQL 5.6 系统表+---------------------------+| Tables_in_mysql |+---------------------------+| columns_priv || db || event || func || general_log | | help_category || help_keyword || help_relation || help_topic || innodb_index_stats || innodb_table_stats || ndb_binlog_index || plugin || proc || procs_priv || proxies_priv || servers || slave_master_info || slave_relay_log_info || slave_worker_info || slow_log || tables_priv || time_zone || time_zone_leap_second || time_zone_name || time_zone_transition || time_zone_transition_type || user |+---------------------------+28 rows in set (0.00 sec)由上述统计可以看到,在mysql5.6 中,除了增加了上述5张表,还添加了general_log 、slow_log 表,并且将5.5中的host表合到了5.6中的user表中。在错误日志中追溯原因,发现是在一次故障迁移中,删除过ibdata1文件,在重启之后,自动创建的ibdata1文件,但这几张innodb系统表并没加载到表空间中。这些错误虽然并不影响业务,但很影响备份,在错误日志中大量出现,也是很烦的。
那么对于这样的错误,我们该如何处理?
1、如果是slave备机,停止复制,记录pos等信息(对于不复制mysql库来说,也没有必要做这一步) mysql>stop slave ;
2、删除上述系统表 drop table mysql.innodb_index_stats; drop table mysql.innodb_table_stats;
drop table mysql.slave_master_info;
drop table mysql.slave_relay_log_info;
drop table mysql.slave_worker_info ;
3、删除相关的.frm与 .ibd 文件
rm -rf innodb_*_stats* rm -rf slave_*
4、重新创建上述系统表
- 从其他机器上,使用mysqldump将这几张表的表结构备份出来,放到该机器上重新执行,备份脚本如下:
#!/bin/shTABLELIST="innodb_index_stats"TABLELIST="${TABLELIST} innodb_table_stats"TABLELIST="${TABLELIST} slave_master_info"TABLELIST="${TABLELIST} slave_relay_log_info"TABLELIST="${TABLELIST} slave_worker_info"mysqldump -uroot -p mysql ${TABLELIST} > mysql_innodb_tables.sql - 将 mysql_innodb_tables.sql拷贝到出现坏表错误的那台数据库机器,并将其导入到系统库mysql库中.
# mysql -uroot -p mysql < mysql_innodb_tables.sql
- 运行FLUSH TABLES(可选)
注意:不要轻易删除ibdata1文件,在不同的版本、不同的分支,系统表都有可能不太一样,如mysql 5.6 与 MariaDB 10.0的系统表,mysql5.5 与mysql 5.6 的 系统表等等,在做迁移或升级时,很容易忽略掉这些细节,所以在做之前,一定要备份,不要任性而为。
参考文章:http://bugs.mysql.com/bug.php?id=67179
系统
错误
备份
文件
日志
机器
不同
数据
数据库
时候
空间
影响
故障
任性
必要
业务
信息
分支
原因
基础
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
大专计算机网络技术期末
魔兽世界副本数据库178
工信部认证的软件开发资质
郑州软件开发公司哪家比较好
计算机网络技术如何找工作
服务器做域管理
简述网络安全的基本概念
数据库查找不到返回什么值
重庆潼南网络生鲜软件开发
一台网络安全设备的域名是什么
帝国神话私人服务器伤害调节
山东前端软件开发费用
服务器机箱钥匙
中国台湾it 软件开发哪家快
长沙erp软件开发怎么收费
提高网络安全意识快闪
广州卧牛网络技术有限公司
排水数据库
三级网络技术获证条件
腾讯云服务器存放数据怎么读取
温州ios系统软件开发
邹平模具软件开发定制
当年微信服务器损坏
中国长城属于哪类十大网络安全股
广西省台式电脑服务器自动生产线
网络安全模型PDRR是
数据库完整性分为三种
贵阳培训软件开发
客户信息管理软件开发
世界大战赫德斯用的啥游戏服务器