如何转储除两个数据库之外的所有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