Linux
MySQL:如何在忽略 DROP TABLE 語句的情況下恢復 mysql 轉儲(.sql)?
我正在嘗試恢復多個 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