Mysql
為什麼將 MySQL 轉儲從 5.7 導入到 8.0.x 時出現 ERROR 1824 (HY000)?
我有一個大約 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 需要存在較高
的Employee
ID .- 填充一個依賴於另一個尚未創建的表的表
⇢ 當您的Employee
表具有對 的引用User
但User
直到之後才創建時,可能會發生這種情況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;
**注意:**禁用外鍵檢查後,可能會記錄不良數據。如果出於監管目的需要避免這種情況,請不要遵循這種“快速”方法。