Innodb

MariaDB 10.2 InnoDB 內部數據字典問題

  • June 22, 2017

我最近將 Windows Server 2012 上的 MariaDB 安裝升級到了穩定版本 10.2.6。但是,我在一張特定的桌子上遇到了問題。

每次 MariaDB 啟動時,它都會記錄以下內容:

2017-05-23 1:28:53 4180

$$ ERROR $$InnoDB: SYS_TABLES::TYPE=1697 page_compression:0 page_compression_level:3 atomic_blobs:1 2017-05-23 1:28:53 4180

$$ ERROR $$InnoDB:表dbnametablenameInnoDB 數據字典中包含無效標誌。SYS_TABLES.TYPE=1697 SYS_TABLES.N_COLS=2147483655

我在這張桌子上試過REPAIR了,但它說引擎中不存在這張桌子。

如果我嘗試刪除此表,我會得到

2017-05-23 1:58:07 5076

$$ ERROR $$InnoDB: SYS_TABLES::TYPE=1697 page_compression:0 page_compression_level:3 atomic_blobs:1 2017-05-23 1:58:07 5076$$ ERROR $$InnoDB:表dbnametablenameInnoDB 數據字典中包含無效標誌。SYS_TABLES.TYPE=1697 SYS_TABLES.N_COLS=2147483655 2017-05-23 1:58:07 5076

$$ ERROR $$InnoDB:SYS_TABLES 中的標誌不正確 2017-05-23 1:58:07 5076

$$ ERROR $$InnoDB:表dbnametablename儘管 MariaDB 試圖刪除它,但 InnoDB 內部數據字典中不存在它。您是否將表的 .frm 文件從另一個數據庫複製到 MariaDB 數據庫目錄?請參閱http://dev.mysql.com/doc/refman/5.7/en/innodb-troubleshooting.html了解如何解決該問題。

後來 MariaDB 認為這個表不存在,而 InnoDB 不這麼認為。當我嘗試將新創建的表重命名為相同的名稱時,我得到:

2017-05-23 2:03:30 5076

$$ ERROR $$InnoDB:可能的原因: 2017-05-23 2:03:30 5076

$$ ERROR $$InnoDB:(1)表重命名會導致兩個 FOREIGN KEY 約束在不區分大小寫的比較中具有相同的內部名稱。 2017-05-23 2:03:30 5076

$$ ERROR $$InnoDB:(2)表dbnametablename儘管 MySQL 試圖重命名 table ,但存在於 InnoDB 內部數據字典中dbname1tablename給它。您是否刪除了 .frm 文件而不使用 DROP TABLE? 2017-05-23 2:03:30 5076

$$ Note $$InnoDB:請參閱http://dev.mysql.com/doc/refman/5.7/en/innodb-troubleshooting.html了解如何解決該問題。 2017-05-23 2:03:30 5076

$$ ERROR $$InnoDB:如果表dbname. tablename是一個臨時表#sql…,那麼可能是該表上還有查詢在執行,查詢結束時會自動丟棄。您可以通過在另一個數據庫中創建具有相同名稱的 InnoDB 表並將 .frm 文件複製到目前數據庫來刪除 InnoDB 中的孤立表。然後 MySQL 認為該表存在,DROP TABLE 就會成功。

網際網路上的解決方案之一是重新創建整個數據庫,由於長時間停機,這對我來說不是一個選擇。

到目前為止,我最終使用 Aria 引擎創建了一個具有相同結構的表。但是我怎樣才能讓它與 InnoDB 一起工作呢?

有任何工具可以使用該 InnoDB 數據字典嗎?

此外,嘗試SELECTinformation_schema. INNODB_SYS_TABLES使整個伺服器崩潰。

不幸的是,MariaDB 10.2 更改了數據格式,破壞了與 10.1 的兼容性 - 問題 MDEV-12873 - 所以雖然升級會“成功”,但您不再有權訪問您的數據。

顯然 10.2.7 將修復此錯誤;同時,您似乎只需要恢復到最近的備份。(雪上加霜的是,失敗的“升級”也阻止了直接恢復,所以你需要探勘一個完整的備份並從中恢復。)這讓我很不安,這設法溜進了一個“穩定的版本”。

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