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

##https://blog.csdn.net/allway2/article/details/121647193

##sample 1

使用于50G左右的小库

1.逻辑备份所有的库

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

2.逻辑恢复所有的库

 整个数据库导出的备份,整个库恢复导入的时候不用建库

 

指定库导入导出的,需要先建库。

在大多数情况下,您需要创建要导入到的数据库。如果数据库已存在,则首先需要将其删除。

在下面的示例中,第一个命令将创建一个名为database_name的数据库,然后将转储database_name.sql导入到其中:

grep "CREATE DATABASE" *.sql

mysql -u root -p -e "create database database_name";

mysql -u root -p database_name < database_name.sql

 

###############

本教程介绍如何使用 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 数据库的自动备份,请执行以下步骤:

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

sudo nano ~/.my.cnf
将以下文本复制并粘贴到 .my.cnf 文件中。

[client]
user = dbuser
password = dbpasswd
复制
不要忘记将dbuser和dbpasswd替换为数据库用户和用户的密码。

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

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

mkdir ~/db_backups
打开您的用户 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数据库的人来说,这应该是一个很好的开始。
————————————————
版权声明:本文为CSDN博主「allway2」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/allway2/article/details/121647193

posted @ 2022-08-12 10:27  feiyun8616  阅读(752)  评论(0编辑  收藏  举报