备份MySQL服务器

备份MySQL服务器

我想备份 MySQL 服务器上的所有数据库、用户等。

我遇到过这个命令mysqldump并相信我可以像这样使用它? (尝试将远程服务器备份到我们的本地计算机)

mysqldump -h web-server.com -u root -p root --all-databases > "/backups/mysql/`date +%Y%m%d`.sql"

然而:

  1. 我害怕在对发生的事情知之甚少的情况下运行它(我们在 MySQL 数据库上有大量数据,我们不能失去它!)。所以第一个问题是:这会达到我想要的效果吗?登录远程服务器(例如位于)并将所有 mysql 数据库备份到本地计算机上的web-server.com路径?/backups/mysql

  2. 我不相信这也会在 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

相关内容