阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

MySQL将语句写入到binlog二进制日志中

375次阅读
没有评论

共计 3071 个字符,预计需要花费 8 分钟才能阅读完成。

由于二进制日志是公共资源,所有线程都要写二进制日志,所以一定要避免两个线程同时更新二进制日志。因此,在事件组写二进制日志时,二进制日志将获得一个互斥锁 LOCK_log, 然后在事件组写完后释放,由于服务器所有的会话都向二进制日志写事务,所以这个锁经常会阻塞某些会话线程。

1 写入 DML 语句

通常是指 DELETE/INSERT/UPDATE 语句,为保证一致性,MySQL 在写入二进制日志时同时获得事务级锁,写完后释放锁

在表上锁释放前,在语句提交前同时需要将该语句写入二进制日志,这样就保证了二进制日志始终与语句对表的改动保持一致,如果记录日志没有作为语句的一部分时,有可能其他语句会插在这条语句对数据库的修改和记录二进制两个动作中间。

2 写入 DDL 语句

通常指的是 CREATE TABLE/ALTER TABLE 语句,DDL 语句会在文件系统中创建或改变对象。为了保护表中的内部数据结构 (.frm) 得到更新,在修改表定义钱需要先获得一个内部锁 LOCK_open

3 写入查询

对于 SBR 来说,最常见的就 binlog 事件就是 QUERY 事件,它将 master 上执行的语句写入日志,除了实际执行的语句本身,该语句还包含执行语句需要的附加信息

对服务器执行语句时必须知道隐式,隐式包括

1)当前数据库

向 QUERY 事件添加一个特殊字段,记录当前数据库,处理 LOAD DATA INFILE 语句的事件也有这个字段。

2)当前时间

有 5 个函数需要利用到时间 NOW CURDATE CURTIME UNIX_TIMESTAMP SYSDATE,前 4 个返回开始执行的时间,而 SYSDATE 返回函数执行时的时间。

[root@localhost][(none)]> SELECT SYSDATE(),NOW(),SLEEP(2),SYSDATE(),NOW();
+———————+———————+———-+———————+———————+
| SYSDATE()          | NOW()              | SLEEP(2) | SYSDATE()          | NOW()              |
+———————+———————+———-+———————+———————+
| 2017-03-29 08:08:37 | 2017-03-29 08:08:37 |        0 | 2017-03-29 08:08:39 | 2017-03-29 08:08:37 |
+———————+———————+———-+———————+———————+
row in set (2.05 sec)

为了正确处理时间,事件将存储一个时间戳,表明事件何时开始执行的。然后将这个时间戳的值从事件复制到 SLAVE 执行进程,在计算时间函数的时候,将这个时间戳作为事件开始执行的时间

SYSDATE 直接从操作系统获取时间,这个对于 SBR 来说是不安全的,有可能会导致 master 和 slave 上执行的返回值不一样。最好慎用这个函数

3)上下文

有些语句也包含隐式信息,需要满足一些条件

a)语句包含对用户定义变量的引用

b)包含 RAND 函数调用

c)包含 LAST_INSERT_ID 调用

d)需要向表中插入 AUTO_INCREMENT 类型的字段

无论上述那种情况,在写入包含查询时间之前,需要向二进制日志写入一个或多个上下文事件,由于一个 QUERY 事件之前可能有多个上下文时间,所以二进制日志同时要处理多个用户定义变量和 RAND 函数。二进制日志通过下面事件来存储必要的上下文信息

User_var 记录单个用户自定义变量的变量名及其值

Rand 记录 RAND 函数的随机数种子,种子取自会话颞部状态

Intvar 如果语句要插入 AUTO_INCREMENT 类型字段,在执行插入语句钱,该事件会设置表中自动增量计算器的值,如果语句包含 LAST_INSERT_ID 函数调用,该事件记录这个函数在该语句中的返回值

[root@localhost][(none)]> set @foo=12;
Query OK, 0 rows affected (0.00 sec)

[root@localhost][(none)]> set @bar = ‘fdjkfjdjfkdjfkdf’;
Query OK, 0 rows affected (0.00 sec)
[root@localhost][(none)]> use boss
Database changed
[root@localhost][boss]> create table t1(b int auto_increment primary key,c varchar(20));
Query OK, 0 rows affected (0.43 sec)
[root@localhost][boss]> insert into t1(b,c) values(@foo,@bar),(RAND(),’random’);
Query OK, 2 rows affected (0.11 sec)
Records: 2  Duplicates: 0  Warnings: 0

[root@localhost][boss]> insert into t1(b) values(LAST_INSERT_ID());
ERROR 1062 (23000): Duplicate entry ’13’ for key ‘PRIMARY’
[root@localhost][boss]> insert into t1(b) values(LAST_INSERT_ID()+1);
Query OK, 1 row affected (0.07 sec)
[root@localhost][boss]> show master status;
+——————+———-+————–+——————+——————————————–+
| File            | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                          |
+——————+———-+————–+——————+——————————————–+
| mysql_bin.000023 |    2878 |              |                  | a0c06ec7-fef0-11e6-9f85-525400a7d662:1-193 |
+——————+———-+————–+——————+——————————————–+
row in set (0.00 sec)

[root@localhost][boss]>  show binlog events in ‘mysql_bin.000023’\G;

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-03/142321.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计3071字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19348
评论数
4
阅读量
7800457
文章搜索
热门文章
开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南 大家好,我是星哥。之前介绍了腾讯云的 Code...
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板 1Panel:小白轻松构建 Web 服务与面板加固指南 哈喽,我是星哥,经常有人问我不...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
星哥带你玩飞牛NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手!

星哥带你玩飞牛NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手!

星哥带你玩飞牛 NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手! 作为动漫爱好者,你是否还在为...
零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face 免费服务器 +Docker 快速部署 HertzBeat 监控平台 ...
星哥带你玩飞牛NAS-1:安装飞牛NAS

星哥带你玩飞牛NAS-1:安装飞牛NAS

星哥带你玩飞牛 NAS-1:安装飞牛 NAS 前言 在家庭和小型工作室场景中,NAS(Network Atta...
星哥带你玩飞牛NAS硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话?

星哥带你玩飞牛NAS硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话?

星哥带你玩飞牛 NAS 硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话? 前言 在选择 NAS 用预...
三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

  三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Andr...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
240 元左右!五盘位 NAS主机,7 代U硬解4K稳如狗,拓展性碾压同价位

240 元左右!五盘位 NAS主机,7 代U硬解4K稳如狗,拓展性碾压同价位

  240 元左右!五盘位 NAS 主机,7 代 U 硬解 4K 稳如狗,拓展性碾压同价位 在 NA...
手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板 前言 大家好,我是星哥。星哥发现很多新手刚接触服务器时,都会被“选购...
Prometheus:监控系统的部署与指标收集

Prometheus:监控系统的部署与指标收集

Prometheus:监控系统的部署与指标收集 在云原生体系中,Prometheus 已成为最主流的监控与报警...
4盘位、4K输出、J3455、遥控,NAS硬件入门性价比之王

4盘位、4K输出、J3455、遥控,NAS硬件入门性价比之王

  4 盘位、4K 输出、J3455、遥控,NAS 硬件入门性价比之王 开篇 在 NAS 市场中,威...
零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face 免费服务器 +Docker 快速部署 HertzBeat 监控平台 ...