首页 > 数据库 > 数据库开发技术 > MySQL至TiDB复制延迟监控
因生产环境mysql中有较多复杂sql且运行效率低,因此采用tidb作为生产环境的从库进行部分慢sql及报表的读写分离。其中MySQL至TIDB采用Syncer工具同步。

-- 创建监控数据库monitor;CREATE DATABASE `monitor`;USE `monitor`;-- 创建监控时间表monitor_time;CREATE TABLE `monitor_time` (`t` bigint(20) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- 初始化数据,因后面监控程序定时更新该条记录insert into monitor_time select 1;-- 创建监控结果表monitor_result;CREATE TABLE `monitor_result` (`id` bigint(20) NOT NULL AUTO_INCREMENT,`t` int(11) DEFAULT NULL COMMENT '延迟时间',`add_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '监控记录生成时间',`t_mysql` int(11) DEFAULT NULL COMMENT 'mysql主从延迟时长', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE USER monitor@'192.168.3.42' IDENTIFIED BY 'monitor';GRANT SELECT ,INSERT ,UPDATE ON monitor.* TO monitor@'192.168.3.42';
import os,timeimport pymysqlwhile True:t = time.time()t1= int(round(t * 1000))conn = pymysql.connect(host='*.*.*.*',port=3306,user='monitor',passwd='monitor')cur = conn.cursor()sql_update = "update monitor.monitor_time set t="+str(t1)cur.execute(sql_update)conn.commit()conn.close()time.sleep(0.5)
import os,timeimport pymysqlwhile True:conn_sor = pymysql.connect(host='*.*.*.*',port=3306,user='monitor',passwd='monitor')cur_sor = conn_sor.cursor()conn_138 = pymysql.connect(host='*.*.*.*',port=3306,user='monitor',passwd='monitor')cur_138 = conn_138.cursor()conn_des = pymysql.connect(host='*.*.*.*',port=4000,user='monitor',passwd='monitor')cur_des = conn_des.cursor()sql_get_time = "select t from monitor.monitor_time "cur_sor.execute(sql_get_time)v_src_tuple=cur_sor.fetchone()t_sor=v_src_tuple[0]cur_des.execute(sql_get_time)v_des_tuple=cur_des.fetchone()t_des=v_des_tuple[0]cur_138.execute(sql_get_time)v_138_tuple=cur_138.fetchone()t_138=v_138_tuple[0]t1 = t_sor/1000 - t_des/1000t2 = t_sor/1000 - t_138/1000sql_insert = "insert into monitor.monitor_result(t,t_mysql) select "+str(t1)+","+str(t2)cur_sor.execute(sql_insert)conn_sor.commit()conn_sor.close()conn_des.close()time.sleep(10)
python monitor_tidb.py &python get_tidb_delay.py &
# __author__ : 'GJC'# __created__ : '2018/9/17'# coding=utf-8import pymysqlimport plotly.plotlyfrom plotly.graph_objs import *import plotly.graph_objs as abcimport matplotlib.pyplot as plthost = "*.*.*.*"user = "monitor"passwd = "monitor"db = "monitor"port = 3306charset = "utf8"conn = pymysql.connect(host=host,port=port,user=user,passwd=passwd,db=db,charset=charset,)cur = conn.cursor()re = cur.execute("SELECT add_time,t,t_mysql FROM monitor.monitor_result_t ")dfs = cur.fetchall()listx = []listy = []listy2 = []for row in dfs:listx.append(row[0])listy.append(row[1])listy2.append(row[2])cur.close()conn.commit()conn.close()length = listy.__len__()data_1 = abc.Scatter(x=listx,y=listy,name='syncer_delay_time_tidb',mode='markers',marker=dict(size=10,color="rgba(255,47,167,.9)",line=dict(width=2,color='rgb(2,2,2)')))data_2 = abc.Scatter(x=listx,y=listy2,name='syncer_delay_time_mysql',mode='markers',marker=dict(size=10,color="rgba(255,47,167,.9)",line=dict(width=2,color='rgb(3,3,3)')))data1 = Data([data_1])plotly.offline.plot(data1)data2 = Data([data_2])plotly.offline.plot(data2)

想进一步沟通或想了解其他文章的同学可以关注我

精彩推荐:
原文作者:数据库干货铺;如有侵权,请联系管理员删除。