使用我的標誌 mysqldump 遺失資料的一部分以便重新匯入是否安全?

使用我的標誌 mysqldump 遺失資料的一部分以便重新匯入是否安全?

假設在測試資料庫上大約一年的資料被刪除。我最早獲得了一年中數據的兩個 ID,最晚獲得了另一年中的數據,因此這裡缺少一系列內容。我的問題;從資料庫的完整實例使用以下命令以獲得可用於修復資料庫中遺失的資訊區塊的工作轉儲是否有任何危險?命令:

mysqldump -t --insert-ignore --skip-opt --single-transaction --quick --where="id<156789339" -w"id>124054297" -u root -p database table > partial.sql

在 gzip 壓縮/移動之後導入:

zcat partial.sql.gz | mysql -u root -p database table

可能有一個值得一提的警告 - 數據來自 mysql 5.5 (percona),同時導入到 mysql 5.1 實例中,盡可能我認為我不知道由此可能引起的兼容性問題。

我的理解-t是避免創建CREATE TABLE語句(--no-create-info),--insert-ignore以防我的範圍重疊,因此它會忽略該 id 是否已經存在,並--skip-opt確保它不會做一大堆在導入時會破壞事物的事情(--add-drop-tab, --add-locks, --create-options, --disable-keys, --extended-insert, --lock-tables, --quick, and --set-charset根據手冊頁)對於 mysqldump)。只是想確定這就是我在導出時需要的全部內容,以及在最終出現任何可能的錯誤之前我在導入時是否遺漏了任何內容。

答案1

也許這樣就可以了。在某些特殊情況下,它可能會失敗。

  • 您的資料庫中有外鍵使用 ON DELETE CASCADE 語句指向您的表,在這種情況下,您會因先前的刪除而遺失其他數據,並且還必須查找並複製該資料。如果您的資料庫使用 MYISAM,則您沒有外鍵,所以您是安全的。

  • 您正在使用先前版本中不支援的特殊功能,例如。全文索引。既然你說這是測試資料庫,我想模型是相同的。這樣的話應該就沒問題了。

  • 您正在使用不同的編碼/整理在兩個資料庫中,表格中有非 ASCII(本地化)文字欄位。同樣,如果型號相同,應該沒有問題。 (如果你的表格沒有明確的編碼定義並且mysql伺服器中的預設編碼不同您可能會遇到問題,但可能性不大)。

如果您使用 INNODB,您可能想要在 TRANSACTION 中執行整個轉儲(在 BEGIN; 和 COMMIT; 之間)

相關內容