2013-10-29 60 views
0

我有大的SQL文件,我需要在ubuntu下和MySQL使用 - 忽略表與MySQL同時執行SQL文件

這個文件導入到我的數據庫我用這個命令導出數據庫忽略從轉儲一些表

mysqldump -uroot -proot myDatabase --ignore-table=myDatabase.table1 > sql_backup.sql; 

現在我需要將其導入到另一個數據庫和忽略一些進口手術檯

我如何使用--ignore-table選項使用此命令

mysql -hlocalhost -root -proot newdb< sql_backup.sql 

我可以這樣做嗎?

謝謝

回答

0

您的sql_back.sql文件包含正常的ddl和insert語句。 mysql命令將執行從文件給它的任何命令。

您可以手動打開文件,找到表格以及要忽略的相關插入語句,並將其從文件中刪除或註釋掉,並將其保存到「sql_backup_with_ignored_tables.sql」文件並運行該文件。

+0

謝謝,但我有這個文件裏面的2000萬記錄我怎麼能從Ubuntu服務器上的文件中用ssh連接刪除它 –

+0

請參考@ sal00m給出的答案來獲得一個使用'sed'的例子 – alandarev

0

不符合您的期望。

後面的命令「執行」你給它的數據,而不是一個專用的「備份」工具,並帶有相關的選項。

首先,如果您在備份時忽略了表,那麼它不在sql_backup.sql腳本中,並且不需要做任何額外的工作。

如果存在的sql_backup.sql內的另一個表,那麼兩種解決辦法,我建議:你不想要的表

  1. 使用--ignore-table,同時進行備份。
  2. 手動或使用文本操作工具(如sed)在執行前編輯sql_backup.sql
+0

謝謝但我在這個文件裏面有2000萬條記錄我怎樣才能從Ubuntu服務器上的ssh連接文件中刪除它 –

1

我每週都有這樣的問題。在我的情況下,我需要刪除2表時,我導入數據庫,但需要轉儲它。快速搜索後,我試圖sed,這個我在做什麼,也許它可能對你有用:

#!/bin/bash 
sed '/`log_sessions`/ d' ${1} > dumpLog 
sed '/`log_sessions_requests`/ d' dumpLog > ${2} 
rm dumpLog 

我使用這個腳本來清理垃圾(和覆蓋)刪除所有引用log_sessionslog_sessions_requests

如果你用表格改變了這兩個名字,它應該可以正常工作。

當然,另一種解決方案是做幾個轉儲......但我認爲這是一個更好的方法。

編輯:改劇本,以避免覆蓋主轉儲

如何使用:

  1. 保存腳本到一個名爲cleanDB.sh
  2. 調用腳本喜歡這個新文件./cleanDB.sh mainDump.sql filteredDump.sql

我想你會明白,如果需要一些解釋,只要告訴m e

+0

感謝這個命令sed'/'log_sessions'/d'$ {1}> dumpLog你從文件中刪除表? ?? sed其編輯器或Ubuntu命令 –

+0

它將刪除文件中包含'\'log_sessions \''和'''log_sessions_requests \''的所有行。是的,sed是一個命令(GNU工具),默認在Ubuntu上可用 – alandarev

+0

確切地說,如果你只想刪除插入(也許你需要的表,但是空的)改變'/'log_sessions' /'用'/ INSERT INTO' log_sessions' /'(如果需要,我可以用這個編輯答案) – Sal00m