mysql自带的备份神器--mysqldump

前言

在很多时候,我们会需要对mysql进行备份转移等操作。备份的方法有很多种,其中有一种是mysql自带的,那就是mysqldump。

Mysqldump命令

mysqldump工具是mysql自带的一个客户端应用程序,在mysql安装目录的/bin目录下。mysqldump用于逻辑备份,它能生成一组SQL语句,执行这些语句可以重新生成原始的数据库对象定义和表数据。mysqldump常用于转储一个或多个MySQL数据库以进行备份或转移到另一台SQL服务器。mysqldump命令还可以生成CSV、其他分隔文本或XML格式的输出。

mysqldump至少需要dump表的SELECT权限,dump视图的SHOW VIEW权限,dump触发器的触发器权限,如果不使用——single-transaction选项,则锁定表,如果不使用——no-tablespaces选项,则(从MySQL 5.7.31开始)进程权限。某些选项可能需要选项描述中提到的其他特权。

mysqldump的优点包括在恢复之前查看甚至编辑输出的便利性和灵活性。您可以克隆数据库以进行开发和DBA工作,或者对现有数据库产生轻微的变化以进行测试。但它并不是一种用于备份大量数据的快速或可伸缩解决方案。对于大数据,即使备份步骤花费合理的时间,恢复数据也会非常慢,因为重放SQL语句涉及到用于插入、创建索引等的磁盘I/O。

对于大规模的备份和恢复,物理备份更合适,物理备份可以将数据文件复制成可以快速恢复的原始格式。

调用语法

通常有三种使用mysqldump的方式——转储一组或多个表,转储一组或多个完整的数据库,或转储一个完整的MySQL服务器——如下所示:

shell> mysqldump [options] db_name [tbl_name ...]
shell> mysqldump [options] --databases db_name ...
shell> mysqldump [options] --all-databases

要查看您的mysqldump版本支持的选项列表 ,请使用命令 mysqldump --help查看

上面options选项一般为数据库的用户和密码,一般有两种方式

方式一:不需在命令中手动写入密码,使用-u 用户名 -p ,这种方式会执行命令后让我们输入密码

语法:

mysqldump -u 用户名 -p 数据库名 > (目录)导出文件名

实例:

[root@localhost mysql-5.7.24]# mysqldump -uroot -p  --all-databases > dump.sql

方式二:直接在命令中输入密码,-u后跟用户名,-p接空格然后输入密码

语法:

mysqldump -u用户 -p 密码 数据库名 > (目录)导出文件名

实例

[root@localhost bin]# mysqldump -uroot -proot --all-databases > dbdump.sql

注:-p后面不能有空格,需要直接写密码,执行命令后会有以下提示,意思是在命令行界面上使用密码是不安全的。

mysqldump: [Warning] Using a password on the command line interface can be insecure.

使用mysqldump进行备份

下面介绍如何使用mysqldump生成转储文件,以及如何重新加载转储文件。转储文件可以通过多种方式使用:

1、作为备份,以便在数据丢失的情况下恢复数据。

2、作为设置副本的数据源。

3、作为实验数据的来源:

 - 制作可在不更改原始数据的情况下使用的数据库副本。
 - 测试潜在的升级不兼容性。

使用mysqldump转储SQL格式的数据

下面介绍如何使用mysqldump 创建SQL格式的转储文件。

默认情况下,mysqldump将信息作为SQL语句写入标准输出。你可以将输出保存到一个文件中:

shell> mysqldump [arguments] > file_name

要转储所有数据库,请使用以下选项调用mysqldump–all-databases:

shell> mysqldump --all-databases > dump.sql

只转储特定的数据库,在命令行中命名它们,并使用——databases选项:

shell> mysqldump --databases db1 db2 db3 > dump.sql

–databases 选项导致命令行上的所有名称都被视为数据库名称。如果没有这个选项,mysqldump将第一个名称作为数据库名,将后面的名称作为表名。

使用–all-databases或时 --databases, mysqldump 在每个数据库的转储输出之前写入CREATE DATABASE和USE声明。这样可以确保在重新加载转储文件时,如果不存在转储文件,它将创建每个数据库并将其设置为默认数据库,以便将数据库内容加载到它们所来自的同一数据库中。如果要使转储文件在创建每个数据库之前强制删除每个数据库,请也使用该 --add-drop-database选项。

要转储单个数据库,请在命令行上将其命名:

shell> mysqldump --databases test > dump.sql

在单数据库情况下,可以忽略以下 --databases选项:

shell> mysqldump test > dump.sql

前面两个命令之间的区别是,如果没有——databases,转储输出不包含CREATE DATABASE或USE语句。这有几个含义:

1、重新加载转储文件时,必须指定默认数据库名称,以便服务器知道要重新加载哪个数据库。

2、对于重新加载,您可以指定与原始名称不同的数据库名称,这使您能够将数据重新加载到不同的数据库中。

3、如果要重新加载的数据库不存在,则必须先创建它。

4、因为输出不包含CREATE DATABASE语句,所以——add-drop-database选项不起作用。如果您使用它,它不会产生DROP DATABASE语句。

要仅转储数据库中的特定表,请在数据库名称后的命令行中将其命名:

shell> mysqldump test t1 t3 t7 > dump.sql

分别转储表定义和内容

–no-data选项告诉 mysqldump不要转储表数据,从而导致转储文件仅包含创建表的语句。相反,该–no-create-info选项告诉mysqldump不输出 CREATE的语句,以便转储文件仅包含表数据。

例如,要分别转储test数据库的表定义和数据,请使用以下命令:

shell> mysqldump --no-data test > dump-defs.sql
shell> mysqldump --no-create-info test > dump-data.sql

对于仅定义的转储,添加 --routines 和 --events 选项还可以包含存储程和事件定义:

shell> mysqldump --no-data --routines --events test > dump-defs.sql

重新加载SQL格式的备份

要重新加载由mysqldump编写的包含SQL语句的转储文件,使用它作为mysql客户端的输入。如果转储文件是由mysqldump用——all-databases或——databases选项创建的,则它包含CREATE DATABASE 和USE语句,并且无需指定默认数据库以将数据加载到其中:

例:

shell> mysql < dump.sql

或者在mysql中使用source命令:

mysql> source dump.sql

如果文件是不包含CREATE DATABASE和 USE语句的单数据库转储 ,请首先创建数据库:

shell> mysqladmin create db1

然后在加载转储文件时指定数据库名称:

shell> mysql db1 < dump.sql

将数据库从一台服务器复制到另一台服务器

在服务器1上:

shell> mysqldump --databases db1 > dump.sql

将转储文件从服务器1复制到服务器2。

在服务器2上:

shell> mysql < dump.sql

猜你喜欢

转载自blog.csdn.net/qq_36551991/article/details/111409411
今日推荐