如何在同一数据库的mysql中将多个dump命令结果合并到单个文件中

时间:2015-07-29 09:44:53

标签: mysql mysqldump

我有一个大型数据库。我需要将所有数据库转储到单个文件中,而忽略特定表的数据。我的R& D在Windows中是成功的,但在Linux服务器上失败了。

我的用于windows env的db dump命令位于下面,

F:\xampp\mysql\bin/mysqldump -h localhost -u root --password= db_name --add-drop-table --ignore-table=db_name.table1 > F:\xampp\htdocs\c4s\temp\backup\db_name.sql && F:\xampp\mysql\bin/mysqldump -h localhost -u root --password= --add-drop-table --no-data db_name table2 >> F:\xampp\htdocs\projectName\temp\backup\db_name.sql   

这很好用!但是当我在Linux环境中执行它时,第二个转储选项不起作用..

Linux环境的dump命令是

/usr/bin/mysqldump -h localhost -u root --password=mypass db_name db_name.table1 > /var/www/html/projectName/temp/backup/2/db_name.sql && /usr/bin/mysqldump -h localhost -u root --password=mypass --add-drop-table --no-data db_name table2 >> /var/www/html/projectName/temp/backup/db_name.sql 

谢谢!

2 个答案:

答案 0 :(得分:0)

如果每个转储单独工作,只需创建一个小的shell脚本dump.sh

#!/bin/sh -eu
/usr/bin/mysqldump -h localhost -u root --password=mypass db_name db_name.table1
/usr/bin/mysqldump -h localhost -u root --password=mypass --add-drop-table --no-data db_name table2

然后您可以将结果转储到文件中:

./dump.sh > /var/www/html/projectName/temp/backup/db_name.sql

由于你没有提到原始方法的问题,这里有一个疯狂的猜测:

> /var/www/html/projectName/temp/backup/2/db_name.sql
>> /var/www/html/projectName/temp/backup/db_name.sql

您正在转储两个不同的文件。如果要转储到同一个文件中,实际上需要再次为同一个文件命名。

此外,通过命令行传递密码不是一个好主意。服务器上的任何人都可以在备份运行时使用ps查看密码。最好的方法是,如果您使用密码和要使用的所有其他选项创建选项文件,然后使mysqldump使用此选项。

选项文件mysqldump.cnf

[mysqldump]
password=secret

要使用该文件,请通过命令行传递,但在命令行中输入密码 - 它将在选项文件中使用:

/usr/bin/mysqldump --defaults-extra-file=mysqldump.cnf -h localhost -u root …

有关mysqldump的详情,您可以免费咨询mysqldump manual

答案 1 :(得分:0)

我发现了这个问题。 - 无数据 选项如果在数据库中找不到该列表的任何表(--no-data选项后的表列表),则无法工作。