Mysql

無法打開表 mysql/innodb_index_stats

  • December 2, 2015

在全新安裝 XAMPP 並從我正在執行的 Windows 開發階段的 linux live db 導入後,我開始遇到INSERT. 其他一切似乎都運作良好。

我得到的錯誤mysql_error.log是:

2013-08-15 12:44:49 16c0 InnoDB: Error: Table "mysql"."innodb_table_stats" not found.
2013-08-15 12:44:49 16c0 InnoDB: Recalculation of persistent statistics requested for table "sizaradb"."pages" but the required persistent statistics storage is not present or is corrupted. Using transient stats instead.
2013-08-15 12:44:59 16c0 InnoDB: Error: Table "mysql"."innodb_table_stats" not found.
2013-08-15 12:44:59 16c0 InnoDB: Recalculation of persistent statistics requested for table "sizaradb"."translations" but the required persistent statistics storage is not present or is corrupted. Using transient stats instead.

mysql/innodb_index_stats儘管表的 .frm 文件存在,但我無法從 InnoDB 的內部數據字典中打開表

我試圖通過Google搜尋錯誤並嘗試查看其他人的修復來修復它,但它仍然無法正常工作。我已經為此工作了2天。

請幫我解決它。

問題

在 MySQL 5.6 中,架構ibdata1中包含 5 個 InnoDB 。mysql

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、deleteibdata1並重新啟動 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 個表沒有對應的數據字典條目。

在您的特定情況下,我懷疑您從 Linux 伺服器複製ibdata1到 Windows 伺服器。MySQL/Windows 期望數據字典具有 DOS 文件名格式。將其ibdata1移至 Windows,MySQL/Windows 無法與 Linux 文件名和指向.frm.ibd文件的路徑相關聯。

解決方案

STEP 01 : 在另一個數據庫伺服器上安裝 MySQL

STEP 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

STEP 03 : 複製mysql_innodb_tables.sql到帶有壞表的數據庫伺服器。

步驟 04:執行mysql_innodb_tables.sql

步驟 05:執行FLUSH TABLES;(可選)

試一試 !!!

引用自:https://dba.stackexchange.com/questions/48166