我可以转储所有数据库*除了一个*使用mysqldump吗?

Dan*_*ola 22 windows backup mysqldump

我目前正在使用mySQLdump备份我的开发机器和服务器.

我刚开始有一个项目,它有一个我真的不需要备份的HUUUUUGE数据库,而且将它添加到剩余的备份周期中我将是个大问题.

我现在正在这样做:

"c:\Program Files\mysql\MySQL Server 5.1\bin\mysqldump" -u root -pxxxxxx --all-databases > g:\backups\MySQL\mysqlbackup.sql
Run Code Online (Sandbox Code Playgroud)

有可能以某种方式指定"除了这个数据库"吗?

我不想手动指定DB列表,因为这意味着我必须记住每次创建新数据库时更新我的​​备份批处理文件,我知道这不会发生.

编辑:你可能从我上面的命令行猜到,我在Windows上这样做,所以我不能做任何花哨的bash东西,只有懦弱的.bat的东西.

或者,如果您有其他想法来解决同样的问题,那么它们非常受欢迎,当然!

Ign*_*ams 31

mysql ... -N -e "show databases like '%';" |grep-v -F databaseidontwant |xargsmysqldump ... --databases > out.sql

  • @Daniel:你*点击了答案中的链接......对吗? (3认同)

小智 25

echo 'show databases;' | mysql -uroot -proot | grep -v ^Database$ | grep -v ^information_schema$ | grep -v ^mysql$ | grep -v -F db1 | xargs mysqldump -uroot -proot  --databases > all.sql
Run Code Online (Sandbox Code Playgroud)

转储所有数据库,除了:mysql,information_schema,mysqldb1.

或者,如果您想在转储之前查看列表:

  1. echo 'show databases;' | mysql -uroot -proot > databases.txt
  2. 编辑databases.txt并删除任何您不想转储的内容
  3. cat databases.txt | xargs mysqldump -uroot -proot --databases > all.sql

  • 这太棒了!它真的是最优雅的解决方案!当我发表声明时,我也包括Linux机器. (2认同)

pup*_*eno 9

关于什么

- 忽略表=的db_name.tbl_name

不要转储给定的表,必须使用数据库和表名来指定该表.要忽略多个表,请多次使用此选项.

也许你需要指定一些来完全忽略大数据库.


Ger*_*ard 5

我创建了以下一行解决方案,避免了多个 grep 命令。

mysql -e "show databases;" | grep -Ev "Database|DatabaseToExclude1|DatabaseToExclude2" | xargs mysqldump --databases >mysql_dump_filename.sql
Run Code Online (Sandbox Code Playgroud)

grep 中的 -E 启用扩展的正则表达式支持,允许提供由管道符号“|”分隔的不同匹配项。可以向 mysqldump 命令添加更多选项。但仅在“--databases”参数之前。

小提示,我喜欢像这样定义转储的文件名......

... >mysql_dump_$(hostname)_$(date +%Y-%m-%d_%H-%M).sql
Run Code Online (Sandbox Code Playgroud)

这将自动将主机名、日期和时间添加到文件名中。:)