如何备份除两个之外的所有MySQL数据库
问题的原因是:在mysqldump中没有可以用于过滤数据库列表的选项。但是可以通过运行两个命令来实现,一个命令用于获取数据库列表并过滤掉指定的数据库,另一个命令用于执行mysqldump命令。
解决方法是:
1. 使用以下命令获取数据库列表并过滤掉指定的数据库:
# DATABASES=$(mysql -N -B -e "SHOW DATABASES" | grep -Ev '(mysql|performance_schema)')
这个命令通过执行mysql命令获取数据库列表,并使用grep命令过滤掉mysql和performance_schema数据库。
2. 使用以下命令执行mysqldump命令,将过滤后的数据库导出:
# mysqldump -B $DATABASES
这个命令使用mysqldump命令导出过滤后的数据库。
需要注意的是,为了包括存储过程在导出中,需要添加-R
选项。
以上就是解决问题的方法。
问题出现的原因:
根据MySQL的参考手册,mysqldump默认不会导出INFORMATION_SCHEMA和performance_schema数据库。要导出这两个数据库,需要在命令行中显式地指定它们,并且还需要使用--skip-lock-tables选项。也可以使用--databases选项指定它们。
解决方法:
为了导出所有数据库,可以使用以下命令:
mysqldump -h 主机名 -u 用户名 -p密码 -A -R > 导出文件名.sql
如果只想测试而不导出所有数据,可以添加-d选项,只导出数据库、表(和例程)的定义,不包含数据。
如Basile在他的回答中所提到的,忽略导出mysql数据库的最简单方法是使用没有访问权限的用户来调用mysqldump。因此,关键是使用或创建一个只有访问要导出的数据库的用户。
问题的原因:用户想要导出除了两个MySQL数据库之外的所有数据库,但不清楚如何实现。
解决方法:
用户可以使用以下命令来同时导出多个数据库:
mysqldump --user=[用户名] --password=[密码] --host=[主机] --databases 数据库1 数据库2 数据库3 [...] --routines > dumpfile.sql
或者可以使用以下命令来导出所有数据库:
mysqldump --user=[用户名] --password=[密码] --host=[主机] --all-databases --routines > dumpfile.sql
对于最后一个命令,如果不想导出performance_schema、mysql、phpMyAdmin等数据库,只需确保[用户名]无法访问它们即可。
用户喜欢在stackoverflow上看到不同用户的回答相互补充的情况,这正是stackoverflow的目的所在。