本教程介绍如何使用 mysqldump 实用程序从命令行备份和恢复 MySQL 或 MariaDB 数据库。
mysqldump 实用程序创建的备份文件基本上是一组可用于重新创建原始数据库的 SQL 语句。 mysqldump 命令还可以生成 CSV 和 XML 格式的文件。
您还可以使用 mysqldump 实用程序将 MySQL 数据库传输到另一台 MySQL 服务器。
如果不备份数据库,软件错误或硬盘故障可能会造成灾难性的后果。为了帮助您节省大量时间并减少麻烦,强烈建议您采取预防措施定期备份 MySQL 数据库。
Mysqldump 命令语法#
在介绍如何使用 mysqldump 命令之前,我们首先回顾一下基本语法。
mysqldump 实用程序表达式采用以下形式:
mysqldump [options] > file.sql
-
options
- The mysqldump 选项
-
file.sql
- 转储(备份)文件
要使用 mysqldump 命令,MySQL 服务器必须可访问且正在运行。
备份单个 MySQL 数据库#
mysqldump 工具最常见的用例是备份单个数据库。
例如,创建名为的数据库的备份database_name
使用用户root
并将其保存到名为database_name.sql
您将运行以下命令:
mysqldump -u root -p database_name > database_name.sql
系统将提示您输入 root 密码。身份验证成功后,转储过程将开始。根据数据库大小,该过程可能需要一些时间。
如果您以用于执行导出的同一用户身份登录,并且该用户不需要密码,则可以省略-u
and -p
选项:
mysqldump database_name > database_name.sql
备份多个 MySQL 数据库#
要使用一个命令备份多个 MySQL 数据库,您需要使用--database
选项后跟要备份的数据库列表。每个数据库名称必须用空格分隔。
mysqldump -u root -p --databases database_name_a database_name_b > databases_a_b.sql
上面的命令将创建一个包含两个数据库的转储文件。
备份所有 MySQL 数据库#
Use the --all-databases
备份所有 MySQL 数据库的选项:
mysqldump -u root -p --all-databases > all_databases.sql
与前面的示例相同,上面的命令将创建一个包含所有数据库的转储文件。
将所有 MySQL 数据库备份到单独的文件中#
The mysqldump
该实用程序不提供将所有数据库备份到单独文件的选项,但我们可以通过简单的操作轻松实现这一点bash FOR 循环
:
for DB in $(mysql -e 'show databases' -s --skip-column-names); do
mysqldump $DB > "$DB.sql";
done
上面的命令将为每个数据库创建一个单独的转储文件,使用数据库名称作为文件名。
创建压缩的 MySQL 数据库备份#
如果数据库大小非常大,那么压缩输出是个好主意。为此,只需将输出通过管道传输到gzip实用程序,并将其重定向到文件,如下所示:
mysqldump database_name | gzip > database_name.sql.gz
创建带有时间戳的备份#
如果您想在同一位置保留多个备份,则可以添加当前的备份date备份文件名:
mysqldump database_name > database_name-$(date +%Y%m%d).sql
上面的命令将创建一个具有以下格式的文件database_name-20180617.sql
恢复 MySQL 转储#
您可以使用以下命令恢复 MySQL 转储mysql
工具。命令一般语法如下:
mysql database_name < file.sql
大多数情况下你需要创建数据库导入到.如果数据库已经存在,首先需要将其删除。
在以下示例中,第一个命令将创建一个名为的数据库database_name
然后它将导入转储database_name.sql
进去:
mysql -u root -p -e "create database database_name";
mysql -u root -p database_name < database_name.sql
从完整 MySQL 转储恢复单个 MySQL 数据库#
如果您使用以下方式备份了所有数据库-all-databases
选项,并且您想要从包含多个数据库的备份文件恢复单个数据库,请使用--one-database
选项如下图:
mysql --one-database database_name < all_databases.sql
通过一个命令导出和导入 MySQL 数据库#
您可以使用以下一行代码,而不是从一个数据库创建转储文件,然后将备份导入到另一个 MySQL 数据库中:
mysqldump -u root -p database_name | mysql -h remote_host -u root -p remote_database_name
上面的命令会将输出通过管道传输到远程主机上的 mysql 客户端,并将其导入到名为的数据库中remote_database_name
。运行该命令之前,请确保远程服务器上已存在数据库。
使用 Cron 自动备份#
自动化备份数据库的过程就像创建一个cron job什么将在指定时间运行 mysqldump 命令。
要使用 cronjob 设置 MySQL 数据库的自动备份,请按照以下步骤操作:
-
创建一个名为.my.cnf
在您的用户主目录中:
sudo nano ~/.my.cnf
将以下文本复制并粘贴到 .my.cnf 文件中。
[client]
user = dbuser
password = dbpasswd
不要忘记更换dbuser
and dbpasswd
以及数据库用户和用户密码。
-
限制权限凭证文件,以便只有您的用户才能访问它:
chmod 600 ~/.my.cnf
-
创建目录存储备份:
mkdir ~/db_backups
-
打开您的用户 crontab 文件:
crontab -e
添加以下 cron 作业,该作业将创建数据库名称的备份mydb
每天凌晨 3 点:
0 3 * * * /usr/bin/mysqldump -u dbuser mydb > /home/username/db_backups/mydb-$(date +\%Y\%m\%d).sql
不要忘记更换username
与您的实际用户名。我们还转义了百分号(%
),因为它们在 crontab 中有特殊含义。
您还可以创建另一个 cronjob 来删除任何超过 30 天的备份:
find /path/to/backups -type f -name "*.sql" -mtime +30 -delete
当然,您需要根据您的备份位置和文件名来调整命令。要了解有关 find 命令的更多信息,请查看我们的如何使用命令行在 Linux 中查找文件
guide.
结论#
本教程仅涵盖基础知识,但对于任何想要学习如何使用 mysqldump 实用程序从命令行创建和恢复 MySQL 数据库的人来说,它应该是一个良好的起点。
如果您想了解有关从命令行使用 MySQL 的更多信息,请查看我们的如何管理MySQL用户帐户和数据库
guide.
您还可以查看有关的教程如何重置 MySQL root 密码以防你忘记了。
如果您有任何问题或反馈,请随时发表评论。