mysqldump备份数据库时的数据一致性问题--single-transaction

0    272    2

Tags:

👉 本文共约1936个字,系统预计阅读时间或需8分钟。

在日常运维当中,经常会用到mysqldump。使用mysqldump导出数据的时候,我们最关心的问题之一就是表的一致性。 简单的说就是所有表是不是同一时间的数据和结构。 随着备份参数的不同,表的一致性和对数据库的影响也会不一样。

测试

mysqldump Ver 10.13 Distrib 5.7.22-22, for Linux (x86_64)

由于mysiam引擎的退休,这里默认谈论的都是innodb引擎的表。

情况一,在不使用任何其他参数的情况下

很简单,只是指定了连接地址,账号密码,和需要导出的数据库。在没有指定参数的情况下,默认会使用lock-tables参数。官方文档参数解释如下:

For each dumped database, lock all tables to be dumped before dumping them。Because --lock-tables locks tables for each database separately, this option does not guarantee that the tables in the dump file are logically consistent between databases. Tables in different databases may be dumped in completely different states.

一致性状态:

单个库里的所有表都保持一致性,库之间的表不一定能保证一致性。

general日志相关语句:

在备份一开始就显示的一次性给所有的表加上读锁,让库在备份期间变成只读来确保表的一致性。由于是一个库一个库的备份,多个库之间的表是不一定存在一致性的。举个夸张的例子,同时导a,b两个库,a库里面的表可能是下午三点的状态,而b库里面的表却是下午4点钟的状态。

备份表可以执行的语句:

正在备份的库当中所有表的并发DML,DDL都会被阻塞,只能执行查询语句(SELECT)。

情况二,使用lock-all-tables

官方参数解释

Lock all tables across all databases. This is achieved by acquiring a global read lock for the duration of the whole dump. This option automatically turns off --single-transaction and --lock-tables.

一致性状态:

所有库的所有表都能保持一致性。

general日志相关语句:

备份表可以执行的语句:

整个实例变成了只读,所有表的DDL和DML都会被阻塞,只能执行查询语句(SELECT)。

情况三,使用single-transaction

本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信dbaup66,谢谢!
AiDBA后续精彩内容已被站长无情隐藏,请输入验证码解锁本文!
验证码:
获取验证码: 请先关注本站微信公众号,然后回复“验证码”,获取验证码。在微信里搜索“AiDBA”或者“dbaup6”或者微信扫描右侧二维码都可以关注本站微信公众号。

标签:

Avatar photo

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复