找回密码
 新建账号

mysql Table 'mysql.innodb_index_stats' doesn't exist

[复制链接]
php 发表于 2017/8/26 12:36 | 显示全部楼层 |阅读模式
Table 'mysql.innodb_index_stats' doesn't exist
Table 'mysql.innodb_table_stats' doesn't exist
Table 'mysql.slave_master_info' doesn't exist
Table 'mysql.slave_relay_log_info' doesn't exist
Table 'mysql.slave_worker_info' doesn't exist

MySQL 升级版本后使用 mysql_upgrade -hwuxiancheng.cn -uroot -p 升级了系统数据库,随后 MySQL 出现了 mysql 数据库丢失数据表的错误提示,神奇的是从官方下载的原始版本安装以后也会出现这样的问题。吴先成发现,这个问题是因为 InnoDb 的 ibdata ibdata1 等文件丢失造成的,平时千万不要乱删 MySQL data 目录及其子目录中的文件,否则有可能短时间没有什么大问题,实际上可能已经有很多数据丢失了。

以下提供两种解决各种 InnoDB 数据表不存在的方法。

方法一:如果是 MySQL 5.7+ 版本,可以将 performance_schema 和 mysq l以外的数据库导出,关闭 MySQL 服务器以后将 data 目录中的文件全部全部删除,保留 data 目录,然后运行 mysqld --initialize 重新生成初始化数据,操作完成以后再将导出的数据导入回来即可。由此可以看出,为了方便系统还原,建议使用 MySQL 时不要往 mysql 这个默认的系统数据库里面存入数据,而是总是建立系统数据库以外的数据库存放自己的数据。

方法二:本方法对 MySQL 所有版本都适用,对于MySQL 5.6 及更低版本,上面的方法是行不通的,因为 MySQL 早期版本根本没有生成初始数据的功能。
第一步 关闭 MySQL 服务器,进入 data\mysql 目录,将以下10个文件全部删除掉
  • slave_worker_info.ibd
  • slave_worker_info.frm
  • slave_relay_log_info.ibd
  • slave_relay_log_info.frm
  • slave_master_info.ibd
  • slave_master_info.frm
  • innodb_table_stats.ibd
  • innodb_table_stats.frm
  • innodb_index_stats.ibd
  • innodb_index_stats.frm
第二步 使用 MySQL 附带的原始数据恢复出问题的数据表:启动 MySQL 服务器,使用命令行连接到数据库,然后分别运行以下两条 SQL 语句,其中{mysql} 代表 MySQL 安装目录的绝对路径,如果路径包含空格,需要给 source 后面的参数添加一对双引号。
  • source {mysql}\share\mysql_system_tables.sql;
  • source {mysql}\share\mysql_system_tables_data.sql;
第三步 关闭并且重新启动 MySQL,重新运行 mysql_upgrade.

MYSQL 官方链接 https://dev.mysql.com/downloads/mysql/ https://dev.mysql.com/doc/refman/8.0/en/installing.html

手机版|轻松E站

GMT+8, 2024/12/21 20:34

快速回复 返回顶部 返回列表