Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何转储除两个数据库之外的所有MySQL数据库_Mysql - Fatal编程技术网

如何转储除两个数据库之外的所有MySQL数据库

如何转储除两个数据库之外的所有MySQL数据库,mysql,Mysql,这可能非常简单,但是我将为一个实时服务器这样做,不想把它搞砸 有人能告诉我如何对除mysql和performance_schema数据库之外的所有数据库、过程、触发器等执行mysqldump吗?在mysqldump中没有可用于筛选数据库列表的选项,但您可以运行两个命令: # DATABASES=$(mysql -N -B -e "SHOW DATABASES" | grep -Ev '(mysql|performance_schema)') # mysqldump -B $DATABASES

这可能非常简单,但是我将为一个实时服务器这样做,不想把它搞砸


有人能告诉我如何对除mysql和performance_schema数据库之外的所有数据库、过程、触发器等执行mysqldump吗?

mysqldump
中没有可用于筛选数据库列表的选项,但您可以运行两个命令:

# DATABASES=$(mysql -N -B -e "SHOW DATABASES" | grep -Ev '(mysql|performance_schema)')
# mysqldump -B $DATABASES

默认情况下,
mysqldump
不会转储
INFORMATION\u SCHEMA
performance\u SCHEMA
数据库。要转储这两个表中的任何一个,请在命令行中显式命名它,并使用
--skip lock tables
选项。您还可以使用
--databases
选项为它们命名

这就解决了您对转储这些数据库的担忧

现在,要转储所有数据库,我认为您应该执行以下操作:

mysqldump-h Host-u User-pPassword-A-R>very_big_dump.sql
要在不转储所有数据的情况下对其进行测试,可以添加
-d
标志,以仅转储不含数据的数据库、表(和例程)定义


正如Basile在他的回答中提到的,ommit转储
mysql
数据库的最简单方法是使用无权访问该数据库的用户调用
mysqldump
。因此,要点是:使用或创建一个只能访问要转储的数据库的用户。

是的,您可以同时转储多个模式:

mysqldump --user=[USER] --password=[PASS] --host=[HOST] --databases mydb1 mydb2 mydb3 [...] --routines > dumpfile.sql


关于最后一个命令,如果您不想转储performance_schema(编辑:如@Barranka所述,默认情况下mysqldump不会转储它)、mysql、phpMyAdmin schema等。您只需要确保[USER]无法访问它们

您需要添加
-R
标志以将存储过程包括在转储中(我了解到困难的是:S)@Barranka您可以添加更多,但OP似乎要求跳过一些数据库。正如您提到的,默认情况下不会转储信息模式或性能模式,但是mysql将是这样。我喜欢不同用户的答案彼此丰富!这就是stackoverflow的用途:-)
mysqldump --user=[USER] --password=[p --host=[HOST] --all-databases --routines > dumpfile.sql