Mysql

為什麼將 MySQL 轉儲從 5.7 導入到 8.0.x 時出現 ERROR 1824 (HY000)?

  • May 8, 2021

我有一個大約 12GB 的 MySQL 5.7.x 轉儲,我嘗試將其導入新安裝的 MySQL 8.0.x 本地實例。

mysql -u username -p test < DB-210508.sql  

導入開始但失敗並顯示以下消息:

ERROR 1824 (HY000) at line 518: Failed to open the referenced table 'table-name'

我想知道為什麼外鍵有問題,如果不是因為我正在導入 8.0.x

MySQL 8.0.x 實例配置如下:

[mysqld]
default_authentication_plugin= mysql_native_password
innodb_buffer_pool_size = 8G
innodb_buffer_pool_instances = 32
innodb_buffer_pool_chunk_size = 134217728
collation_server        = utf8_unicode_ci
character_set_server    = utf8

導入失敗的原因可能是什麼?

當您遇到經典的“雞和蛋”問題時,就會發生此錯誤。最常見的情況是:

  • 填充一個自引用表,其中較低的 ID 需要存在較高
    EmployeeID .
  • 填充一個依賴於另一個尚未創建的表的表
    ⇢ 當您的Employee表具有對 的引用UserUser直到之後才創建時,可能會發生這種情況Employee

您收到的錯誤是:

… Failed to open the referenced table 'table-name'

這表明第二項是最有可能的罪魁禍首。

解決此問題的最簡單方法是在導入數據時刪除外鍵檢查,然後在導入完成後恢復檢查。您可以通過編輯您的 12GB.sql文件來做到這一點:

SET @OLD_FOREIGN_KEY_CHECKS = @@FOREIGN_KEY_CHECKS;
SET FOREIGN_KEY_CHECKS = 0;

然後,在導入文件的最後:

SET FOREIGN_KEY_CHECKS = @OLD_FOREIGN_KEY_CHECKS;

**注意:**禁用外鍵檢查後,可能會記錄不良數據。如果出於監管目的需要避免這種情況,請不要遵循這種“快速”方法。

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