0
点赞
收藏
分享

微信扫一扫

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

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

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


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

pip3 install mysql-connector-python

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


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

MYSQL  通过 python  监控半同步参数设置_同步复制_03

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

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

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


MYSQL  通过 python  监控半同步参数设置_同步复制_04


程序会进行两次判断  

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

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

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


下图为程序运行结果

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


以下为相关的代码


#!/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()

MYSQL  通过 python  监控半同步参数设置_同步复制_06


举报

相关推荐

0 条评论