簡體   English   中英

從shell導入多個.sql轉儲文件到mysql數據庫

[英]Import Multiple .sql dump files into mysql database from shell

我有一個目錄與一堆.sql文件,我的服務器上的每個數據庫的mysql轉儲。

例如

database1-2011-01-15.sql
database2-2011-01-15.sql
...

實際上有很多。

我需要創建一個shell腳本或單行,可能會導入每個數據庫。

我在Linux Debian機器上運行。

我認為有一些方法可以將ls的結果輸入到某些find命令或其他東西中。

任何幫助和教育都非常感謝。

編輯

所以最終我想自動將一個文件一次導入數據庫。

例如,如果我在一個上手動完成它將是:

mysql -u root -ppassword < database1-2011-01-15.sql

cat *.sql | mysql cat *.sql | mysql 你是否需要任何特定的訂單?

如果你有太多的方法來處理這種方式,那么嘗試以下方法:

find . -name '*.sql' | awk '{ print "source",$0 }' | mysql --batch

這也解決了通過管道傳遞腳本輸入的一些問題,盡管在Linux下管道處理不應該有任何問題。 這種方法的mysqlmysql實用程序讀入每個文件而不是從stdin讀取。

單行讀取所有.sql文件並導入它們:

for SQL in *.sql; do DB=${SQL/\.sql/}; echo importing $DB; mysql $DB < $SQL; done

唯一的技巧是使用bash子字符串替換.sql以獲取數據庫名稱。

http://kedar.nitty-witty.com/blog/mydumpsplitter-extract-tables-from-mysql-dump-shell-script上有一個極好的小腳本,它將獲取一個巨大的 mysqldump文件並將其拆分為單個文件每張桌子。 然后,您可以運行這個非常簡單的腳本從這些文件加載​​數據庫:

for i in *.sql
do
  echo "file=$i"
  mysql -u admin_privileged_user --password=whatever your_database_here < $i
done

mydumpsplitter甚至可以在.gz文件上運行,但它比先解壓縮要快得多,然后在未壓縮的文件上運行它。

我說很大 ,但我想一切都是相對的。 花了大約6-8分鍾為我分割一個2000個表,200MB的轉儲文件。

我前段時間創建了一個腳本來完成這個,我稱之為(完全沒有創造性地)“myload”。 它將SQL文件加載到MySQL中。

這是在GitHub上

這很簡單直接; 允許您指定mysql連接參數,並將動態解壓縮gzip的sql文件。 它假定每個數據庫都有一個文件,文件名的基礎是所需的數據庫名稱。

所以:

myload foo.sql bar.sql.gz

將創建(如果不存在)稱為“foo”和“bar”的數據庫,並將sql文件導入到每個數據庫中。

對於該過程的另一方,我編寫了這個腳本(mydumpall) ,它為每個數據庫(或者通過名稱或正則表達式指定的某個子集創建相應的sql(或sql.gz)文件。

我不記得mysqldump的語法,但它會是這樣的

 find . -name '*.sql'|xargs mysql ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM