簡體   English   中英

每個 *.sql 文件批處理腳本的 mysqldump 表

[英]mysqldump table per *.sql file batch script

我已經做了一些挖掘,但我找不到讓 mysqldump 為每個表創建一個文件的方法。 我有大約 100 個表(並且還在增加),我想將它們轉儲到單獨的文件中,而不必為我擁有的每個表編寫新的 mysqldump 行。

例如,而不是包含我的數據庫的所有表的 my_huge_database_file.sql。 我想要 mytable1.sql、mytable2.sql 等

mysqldump 有這個參數還是可以用批處理文件來完成? 如果是如何。


它用於備份目的。

我想我可能已經找到了一個解決方法,那就是制作一個小的 PHP 腳本來獲取我的表的名稱並使用 exec() 運行 mysqldump。

$result = $dbh->query("SHOW TABLES FROM mydb") ;

while($row = $result->fetch()) {

exec('c:\Xit\xampp\mysql\bin\mysqldump.exe -uroot -ppw mydb > c:\dump\\'.$row[0]) ;
}

在我的批處理文件中,我只需執行以下操作:

php mybackupscript.php

我無法對此進行測試,因為我沒有安裝 Windows MySQL,但這應該會為您指明正確的方向:

@echo off
mysql -u user -pyourpassword database -e "show tables;" > tables_file
for /f "skip=3 delims=|" %%TABLE in (tables_file) do (mysqldump -u user -pyourpassword database %%TABLE > %%TABLE.sql)

您可以查詢INFORMATION_SCHEMA數據庫,而不是SHOW TABLES命令。 通過這種方式,您可以輕松轉儲每個數據庫的每個表,還可以知道給定數據庫中有多少表(即用於日志記錄)。 在我的備份中,我使用以下查詢:

  SELECT DISTINCT CONVERT(`TABLE_SCHEMA` USING UTF8) AS 'dbName' 
       , CONVERT(`TABLE_NAME` USING UTF8) AS 'tblName'
       , (SELECT COUNT(`TABLE_NAME`)
    FROM `INFORMATION_SCHEMA`.`TABLES`
   WHERE `TABLE_SCHEMA` = dbName
GROUP BY `TABLE_SCHEMA`) AS 'tblCount'
    FROM `INFORMATION_SCHEMA`.`TABLES` 
   WHERE `TABLE_SCHEMA` NOT IN ('INFORMATION_SCHEMA', 'PERFORMANCE_SCHEMA', 'mysql')
ORDER BY 'dbName' ASC 
       , 'tblName' ASC;

您還可以在WHERE子句中添加一個語法,例如TABLE_TYPE != 'VIEW' ,以確保視圖不會被轉儲。

暫無
暫無

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

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