MySQL数据备份与恢复 - mysqldump简介
基本介绍
mysqldump
是MySQL数据库提供的数据库备份程序,用于执行数据库的逻辑备份。它通过生成一系列SQL语句来备份数据库结构和数据。这些语句执行后,可以恢复数据库原有的结构和数据。mysqldump
也能通过调用select into outfile
语句输出csv
文件和其它类似格式的纯文本文件。
mysqldump
的优点有使用便利、灵活性强等。不仅可以备份整个数据库,也可以备份数张数据表,或者只导出部分数据。但在备份大规模的数据时,相比物理备份,mysqldump
无论是备份还是恢复数据都会占用大量时间。因此,mysqldump
常用于小规模、灵活性强的数据备份和导出。
说到数据导出,mysqldump
可以通过指定参数来调用select into outfile
语句生成格式灵活的纯文本数据,但是不如直接使用SQL语句导出直接和灵活。在使用mysqldump
导出SQL文件形式的数据时,导出的数据很难被其它程序进行处理,但是单纯的备份和恢复数据都比select into outfile
要快捷和方便。
常用参数介绍
根据备份数据的范围,mysqldump
的使用大概可以分为三种:
- 备份一个或多个数据表
- 备份一个或多个数据库
- 备份所有的数据库
使用的指令有类似结构:
要备份整个完整的数据库,不要在db_name后面指定tbl_name,或者通过使用--databases
或--all-databases
参数。
部分的参数说明,完整参数可以使用mysqldump --help
或man mysqldump
查看
关于参数组的使用:
参数--opt
是默认启用的,它包含一组其它设置用来快速的进行备份工作。因此一般情况下,你不需要指定参数--opt
。相反,如果你不需要包含的这些默认设置,你可以通过指定--skip-opt
来关闭它们。然后,在后面的参数中启用其中某些需要的参数。
参数--compact
关闭了一些用来控制额外的信息和注释显示的设置。同样的,你也可以在这个参数后面指定其它的参数来开启那些被关闭的设置,或者通过参数--skip-compact
的方式。
当你选择性的开启或关闭一组设置中的一部分时,参数的顺序是很重要的,而且参数的处理是由前向后进行的。
常用的使用情况
备份到文件
默认情况下,mysqldump
会以SQL语句的形式输出数据到标准输出,你可以使用输出重定向将数据保存为一个文件:
在Windows
下,可能会发生换行符\n
被转换为\r\n
的情况,可以使用:
备份一个、多个数据库
如果要导出全部数据库,可以在调用mysqldump
的时候使用参数--all-databases
:
如果只导出部分数据库的数据,则使用参数--databases
,并且在命令中输入需要导出的数据库的名称:
参数--databases
使得后面提供的名称被视为数据库名称;没有这个参数,mysqldump
只会把第一个名称作为数据库名称,接下来的其余名称则视为数据表名称。
命令中带有--databases
或--all-databases
参数时,mysqldump
会写入相应的create database
和use
语句。这是为了确保恢复数据时,在相应数据库不存在的情况下,它会创建这个数据库。并且会在恢复各个数据库时,通过use
语句设定默认数据库,确保每个数据库的数据正确导入。
如果你希望在恢复数据时,总是删除相应原有的数据库并重新创建数据库,请使用--add-drop-database
参数。这种情况下,mysqldump
会在create database
语句前,写入drop database
语句。
如果只导出单个数据库,可以使用以下语句:
此时也可以省略--databases
参数
然而以上两种情况是有区别的,在没有--databases
参数的情况下,输出的数据中不会有create database
和use
语句。此时它会有一些其它的区别:
- 在导入数据时,你必须指定默认的数据库,这样服务器才知道你需要把数据导入哪个数据库。
- 在导入数据时,你可以指定一个与原来数据库名称不同的数据库,使你能够把数据导入到一个其他的数据库中。
- 如果要导入数据的数据库不存在,你必须手动创建这个数据库。
- 参数
--add-drop-database
将失去作用,即不生成drop database
语句。
如果只希望导出几个数据表,则在命令中跟着数据库名称给出:
导入SQL格式的备份
为了导入由mysqldump
命令导出的SQL文件,可以使用它作为mysql
客户端的输入。如果备份文件在创建时,使用了参数--databases
或--databases
,则其中包含了create database
和use
语句,所以不必指定默认的数据库:
在mysql客户端内,使用source
语句:
如果备份文件中没有包含create database
和use
语句,你需要在导入时指定要导入数据的数据库名称,必要时还需要创建相应的数据库:
|
|
导出部分数据
对于一些保存监控类数据的表,数据量一般都比较大。在开发过程中,一般只需要完整的数据表结构和部分的数据即可。此时我们就会需要导出部分数据(不再是为了备份)。
以下的参数可以很好的符合上述要求:
如果你需要在原先的数据的基础上,再额外导入一些数据的话,则需要注意添加参数--no-create-info
,否则在导入时会因为数据表已经存在,导致create table
语句出错.
如果某些数据进行了修改,现在想要把这部分数据的修改更新到其它服务器,则可以使用以下语句来导出数据:
通过使用--replace
语句可以使插入数据部分的SQL语句由insert
语句改为replace
语句,这样在主键或唯一键冲突时(即相同的记录),可以使用新的记录覆盖旧的记录。