关于GTID的同步监控()-其他
关于GTID的同步监控()
select concat(
'select "',
TABLE_name,
'", count(*) from ',
TABLE_SCHEMA,
'.',
TABLE_name,
' union all'
) from information_schema.tables
where TABLE_SCHEMA='生产库名字';
查出来的结果去掉最后的“union all”,然后分别在主库和从库运行,就能得出所有表数据量,再用diff去比较两者差异。
1 #!/bin/bash
2
3 #######################################################
4 # $Version: v1.0
5 # $Description:判断GTID复制中从库有没有与主库同步 show slave stautus\G中:
6 # 当 Retrieved_Gtid_Set = Executed_Gtid_Set 表示从库已经和主库完成同步
7 #
8 # Retrieved_Gtid_Set:从库已经接收到主库的事务编号
9 # Executed_Gtid_Set: 已经执行的事务编号
10
11
12 #######################################################
13
14 mysql -u 从库账号 -p'从库账号密码' -e "show slave status\G;" > slave_status
15
16 # 1、找到Auto_Position的行号
17 AutoPosNum=`grep -n "Auto_Position" slave_status |awk '{print $1}' |tr -d ":"`
18
19 # 2、Auto_Position的上一行即是 Executed_Gtid_Set 那行
20 Exec_numLine=$(($AutoPosNum-1))
21
22 # 3、比对值是否相等:Retrieved_Gtid_Set ,Executed_Gtid_Set
23 Exec_num=`sed -n "$Exec_numLine"p slave_status |awk -F":" '{print $2}'|awk -F "-" '{ print $2}'`
24
25 Ret_num=`grep 'Retrieved_Gtid_Set' slave_status | awk -F":" '{print $3}'|awk -F "-" '{print $2}'`
26
27 #判断这俩个数值是否相同,相等输出yes,否则报警
28 if [ $Exec_num -eq $Ret_num ]
29 then
30 echo "yes"
31 else
32 ## 10秒后再运行一次上面那堆命令,比较$Exec_num 和$Ret_num,因为可能会有某些瞬间是不相等的
33 sleep 10
34 。。。
35 如果还是不等就报警
36 fi
37
进去从库运行:
show slave status\G;
找到两个线程,比较是否都是 Yes
IO_env=`echo $STATUS | grep IO | awk '{print $2}'`
SQL_env=`echo $STATUS | grep SQL | awk '{print $2}'`
3、监控主从binlog同步情况
1 #!/bin/bash
2
3 ######################################
4 # 监控当前主从同步的情况
5 ######################################
6
7 ### 1、从库:
8 SLAVE_BINLOG1=`mysql -u '从库账号' -p'从库账号密码' -h '从库连接ip' -e "show slave status\G;" | awk '$1=="Master_Log_File:" {print $2}'`
9
10 SLAVE_BINLOG2=`mysql -u '从库账号' -p'从库账号密码' -e "show slave status\G;" | awk '$1=="Relay_Master_Log_File:" {print $2}'
11
12
13 ### 2、主库:
14 ## 获得Master端,当前的binlog文件以及binlog路径
15 MASTER_BINLOG=`mysql -u '主库账号' -p'主库账号密码' -h '主库连接ip' -e "show master status;"
16 | grep -v '^+' | tail -1 | awk '{print $1}'`
17
18 ### 3、同步情况
19 ##### 3.1 主从端已经同步到相同的binlog
20 if [[ "${SLAVE_BINLOG1}" = "${SLAVE_BINLOG2}" && "${SLAVE_BINLOG1}" = "${MASTER_BINLOG}" ]];then
21 CURR_BINLOG="${MASTER_BINLOG}"
22 echo "主从端已经同步到相同的binlog。。。"
23
24 ##### 3.2 主从端已经同步,但从端的binlog还没有追赶到主端最新的binlog
25 elif [[ "${SLAVE_BINLOG1}" != "${SLAVE_BINLOG2}" && "${SLAVE_BINLOG1}" = "${MASTER_BINLOG}" ]]; then
26 CURR_BINLOG="${SLAVE_BINLOG2}"
27 echo "主从端已经同步,但从端的binlog还没有追赶到主端最新的 binlog。。。"
28
29 ##### 3.3 主从端已经同步,主从端的binlog一致,但relaylog还不一致
30 elif [[ "${SLAVE_BINLOG1}" != "${SLAVE_BINLOG2}" && "${SLAVE_BINLOG1}" = "${MASTER_BINLOG}" ]]; then
31 CURR_BINLOG="${SLAVE_BINLOG2}"
32 echo "主从端已经同步,主从端的binlog一致,但 relaylog 还不一致"
33 else
34 echo "未知错误 Has noknown error at:`date +%F" "%H-%M-%S`,需要人工检查"
35 发钉钉告警。。。
36 exit 1
37 fi
————————
select concat(
'select "',
TABLE_name,
'", count(*) from ',
TABLE_SCHEMA,
'.',
TABLE_name,
' union all'
) from information_schema.tables
where TABLE_SCHEMA='生产库名字';
查出来的结果去掉最后的“union all”,然后分别在主库和从库运行,就能得出所有表数据量,再用diff去比较两者差异。
1 #!/bin/bash
2
3 #######################################################
4 # $Version: v1.0
5 # $Description:判断GTID复制中从库有没有与主库同步 show slave stautus\G中:
6 # 当 Retrieved_Gtid_Set = Executed_Gtid_Set 表示从库已经和主库完成同步
7 #
8 # Retrieved_Gtid_Set:从库已经接收到主库的事务编号
9 # Executed_Gtid_Set: 已经执行的事务编号
10
11
12 #######################################################
13
14 mysql -u 从库账号 -p'从库账号密码' -e "show slave status\G;" > slave_status
15
16 # 1、找到Auto_Position的行号
17 AutoPosNum=`grep -n "Auto_Position" slave_status |awk '{print $1}' |tr -d ":"`
18
19 # 2、Auto_Position的上一行即是 Executed_Gtid_Set 那行
20 Exec_numLine=$(($AutoPosNum-1))
21
22 # 3、比对值是否相等:Retrieved_Gtid_Set ,Executed_Gtid_Set
23 Exec_num=`sed -n "$Exec_numLine"p slave_status |awk -F":" '{print $2}'|awk -F "-" '{ print $2}'`
24
25 Ret_num=`grep 'Retrieved_Gtid_Set' slave_status | awk -F":" '{print $3}'|awk -F "-" '{print $2}'`
26
27 #判断这俩个数值是否相同,相等输出yes,否则报警
28 if [ $Exec_num -eq $Ret_num ]
29 then
30 echo "yes"
31 else
32 ## 10秒后再运行一次上面那堆命令,比较$Exec_num 和$Ret_num,因为可能会有某些瞬间是不相等的
33 sleep 10
34 。。。
35 如果还是不等就报警
36 fi
37
进去从库运行:
show slave status\G;
找到两个线程,比较是否都是 Yes
IO_env=`echo $STATUS | grep IO | awk '{print $2}'`
SQL_env=`echo $STATUS | grep SQL | awk '{print $2}'`
3、监控主从binlog同步情况
1 #!/bin/bash
2
3 ######################################
4 # 监控当前主从同步的情况
5 ######################################
6
7 ### 1、从库:
8 SLAVE_BINLOG1=`mysql -u '从库账号' -p'从库账号密码' -h '从库连接ip' -e "show slave status\G;" | awk '$1=="Master_Log_File:" {print $2}'`
9
10 SLAVE_BINLOG2=`mysql -u '从库账号' -p'从库账号密码' -e "show slave status\G;" | awk '$1=="Relay_Master_Log_File:" {print $2}'
11
12
13 ### 2、主库:
14 ## 获得Master端,当前的binlog文件以及binlog路径
15 MASTER_BINLOG=`mysql -u '主库账号' -p'主库账号密码' -h '主库连接ip' -e "show master status;"
16 | grep -v '^+' | tail -1 | awk '{print $1}'`
17
18 ### 3、同步情况
19 ##### 3.1 主从端已经同步到相同的binlog
20 if [[ "${SLAVE_BINLOG1}" = "${SLAVE_BINLOG2}" && "${SLAVE_BINLOG1}" = "${MASTER_BINLOG}" ]];then
21 CURR_BINLOG="${MASTER_BINLOG}"
22 echo "主从端已经同步到相同的binlog。。。"
23
24 ##### 3.2 主从端已经同步,但从端的binlog还没有追赶到主端最新的binlog
25 elif [[ "${SLAVE_BINLOG1}" != "${SLAVE_BINLOG2}" && "${SLAVE_BINLOG1}" = "${MASTER_BINLOG}" ]]; then
26 CURR_BINLOG="${SLAVE_BINLOG2}"
27 echo "主从端已经同步,但从端的binlog还没有追赶到主端最新的 binlog。。。"
28
29 ##### 3.3 主从端已经同步,主从端的binlog一致,但relaylog还不一致
30 elif [[ "${SLAVE_BINLOG1}" != "${SLAVE_BINLOG2}" && "${SLAVE_BINLOG1}" = "${MASTER_BINLOG}" ]]; then
31 CURR_BINLOG="${SLAVE_BINLOG2}"
32 echo "主从端已经同步,主从端的binlog一致,但 relaylog 还不一致"
33 else
34 echo "未知错误 Has noknown error at:`date +%F" "%H-%M-%S`,需要人工检查"
35 发钉钉告警。。。
36 exit 1
37 fi