2009-11-19 51 views
29

我的數據庫有3個表:表1,表2和表3mysqldump的整個結構,而且僅數據

我想要這樣做數據庫用以下條件在mysqldump的:

  • 所有錶轉儲結構
  • 只轉儲Table 1和表2的數據,表3中

目前忽略的數據,我這樣做有2個mysqldump的語句

mysqldump -u user -p -d db > db_structure.sql 
mysqldump -u user -p db --ignore-table=db.table3 > table1_and_table2_data.sql 

它們導入他們傾倒(結構,那麼數據從表1和表2)

有沒有辦法來此合併成一個單一的mysqldump命令相同的順序?

+0

我有同樣的問題!你找到了一種方法嗎? – 2012-08-09 13:14:18

回答

37

您不能將它們組合在一個命令中,但可以同時執行這兩個命令並輸出到同一個文件。

mysqldump -u user -p --no-data db > structure.sql; mysqldump -u user -p db table1 table2 >> structure.sql 

,以避免必須輸入兩次密碼,你可以做-ppassword(注意空間不足!)。也可以在第一個命令中使用--no-data,否則也會結束數據。當你只做一個數據庫時不需要-d。

+0

感謝您的回答!不過,我想知道現在是否還能以更優雅的方式做到這一點。 – 2012-08-09 13:13:26

+0

@EmilioNicolás不是我所知道的 – Cfreak 2012-08-09 13:31:47

0

我不認爲你可以在一個命令中做到這一點。但是你絕對可以將輸出合併到一個文件中。爲什麼不把它包起來在一些shell腳本,它下面:

mysqldump -u $1 -p$2 -d db > dump.sql && mysqldump -u $1 -p$2 db --ignore-table=db.table3 >> dump.sql 

您將有兩個參數運行此腳本:用戶名和密碼。

6

鑑於你可能希望通過管道輸出到另一個命令,像我一樣,而不是隻重定向到一個文件,並追加到該文件中的下一個命令,你可以嘗試(從stask的例子修改):

(mysqldump -u $1 -p$2 -d db && mysqldump -u $1 -p$2 db --ignore-table=db.table3) |\ 
your_command 

...在我的情況:

(mysqldump -u $1 -p$2 -d db && mysqldump -u $1 -p$2 db --ignore-table=db.table3) |\ 
gzip -9 > filename.sql.gz 

內附兩個括號中的mysqldump命令創建一個子shell的輸出,我們管gzip格式,然後重定向到一個文件中。 PS:我也一直無法將它合併成一個單一的mysqldump調用,但是,我已經無法將它組合成一個單一的mysqldump調用。

0

它實際上非常簡單,在你不需要數據的表上使用where子句並給它始終爲假的條件。例如,在foo和gah上加載數據,僅在圖形上加載數據:

mysqldump -u ... -p... myDatabase foo bar --where='1=2' gah > myfile.sql 

因此,您可以在一行上執行此操作。

0

可以刪除INSERT INTO ...部分:

mysqldump \ 
    --opt \ 
    -u ${DB_USER} -p${DB_PASS} \ 
    ${DB_NAME} \ 
    | grep -v 'INSERT INTO `table3`' \ 
    | grep -v 'INSERT INTO `table4`' 
相關問題