無法打開表 mysql/innodb_index_stats
在全新安裝 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、delete
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 個表沒有對應的數據字典條目。在您的特定情況下,我懷疑您從 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;
(可選)試一試 !!!