问题
在MySQL 5.6中,ibdata1在mysql架构中包含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版本中,如果关闭mysql,删除ibdata1,并启动mysql备份,则重新创建ibdata1.如果使用MySQL 5.6执行此操作,则不会重新创建这5个表.即使你删除了ibdata1,下面的10个文件仍然在/ var / lib / mysql / mysql中:
> innodb_index_stats.frm
> innodb_index_stats.ibd
> innodb_table_stats.frm
> innodb_table_stats.ibd
> slave_master_info.frm
> slave_master_info.ibd
> slave_relay_log_info.frm
> slave_relay_log_info.ibd
> slave_worker_info.frm
> slave_worker_info.ibd
我很早就学到了这一点.对于新创建或损坏的ibdata1,这5个表没有相应的数据字典条目.
在您的特定情况下,我怀疑您将ibdata1从Linux服务器复制到Windows服务器. MySQL / Windows期望数据字典具有DOS文件名格式.将ibdata1移动到Windows,MySQL / Windows无法与指向.frm和.ibd文件的Linux文件名和路径相关联.
解
步骤01:在另一个数据库服务器上安装MySQL
第02步:mysqldump只有那5个表
TABLELIST="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
步骤03:将mysql_innodb_tables.sql复制到具有错误表的数据库服务器.
步骤04:执行mysql_innodb_tables.sql
步骤05:运行FLUSH TABLES; (可选的)
试试看 !!!