每个* .sql文件批处理脚本的mysqldump表

时间:2012-11-09 07:03:35

标签: mysql batch-file backup mysqldump

我已经做了一些挖掘,我找不到让mysqldump为每个表创建文件的方法。我有大约100个表(并且正在增长),我希望将其转储到单独的文件中,而不必为每个表编写一个新的mysqldump行。

E.g。而不是包含我的数据库的所有表的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

2 个答案:

答案 0 :(得分:1)

我无法对此进行测试,因为我没有安装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)

答案 1 :(得分: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',以确保视图不会被转储。