频道栏目
首页 > 资讯 > MySQL > 正文

使用mysqldump工具备份mysql数据库的参数研究

17-09-20        来源:[db:作者]  
收藏   我要投稿

在使用mysqldump(或者mysqlpump)备份mysql数据库时,有如下三个参数值得研究:

--lock-all-tables

保证整个数据库(所有schema)的数据具有一致性快照。

在mysqldump导出的整个过程中以read方式锁住所有表(锁住方式类似 flush tables with read lock 的全局锁)。

比如当前数据库有如下schema:

information_schema(不会导出)

mysql

performance_schema(不会导出)

sys(不会导出)

test

test1

test2

那么我们在使用mysqldump导出时:

C:\Users\Administrator>mysqldump --lock-all-tables --set-gtid-purged=on -AER > d:\temp\mysql.2016-4-1.dump

指定--lock-all-tables参数,那么从一开始就对整个mysql实例加global read lock锁。

这整个全局读锁会一直持续到导出结束。

所以在这个过程中,数据库实际严格处于read only状态。

所以导出的数据库在数据一致性上是被严格保证的,也就是数据是一致性的。

由于这个参数会将数据库置于read only状态(也相当于不可使用状态),所以默认不加该参数。

这相当于脱机备份的感觉,所以生产数据库的备份策略上,也很少使用该参数。

使用该参数的话,也会自动将 --single-transaction 及 --lock-tables 参数置于 off 状态。

该参数默认off。

--single-transaction

保证各个表具有数据一致性快照。

指定 --single-transaction 参数,那么导出过程中只能保证每个表的数据一致性(利用多版本特性实现,目前只能针对InnoDB事务表)。

比如有一个大表,mysqldump对该表的导出需要1分钟,那么在这1分钟的过程中,该表时可以被正常访问的。

(正常访问包括增删改查,但是alter table等对表结构发生更改的语句要被挂起。)

mysqldump能够保证从开始对该表进行导出,一直到对该表的导出结束,该表的数据都是开始的一致性数据快照状态。

所以该参数明显不能保证各个表之间的数据一致性(特别是外键约束的父表和子表之间)。

但是该参数能够让数据库处于可使用(就是应用感觉数据库可用)状态,相当于联机备份,所以被经常使用。

该参数默认off。

--lock-tables

保证各个schema具有数据一致性快照。

指定 --lock-tables 参数,那么在导出过程中能够保证各个schema的数据一致性。

比如导出 cms 库(该库有155张表)时:

C:\Users\Administrator>mysqldump --lock-tables --set-gtid-purged=off -ER -B cms> d:\temp\mysql.cms.2016-4-1.dump

从命令开始,就对 cms 库的155张表加类似 lock table xxx read 的读锁。

这会导致在导出整个cms库的过程中,cms库实际上整体处于read only状态。

但是如果我们指定如下命令:

C:\Users\Administrator>mysqldump --lock-tables --set-gtid-purged=on -AER > d:\temp\mysql.2016-4-1.dump

来导出全部mysql库,那么当导出cms库的过程中,其他 schema 实际上是可以被正常访问的。

这个正常访问就是可以接受所有合法的sql语句。

所以该参数只能保证各个schema自己的数据一致性快照。

该参数默认on。

相关TAG标签
上一篇:你可能还不知道的Linux 系统七件事
下一篇:单元测试出现未实现序列化错误的原因
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站