MySQL系统表故障探究
发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,最近在巡检的时候,发现mysql错误日志中,报如下错误: 1779986 2015-10-06 00:06:37 7f5215214700 InnoDB: Error: Table "mysql"."
千家信息网最后更新 2025年01月19日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安全错误
数据库的锁怎样保障安全
消费软件安装数据库
搜索引擎的服务器是什么
江苏交友软件开发价格表
数据库应用技术性考3
如东县网络技术培训学校
xx网络安全管理
赞丽显示找不到服务器
和平精英服务器卡住了怎么办
唐山服务器托管
杭电网络安全学院徐明院长
无线接入网络技术
服务器三种管理
一个论坛需要多大的数据库
网络安全论文百度文库
如何用手机查找表格数据库
网络安全知识感想200字
小白测评微信数据库
我的世界虎牙服务器怎么举报
云南办公erp软件开发
东丽金蝶软件开发找哪家
门户网站 数据库设计
学校服务器漏洞安全排查总结
笔记本如何连接网络安全模式
sql数据库巡检要点
wind上市公司数据库
杭州信息报修管理软件开发
ark服务器招管理
软件开发合同 知识产权
服务器手机版指令
数据库技术与应用实训项目