我有一个大型数据库。我需要将所有数据库转储到单个文件中,而忽略特定表的数据。我的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
谢谢!
答案 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选项后的表列表),则无法工作。