本教程介绍如何使用 mysqldump 实用程序从命令行备份和还原 MySQL 或 MariaDB 数据库。

mysqldump 实用程序创建的备份文件基本上是一组可用于重新创建原始数据库的 SQL 语句。mysqldump 命令还可以生成 CSV 和 XML 格式的文件。

您还可以使用mysql转储实用程序将MySQL数据库传输到另一个MySQL服务器。

如果不备份数据库,软件错误或硬盘驱动器故障可能是灾难性的。为了帮助您节省大量时间和挫折感,强烈建议您采取预防措施,定期备份MySQL数据库。

Mysqldump 命令语法

在介绍如何使用 mysqldump 命令之前,让我们先回顾一下基本语法。

mysqldump 实用程序表达式采用以下形式:

mysqldump [options] > file.sql
  • options- mysql转储选项
  • file.sql- 转储(备份)文件

要使用 mysqldump 命令,MySQL 服务器必须可访问且正在运行。

备份单个 MySQL 数据库

mysqldump工具最常见的用例是备份单个数据库。

例如,要创建使用root用户连接为名为database_name的数据库的备份并将其保存到名为database_name.sql的文件中,请运行以下命令:

mysqldump -u root -p database_name > database_name.sql

系统将提示您输入 root 密码。身份验证成功后,将启动转储过程。根据数据库大小,该过程可能需要一些时间。

 如果您不需要密码提示,则可以在-p后写上密码(-p和密码之间不能有空格)

mysqldump -u root -ppassword database_name > database_name.sql

  如果需要为远程数据库进行导出,则可以在-h后写上数据库服务器名称或IP地址

mysqldump -h servername -u root -ppassword database_name > database_name.sql
mysqldump -h 192.168.0.1 -u root -ppassword database_name > database_name.sql

如果您以用于执行导出的同一用户身份登录,并且该用户不需要密码,则可以省略 -u和-p 选项:

mysqldump database_name > database_name.sql

 备份将BINARY, VARBINARY, BLOB, BIT类型导出为十六进制。

使用该选项备份BINARY, VARBINARY, BLOB, BIT类型导出为十六进制:--hex-blob

mysqldump --hex-blob -u root -p --all-databases > all_databases.sql

备份多个 MySQL 数据库

要使用一个命令备份多个MySQL数据库,您需要使用--database选项,后跟要备份的数据库列表。每个数据库名称必须用空格分隔。

mysqldump -u root -p --databases database_name_a database_name_b > databases_a_b.sql

上面的命令将创建一个包含两个数据库的转储文件。

备份所有 MySQL 数据库

使用该选项备份所有 MySQL 数据库:--all-databases

mysqldump -u root -p --all-databases > all_databases.sql

与前面的示例相同,上面的命令将创建一个包含所有数据库的转储文件。

将所有 MySQL 数据库备份到单独的文件

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

创建带有时间戳的备份

如果要在同一位置保留多个备份,则可以将当前日期添加到备份文件名中:

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作业一样简单,该作业将在指定时间运行mysqldump命令。

要使用 cronjob 设置 MySQL 数据库的自动备份,请执行以下步骤:

  1. 在用户主目录中创建一个名为.myf的文件:

    sudo nano ~/.myf

    将以下文本复制并粘贴到 .myf 文件中。

    [client]
    user = dbuser
    password = dbpasswd
    复制

    不要忘记将dbuserdbpasswd替换为数据库用户和用户的密码。

  2. 限制凭据文件的权限,以便只有您的用户有权访问它:

    chmod 600 ~/.myf
  3. 创建一个目录来存储备份:

    mkdir ~/db_backups
  4. 打开您的用户 crontab 文件:

    crontab -e

    添加以下 cron 作业,该作业将在每天凌晨 3 点创建mydb数据库的备份:

    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 中查找文件指南。

结论

本教程仅涵盖基础知识,但对于想要学习如何使用mysqldump实用程序从命令行创建和还原MySQL数据库的人来说,这应该是一个很好的开始。

更多推荐

如何使用Mysqldump备份和还原MySQL数据库