zl程序教程

您现在的位置是:首页 >  Python

当前栏目

MYSQL 通过 python 监控半同步参数设置

2023-03-20 14:59:21 时间
MYSQL 的半同步是MYSQL 复制的核心,通过半同步可以让MYSQL复制在一定的时间和状态下尽量两端的数据是一致的。

要监控半同步的情况,首选需要安装python connector for mysql ,

pip3 install mysql-connector-python

通过安装 mysql-connector-python 来对MYSQL 8.X的数据库进行访问

MYSQL 官网中关于联通MYSQL 的版本的说明在上图,请注意不同的版本可以操作的MYSQL的数据库。

下面的PTYHON 是针对8.026 检查和打开半同步功能的程序

请配置一个远程的账号,在MYSQL 中以及对应的主机地址

程序会进行两次判断

1 如果MYSQL的版本不是8.026 及以上,可以通过选择退出程序

2 如果半同步未打开,可以通过选择 直接打开当前主机的半同步功能

同时程序后面会针对关键的半同步参数进行展示和相关参数的说明

下图为程序运行结果

以下为相关的代码

#!/usr/bin/python3 import mysql.connector from mysql.connector import errorcode import sys import os import datetime def mconn(): config = { 'user':'admin', 'password':'1234.Com', 'host': '192.168.198.200', 'database': 'mysql', 'use_pure':True, 'raise_on_warnings':True } con = mysql.connector.connect(**config) cur = con.cursor() query = ("select plugin_name,plugin_status from information_schema.plugins where plugin_name = 'rpl_semi_sync_source';") cur.execute(query) res = cur.fetchall() print('__________________________________________________') if len(res) != 0: print('如果下方的信息中rpl_semi_sync_source 不是active,请激活,当前配置有问题') print('-----------------------------------------------------------------------') for row in res: print (row) else: print('半同步源服务并未开启') query = ("select plugin_name,plugin_status from information_schema.plugins where plugin_name = 'rpl_semi_sync_replica';") cur.execute(query) res = cur.fetchall() print('__________________________________________________') if len(res) != 0: print('如果下方的信息中rpl_semi_sync_replica 不是active,请激活,当前配置有问题') print('-----------------------------------------------------------------------') for row in res: print (row) else: print('半同步目的服务并未开启') print('如上面有问题,程序将开启source 和 replica 半同步,同意请按 1 不同意请按 0') code = input("请输入1 或 0") if code == '1': query1 = ('SET GLOBAL rpl_semi_sync_source_enabled = 1;') query2 = ('SET GLOBAL rpl_semi_sync_replica_enabled = 1;') cur.execute(query1) cur.execute(query2) print('操作完成,请重新运行程序检测') else: print('操作停止') con.close() def mconn_p(): config = { 'user':'admin', 'password':'1234.Com', 'host': '192.168.198.200', 'database': 'mysql', 'use_pure':True, 'raise_on_warnings':True } con = mysql.connector.connect(**config) cur = con.cursor() query1 = ("show variables like 'rpl_semi_sync_replica_enabled';") query2 = ("show variables like 'rpl_semi_sync_source_enabled';") query3 = ("show variables like 'rpl_semi_sync_source_timeout';") query4 = ("show variables like 'rpl_semi_sync_source_wait_for_replica_count';") query5 = ("show variables like 'rpl_semi_sync_source_wait_no_replica';") query6 = ("show variables like 'rpl_semi_sync_source_wait_point';") querys = [query1,query2,query3,query4,query5,query6] for query in querys: cur.execute(query) res = cur.fetchall() for row in res: if row[0] == 'rpl_semi_sync_replica_enabled': print('打开半同步复制从库端') elif row[0] == 'rpl_semi_sync_source_enabled': print('打开半同步复制主库端') elif row[0] == 'rpl_semi_sync_source_timeout': print('半同步等待超时时间') elif row[0] == 'rpl_semi_sync_source_wait_for_replica_count': print('多少复制端参与半同步复制') elif row[0] == 'rpl_semi_sync_source_wait_no_replica': print('如果复制端不够预期设置,是否还进行复制') elif row[0] == 'rpl_semi_sync_source_wait_point': print('等待复制的属性after_sync为数据复制到从库即为返回成功,after_commit 为数据在从库commit后返回成功') else: print ('----------------------------------------------------------------------------------------------') print (row) print ('--------------------------------------------------------------------------------------------------') con.close()