我们知道mysql库里基本对象(也就是我们备份时需要关心的对象)也就如下六类:
表,包含表结构,约束(主键,唯一键,外键等),当然索引这东西实际上不需要备份,也无法备份。
视图
存储过程
存储函数
触发器
事件
以上对象在全库备份时一个都不能少,否则全库备份就失去意义。
我们在使用如下命令时,实际上备份了哪些对象:
C:\Users\Administrator>mysqldump -B cms > d:\temp\mysql.cms.2016.4.1.dump
答案是:表,视图和触发器。存储函数和存储过程以及事件没有被导出。
也就是默认情况下,mysqldump仅仅备份表,视图和触发器。
如果我们要进行全库备份,那么可以像下面这样指定:
C:\Users\Administrator>mysqldump --set-gtid-purged=off -B cms -ER > d:\temp\mysql.cms.2016.4.1.dump
-E,指定导出事件(events)。
-R,指定导出存储程序(函数和过程)。
如果要导出所有schema,并且保证数据库一致性快照,那么可以指定:
C:\Users\Administrator>mysqldump --set-gtid-purged=on -AERx > d:\temp\mysql.cms.2016.4.1.dump
相比于mysqldump,新版的mysqlpump工具在处理默认导出对象时,则全面了:
mysqlpump工具,默认导出所有的六类对象。
但是mysqlpump没有 --lock-all-tables 和 --lock-tables 参数。虽然有 --single-transaction 参数,但默认也off。
所以很明显,导出的备份不是数据一致性快照。
如果我们需要使用mysqlpump备份,并且需要数据一致性快照的话,那么我们必须在pump之前手工使用 FLUSH TABLES WITH READ LOCK 锁住数据库。