前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >监控因为带宽打满造成的 MySQL 复制延迟

监控因为带宽打满造成的 MySQL 复制延迟

作者头像
用户1148526
发布2024-04-29 08:13:13
990
发布2024-04-29 08:13:13
举报
文章被收录于专栏:Hadoop数据仓库Hadoop数据仓库

目录

1. 写表版本

2. 写文件版本


1. 写表版本

监控脚本文件 get_Gtid_totable.sh 内容如下:

代码语言:javascript
复制
#!/bin/bash

source ~/.bash_profile

# 获取主库 binlog 位点
a=`mysql -uroot -p123456 -h172.30.4.6 -P3306 -e "show master status\G" 2>/dev/null | egrep 'f8e0355d-9d6e-11ee-8dcd-e43d1a47c7b7' | sed 's/,//' | awk -F: '{print $2}' | awk -F"-" '{print $2}'`

# 获取从库接收和执行 binlog 位点
b=`mysql -uroot -p123456 -S /data3/3306/mysqldata/mysql.sock -e "show slave status\G" 2>/dev/null | egrep 'f8e0355d-9d6e-11ee-8dcd-e43d1a47c7b7' | egrep -v "Master_UUID" | sed -e '1s/f8e0355d-9d6e-11ee-8dcd-e43d1a47c7b7:1-//g' | sed -e '2s/f8e0355d-9d6e-11ee-8dcd-e43d1a47c7b7:1-//g'`

# 获取从库延迟秒数
c=`mysql -uroot -p123456 -S /data3/3306/mysqldata/mysql.sock -e "show slave status\G" 2>/dev/null | egrep 'Seconds_Behind_Master' | sed 's/Seconds_Behind_Master: //g'`
Seconds_Behind_Master=`echo $c`

master_Executed_Gtid=`echo $a`
slave_Retrieved_Gtid=`echo $b | awk '{print $1}' | sed 's/.$//'`
slave_Executed_Gtid=`echo $b | awk '{print $2}' | sed 's/.$//'`

# 入库
mysql -h172.18.16.156 -P3306 -uroot -p123456 -e "
insert into test.t_lag_172_18_27_238 (master_Executed_Gtid, slave_Retrieved_Gtid, slave_Executed_Gtid,Seconds_Behind_Master)
values ("$master_Executed_Gtid","$slave_Retrieved_Gtid","$slave_Executed_Gtid","$Seconds_Behind_Master");"

只监控业务高峰期,用 cron 调度执行:

代码语言:javascript
复制
* 19-23 * * * /home/mysql/get_Gtid_totable.sh

建表语句:

代码语言:javascript
复制
-- mysql 8
use test;
CREATE TABLE `t_lag_172_18_27_238` (
  `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `master_Executed_Gtid` bigint(20) DEFAULT NULL,
  `slave_Retrieved_Gtid` bigint(20) DEFAULT NULL,
  `slave_Executed_Gtid` bigint(20) DEFAULT NULL,
  `rlag` int(11) DEFAULT (greatest((`master_Executed_Gtid` - `slave_Retrieved_Gtid`),0)),
  `elag` int(11) DEFAULT (greatest((`slave_Retrieved_Gtid` - `slave_Executed_Gtid`),0)),
  `Seconds_Behind_Master` int(11) DEFAULT NULL
);

查询语句:

代码语言:javascript
复制
mysql -h172.18.16.156 -P3306 -uroot -p123456 -Dtest -e "select ts \"时间\",rlag \"接收binlog落后事务数\",elag \"执行binlog落后事务数\",Seconds_Behind_Master \"延迟秒数\"from t_lag_172_18_27_238 where date(ts)='2024-04-25' order by Seconds_Behind_Master desc limit 10;" 2>/dev/null

结果如下:

代码语言:javascript
复制
+---------------------+-----------------------------+-----------------------------+--------------+
| 时间                | 接收binlog落后事务数        | 执行binlog落后事务数        | 延迟秒数     |
+---------------------+-----------------------------+-----------------------------+--------------+
| 2024-04-25 22:43:01 |                      144230 |                         112 |          119 |
| 2024-04-25 22:46:02 |                      137649 |                         981 |          118 |
| 2024-04-25 22:25:02 |                      146937 |                         186 |          115 |
| 2024-04-25 22:44:01 |                      135479 |                         898 |          114 |
| 2024-04-25 22:24:01 |                      140064 |                         258 |          112 |
| 2024-04-25 22:49:01 |                      146843 |                         228 |          111 |
| 2024-04-25 22:53:02 |                      146033 |                        2032 |          110 |
| 2024-04-25 22:26:02 |                      140634 |                           9 |          110 |
| 2024-04-25 22:23:01 |                      137269 |                         747 |          109 |
| 2024-04-25 22:40:02 |                      127012 |                         350 |          108 |
+---------------------+-----------------------------+-----------------------------+--------------+

接收binlog落后事务数很大,执行binlog落后事务数很小,说明引起复制延迟的瓶颈是带宽不足造成主库 binlog 无法及时传输到从库。复制延迟不是做的慢,而是收不到。

2. 写文件版本

监控脚本文件 get_Gtid_totable.sh 内容如下:

代码语言:javascript
复制
#!/bin/bash

source ~/.bash_profile

time1=$(date "+%Y-%m-%d %H:%M:%S").$((`date "+%N"`/1000000))

a=`mysql -uroot -p123456 -h172.30.4.6 -P3306 -e "show master status\G" 2>/dev/null | egrep 'f8e0355d-9d6e-11ee-8dcd-e43d1a47c7b7' | sed 's/,//' | awk -F: '{print $2}' | awk -F"-" '{print $2}'`

time2=$(date "+%Y-%m-%d %H:%M:%S").$((`date "+%N"`/1000000))

b=`mysql -uroot -p123456 -S /data3/3306/mysqldata/mysql.sock -e "show slave status\G" 2>/dev/null | egrep 'f8e0355d-9d6e-11ee-8dcd-e43d1a47c7b7' | egrep -v "Master_UUID" | sed -e '1s/f8e0355d-9d6e-11ee-8dcd-e43d1a47c7b7:1-/ Retrieved_Gtid: /g' | sed -e '2s/f8e0355d-9d6e-11ee-8dcd-e43d1a47c7b7:1-/  Executed_Gtid: /g'`

echo -e " 主库Gtid:"
echo $time1
echo -e "  Executed_Gtid: ""$a"
echo;
echo -e " 从库Gtid:"
echo $time2
echo "$b" | sed 's/.$//'
本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-04-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 写表版本
  • 2. 写文件版本
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档


http://www.vxiaotou.com