2

我已经做了一些挖掘,但我找不到让 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
4

2 回答 2

1

SHOW TABLES您可以查询INFORMATION_SCHEMA数据库,而不是命令。通过这种方式,您可以轻松地转储每个数据库的每个表,并且还可以知道给定数据库中有多少表(即用于记录目的)。在我的备份中,我使用以下查询:

  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', 以确保视图不会被转储。

于 2012-11-09T12:11:36.883 回答
0

我无法对此进行测试,因为我没有安装 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)
于 2012-11-09T07:25:13.823 回答