mysqldump备份工具最初由Igor Romanenko编写完成,通常用来完成转从(dump)数据库的备份及不同数据库之间的移植,如从MySQL低版本数据库升级到MySQL高版本数据库,又或者从MySQL数据库移植到Oracle,Microsoft SQL Server数据库等。
mysqldump的语法如下:
mysqldump [arguments] > file_name
如果想要备份所有的数据库,可以使用--all-database选项:
mysqldump --all-databases > dump.sql
如果想要备份指定的数据库,可以使用--database选项:
mysqldump --databases db1 db2 db3 > dump.sql
如果想要对test这个架构进行备份,可以使用如下语句:
mysqldump --single-transaction test > backup.sql
上述操作产生了一个对test架构的备份,使用--single-transaction选项来保证备份的一致性。备份出来的 backup.sql是文本文件,通过文本编辑器可以查看内容。备份出的文件内容就是比表结构和数据,所有这些都是用SQL语句方式表示。文件开始和结束的注释部分是用来设置MySQL数据库的各项参数,一般用来使还原工作更有效和准确地执行。
mysqldump的参数选项有很多,可以通过msyqldump --help命令来查看所有的参数,有些参数有缩写形式,如--lock-tables的缩写形式-l。
比较重要的参数:
--single-transaction:在备份开始前,先执行START TRANSACTION命令,以此获得备份的一致性,该参数只对InnoDB有效。当启用该参数并进行备份时,确保没有其他任何执行的DDL语句执行,因为一致性读并不能隔离DDL操作。
--lock-tables(-l):在备份中,依次锁住每个架构下的所有表。一般用于MyISAM存储引擎,当备份时只能读数据库进行读取操作,可以保证一致性。--single-transaction与--lock-tables是互斥的,不能同时使用。如果要备份的数据库两种存储引擎都有,这时候只能选择--lock-tables,因此只能保证每个架构下表结构的一致性,而不能保证所有架构下表的一致性。
--lock-all-tables(-x):在备份过程中,对所有机构的所有表上锁。可以避免上个参数不能同事锁住所有表的问题。
--add-drop-database:默认情况下,导出的文本文件中不会有CREATE DATABASE,除非指定了这个参数后,在CREATE DATABASE前先运行DROP DATABASE。该参数要和-all-database或者--database选项一起使用。
--master-data [=value]:通过该参数产生的备份转存文件主要用来建立一个replication。当value为1时,转存文件中记录CHANGE MASTER语句。当value的值为2时,CHANGE MASTER语句被写出SQL注释。在默认情况下,value的值为空。
--master-data会自动忽略--lock-tables选项。如果没有使用--single-transation选项,则会自动使用--lock-all-tables选项。
--events(-E):备份实践调度器。
--routines(-R):备份存储过程和函数。
--triggers:备份接触器。
--hex-blob:将BINARY、VARBINARY、BLOG和BIT列类型备份为十六进制的格式。mysqldump导出的文件一般是文本文件,但是如果导出的数据中有上述这些类型,在文本文件模式下可能会有些字符不可见,若添加--hex-blob选项,结果会以十六进制的方式显示。
--tab=path(-T path):产生TAB分割的数据文件。对于每张表,mysqldump创建一个包含CREATE TABLE语句的table_name.sql文件,和包含数据的tbl_name.txt文件。可以使用--fields-terminated-by=...,--field-enclosed-by=...,--fields-optionally-enclosed-by=...,--fields-escaped-by...,--line-terminated-by=...来改变默认的分割符、换行符等。该参数和SELECT...INTO OUTFILE的方式来导出一张表,但是通过mysqldump一样可以完成工作,而且可以一次完成多张表的导出,并且实现导出数据的一致性。
--where='where_condition'(-w 'where_condition'):导出给定条件的数据。
逻辑备份的恢复
shell>mysql -uroot -p < /home/mysql/backup.sql
逻辑备份sql语句文件也可以通过SOURCE命令来执行导入
mysql>source /home/mysql/backup.sql