万答10:mysqldump 是如何实现一致性备份的

实验场景

MySQL 8.0.25

InnoDB

实验步骤:

先开启 general_log 观察导出执行过程的变化

set global general_log=ON;

mysqldump 关键参数说明:

--single-transaction 参数说明:

将隔离级别设为 REPEATABLE READ , 并开启一个只读事务,该事务中会进行一致性快照读,这个选项对InnoDB的数据表有效,但是不能保证MyISAM表和MEMORY表的数据一致性,dump 操作期间会先关闭所有打开的表,并产生FTWRL锁 ,然后快速释放FTWRL锁。

general_log 日志显示如下:

FLUSH /*!40101 LOCAL */ TABLES
FLUSH TABLES WITH READ LOCK
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ
START TRANSACTION /*!40100 WITH CONSISTENT SNAPSHOT */

如果这时候当前的数据库已经有表锁,那么dump操作会被堵塞,直到先前的表锁被释放后继续执行;或者超过锁定时间 lock_wait_timeout 后退出。

下面是先模拟执行了 LOCK TABLES t_user READ; 操作后,dump操作被堵塞的情况。

(Sun Nov 21 06:42:07 2021)[root@GreatSQL][(none)]>show processlist;
+----+-----------------+-----------+------+---------+-------+-------------------------+--------------------------------+----------+-----------+---------------+
| Id | User | Host | db | Command | Time | State | Info | Time_ms | Rows_sent | Rows_examined |
+----+-----------------+-----------+------+---------+-------+-------------------------+--------------------------------+----------+-----------+---------------+
| 5 | event_scheduler | localhost | NULL | Daemon | 77523 | Waiting on empty queue | NULL | 77523235 | 0 | 0 |
| 11 | root | localhost | test | Sleep | 266 | | NULL | 266664 | 0 | 0 |
| 14 | root | localhost | NULL | Query | 263 | Waiting for table flush | FLUSH /*!40101 LOCAL */ TABLES | 263751 | 0 | 0 |
| 17 | root | localhost | NULL | Query | 0 | init | show processlist | 0 | 0 | 0 |
+----+-----------------+-----------+------+---------+-------+-------------------------+--------------------------------+----------+-----------+---------------+
4 rows in set (0.00 sec)

--master_data=1|2 参数说明:

执行 show master status\G; 获取binlog文件和position值,区别在于参数设置为2,导出的内容被注释了。

general_log日志显示如下:

正常备份流程图解

  • 正常备份流程图解

没有加 --single-transaction 和 --master_data 参数执行流程

  • 加了--single-transaction 和 --master_data 参数执行流程

推荐延伸阅读:

Enjoy GreatSQL

文章推荐:

技术分享 | MGR最佳实践(MGR Best Practice)

https://mp.weixin.qq.com/s/66u5K7a9u8GcE2KPn4kCaA

技术分享 | 万里数据库MGR Bug修复之路

https://mp.weixin.qq.com/s/IavpeP93haOKVBt7eO8luQ

Macos系统编译percona及部分函数在Macos系统上运算差异

https://mp.weixin.qq.com/s/jAbwicbRc1nQ0f2cIa_2nQ

技术分享 | 利用systemd管理MySQL单机多实例

https://mp.weixin.qq.com/s/iJjXwd0z1a6isUJtuAAHtQ

产品 | GreatSQL,打造更好的MGR生态

https://mp.weixin.qq.com/s/ByAjPOwHIwEPFtwC5jA28Q

产品 | GreatSQL MGR优化参考

https://mp.weixin.qq.com/s/5mL_ERRIjpdOuONian8_Ow

关于 GreatSQL

GreatSQL是由万里数据库维护的MySQL分支,专注于提升MGR可靠性及性能,支持InnoDB并行查询特性,是适用于金融级应用的MySQL分支版本。

Gitee:

https://gitee.com/GreatSQL/GreatSQL

GitHub:

https://github.com/GreatSQL/GreatSQL

微信&QQ群:

可扫码添加GreatSQL社区助手微信好友,发送验证信息“加群”加入GreatSQL/MGR交流微信群,亦可直接扫码加入GreatSQL/MGR交流QQ群。

本文由博客一文多发平台 OpenWrite 发布!

#万答10:mysqldump 是如何实现一致性备份的的更多相关文章

  1. 万答#5,binlog解析出来的日志为何无法恢复

    欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 问题描述 问题来自一位群友,简单说就是用 mysqlbinlog 工具读取 bi ...

  2. 万答17,AWS RDS怎么搭建本地同步库

    欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 背景说明 AWS RDS 权限受限,使用 mysqldump 的时候无法添加 - ...

  3. 万答#21,如何查看 MySQL 数据库一段时间内的连接情况

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 查看方式 已知至少有两种方式可以实现 1.开启 general_log 就可以观察到 开启命令 mysql> set ...

  4. 万答#18,MySQL8.0 如何快速回收膨胀的UNDO表空间

    欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 背 ...

  5. 万答#11,MySQL中char与varchar有什么区别

    万答#11,MySQL中char与varchar有什么区别 1.实验场景 GreatSQL 8.0.25 InnoDB 2.实验测试 2.1 区别 参数 char varchar 长度是否可变 定长 ...

  6. MySQL 备份脚本--mysqldump在slave 上进行备份

    MySQL 备份脚本--mysqldump在slave 上进行备份 使用mysqldump在slave上进行备份,建议使用stop slave sql_thread,start slave sql_t ...

  7. RMAN冷备份、一致性备份脚本

    RMAN冷备份.一致性备份脚本 run{ shutdown immediate; startup mount; allocate channel c1 type disk; allocate chan ...

  8. 使用mysqldump命令进行mysql数据库备份

    1.用法 mysqldump -uroot -p --databases test > /home/test.sql mysqldump -uroot -h127.0.0.1 -p --data ...

  9. mysqldump 利用rr隔离实现一致性备份

    mysqldump -p -S /data/mysqldata1/sock/mysql.sock --single-transaction --master-data=2 --database db1 ...

随机推荐

  1. 安装Tomcat到Linux(源码)

    运行环境 系统版本:CentOS Linux release 7.3.1611 软件版本:Tomcat-9.0.11 硬件要求:无 安装过程 1.安装YUM-EPEL存储库 YUM-EPEL存储库由E ...

  2. SpringCloud 简介

    目录 什么是微服务? 初识 SpringCloud SpringCloud VS Dubbo 什么是微服务? <互联网系统架构演变> "微服务"一词源于 Martin ...

  3. jupyter notebook修改默认浏览器

    1. anaconda集成了python以及各种库.python和anaconda可二选一. 2. anaconda或python安装后记得把pip源改为国内的镜像源地址.比如163,阿里,清华以及南 ...

  4. bare Git 仓库是什么?

    背景 今天,坐我旁边的同事问我一些关于服务器上命令的问题.其中有一个用了特殊参数的 git init 的命令,我也不认识,遂去 Google... bare Git 仓库 定义 A bare Git ...

  5. Linux系列之linux访问windows文件

    Linux永久挂载windows共享文件 Linux系统必须安装samba-client Linux服务器必须能访问到Windows的共享文件服务的(445端口) 1.Windows共享文件 2.测试 ...

  6. Ubuntu Linux处理Waiting for cache lock: Could not get lock /var/lib/dpkg/lock-frontend. It is held by process 3365 (unattended-upgr)问题

    问题 在Ubuntu中,执行apt install后,出现以下问题: Waiting for cache lock: Could not get lock /var/lib/dpkg/lock-fro ...

  7. flink-执行模式

    flink的执行模式 flink既能处理离线数据,也能处理实时数据,在1.12.0版本以前,批数据返回的数据集合是dataSet,对应一套dataSet的api,从1.12.0版本以后,flink实现 ...

  8. Snowflake(雪花算法),什么情况下会冲突?

    文章首发在公众号(龙台的技术笔记),之后同步到博客园和个人网站:xiaomage.info 分布式系统中,有一些需要使用全局唯一 ID 的场景,这种时候为了防止 ID 冲突可以使用 36 位的 UUI ...

  9. Windows家庭版-添加Hyper-V

    新建一个hyper-v.cmd文件,内容为 pushd "%~dp0" dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum & ...

  10. HTML,CSS,JS,DOM,jQuery

    HTML 超链接访问顺序 a:link-->a:visited-->a:hover-->a:active.(有顺序) link:表示从未访问过的链接的样式 visited:表示已经访 ...