我想备份 MySQL 服务器上的所有数据库、用户等。
我遇到过这个命令mysqldump
并相信我可以像这样使用它? (尝试将远程服务器备份到我们的本地计算机)
mysqldump -h web-server.com -u root -p root --all-databases > "/backups/mysql/`date +%Y%m%d`.sql"
然而:
我害怕在对发生的事情知之甚少的情况下运行它(我们在 MySQL 数据库上有大量数据,我们不能失去它!)。所以第一个问题是:这会达到我想要的效果吗?登录远程服务器(例如位于)并将所有 mysql 数据库备份到本地计算机上的
web-server.com
路径?/backups/mysql
我不相信这也会在 MySQL 服务器发生故障时保持每个数据库的所有用户信息完好无损。用户信息是否只是作为另一个数据库存储在MySQL数据库中?还是服务器本身的功能?在这种情况下,是否有其他方法可以备份数据库以包含用户数据?
答案1
1) 是的,这会将所有数据库的内容转储为一系列 INSERT sql 命令,以便您可以使用mysql < backup.sql
.纯粹出于可操作性的考虑,我建议您对每个数据库执行此操作,而不是使用它,--all-databases
因为您会得到一个包含所有内容的大文件,并且它不容易搜索。
您可能需要查看mysqldump
手册页,看看是否还有您想要使用的其他选项。
2)用户信息和访问控制存储在mysql
数据库中;--all-databases
确实包括那个。
答案2
如果您正在mysqldump
远程运行并希望每个数据库都有一个单独的转储文件,则必须维护要备份的数据库的列表。如果在数据库服务器本地运行mysqldump
,则可以循环访问数据目录中存在的数据库mysql
(例如/var/lib/mysql
)。如果mysqldump
必须远程运行,您可以编写一个通过 SSH 连接的脚本,检索数据库列表,然后断开连接并mysqldump
使用数据库名称运行。
--all-databases
如果不指定单个数据库名称,我不会使用,并且会另外使用该选项--add-drop-database
。这还将在转储文件中包含 SQL 语句,以创建数据库(如果不存在),或者删除数据库(如果存在)并重新创建它。从man 1 mysqldump
:
--add-drop-database
Add a DROP DATABASE statement before each CREATE DATABASE statement.
This option is typically used in conjunction with the --all-databases
or --databases option because no CREATE DATABASE statements are written
unless one of those options is specified.
这是一个快速而肮脏的脚本,旨在在数据库服务器上本地运行,它将备份变量中指定的数据库,$DB
从而为每个数据库生成一个转储文件。它还会删除任何超过 15 天的以前的转储文件。
#!/bin/sh
PATH=/bin:/usr/bin
DATE="`date +%Y%m%d`"
DB="mysql drupal drupaldev"
DUMP_DIR="/u01/mysql_dump"
for db in `echo $DB`
do
mysqldump -u root --password=password --databases --add-drop-database $db > $DUMP_DIR/$db.$DATE.dmp
gzip -9 $DUMP_DIR/$db.$DATE.dmp
find $DUMP_DIR/* -mtime +14 -exec rm -f '{}' \;
done