Linux

MySQL:如何在忽略 DROP TABLE 語句的情況下恢復 mysql 轉儲(.sql)?

  • July 14, 2015

我正在嘗試恢復多個 mysql 轉儲 (.sql) 文件。每個轉儲文件中的數據都來自同一個表,但具有不同的 ID(主鍵)範圍。

例如,

> 1.sql (0 < ID && ID <= 100)
> 2.sql (100 < ID && ID <= 200)
> ...

我有 100 個像上面這樣的文件,每個文件都包含 ‘DROP TABLE IF EXISTS’ 和 ‘CREATE TABLE’ 語句。由於這兩個語句,我不能簡單地自動化 mysql restore 命令。

> root$> mysql < dump.sql

由於每次我執行sql時,它都會刪除表並刪除所有恢復的數據。所以我需要一些東西,我可以在做的時候忽略 DROP 和 CREATE 語句……

> root$> mysql < dump.sql

有沒有人這樣做過?

僅供參考,我的作業系統是 Amazon Linux AMI。

cat 1.sql | grep -v "DROP TABLE" | mysql --force

假設沒有其他字元串包含刪除命令,這應該可以工作..

更新:使用 –force 忽略 CREATE TABLE 的錯誤。

如果您在 Linux 上執行(任何帶有awk),您可以執行:

awk '!/^DROP TABLE IF EXISTS/{print}' db_dump_sql | mysql -u $user -p --force --database=$db

PD:我補充--force說這意味著:

–強制,-f

即使發生 SQL 錯誤也要繼續。

測試:

root@onare:/home/onare# touch db_dump_sql
root@onare:/home/onare# echo "DROP TABLE IF EXISTS/" >> db_dump_sql 
root@onare:/home/onare# echo "Test 1" >> db_dump_sql 
root@onare:/home/onare# echo "DROP TABLE IF EXISTS/" >> db_dump_sql 
root@onare:/home/onare# echo "Test 2" >> db_dump_sql 
root@onare:/home/onare# awk '!/^DROP TABLE IF EXISTS/{print}' db_dump_sql 
Test 1
Test 2
root@onare:/home/onare# awk '!/^DROP TABLE IF EXISTS/{print}' db_dump_sql | mysql -u $user -p --database=$db

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