关于我们

质量为本、客户为根、勇于拼搏、务实创新

< 返回新闻公共列表

使用Mysqldump备份和恢复MySQL数据库

发布时间:2019-10-11 13:19:54

本教程介绍如何使用mysqldump实用程序从命令行备份和还原MySQL或MariaDB数据库,mysqldump实用程序创建的备份文件基本上是一组可用于重新创建原始数据库的SQL语句,如果不备份数据库,则软件错误或硬盘驱动器故障可能是灾难性的。为了帮助您节省大量时间和挫折,强烈建议您采取预防措施,定期备份MySQL数据库。

您还可以使用mysqldump实用程序将MySQL数据库传输到另一个MySQL服务器。Mysqldump命令语法,在介绍如何使用mysqldump命令之前,让我们先回顾一下基本语法。mysqldump实用程序表达式采用以下形式:

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

备份单个MySQL数据库
要使用root用户创建名为database_name的数据库的备份并将其保存到名为database_name.sql的文件,您将运行以下命令:
mysqldump -u root -p database_name > database_name.sql
系统将提示您输入root密码。输入它,按Enter键,转储过程将开始。根据数据库大小,该过程可能需要一些时间。
如果您以用于执行导出的同一用户身份登录,并且该用户不需要密码,则可以省略-u和-p选项:
mysqldump database_name > database_name.sql
备份多个MySQL数据库

要使用一个命令备份多个MySQL数据库,您需要使用--database选项,后跟要备份的数据库列表。每个数据库名称必须用空格分隔。
mysqldump -u root -p --database 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 
如果您使用cronjob自动执行数据库备份,那么您还可以使用以下命令删除超过30天的任何备份:
find /path/to/backups -type f -name "*.sql" -mtime +30 -delete
当然,您需要根据备份位置和文件名调整命令。要了解有关find命令的更多信息,请使用命令行指南检查我们如何在Linux中查找文件。

恢复MySQL转储
您可以使用mysql工具恢复MySQL转储。在大多数情况下,您需要创建要导入的数据库。如果数据库已经存在,则需要将其删除。
在以下示例中,第一个命令将创建名为database_name的数据库,然后将dump 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的数据库中。在运行该命令之前,请确保远程服务器上已存在该数据库。


/template/Home/Zkeys/PC/Static