Python执行show slave status输出的两个格式

本文介绍了一种通过Python脚本获取MySQL从库延迟的方法,并对比了元组和字典两种输出方式。字典模式不仅方便读取,还能跨版本使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、元组的方式

输出格式如下:

('Waiting for master to send event', '10.75.19.79', 'mysqlsync', 5580L, 60L, 'mysql-bin.000050', 300947174L, 'relay-bin.000054', 210L, 'mysql-bin.000050', 'Yes', 'Yes', '', '', '', '', '', '', 0L, '', 0L, 300947174L, 463L, 'None', '', 0L, 'No', '', '', '', '', '', 0L, 'No', 0L, '', 0L, '', '', 28585580L)

对应的python脚本:

        def get_all_slave_lag(self):

                for slave in self.slaves_list:
                        conn=MySQLdb.connect(host=slave,user=self.user,passwd=self.password,port=self.port,db=self.db)
                        cursor=conn.cursor()

                        cursor.execute("show slave status")

                        result=cursor.fetchall()

                        for row in result:
                                print row
                                self.lags.append(row[32])

                        cursor.close()
                        conn.close()

有个问题:

  例如获取second_behind_master的值时候,需要考虑对应的顺序,例如5.5版本,对应的顺序为32,可能其他版本的就不一样,需要考虑版本信息。

2、字典模式输出

输出格式如下:

{'Replicate_Wild_Do_Table': '', 'Master_SSL_CA_Path': '', 'Last_Error': '', 'Until_Log_File': '', 'Seconds_Behind_Master': 0L, 'Master_User': 'mysqlsync', 'Master_Port': 5580L, 'Until_Log_Pos': 0L, 'Master_Log_File': 'mysql-bin.000050', 'Read_Master_Log_Pos': 300947174L, 'Replicate_Do_DB': '', 'Master_SSL_Verify_Server_Cert': 'No', 'Exec_Master_Log_Pos': 300947174L, 'Replicate_Ignore_Server_Ids': '', 'Replicate_Ignore_Table': '', 'Master_Server_Id': 28585580L, 'Relay_Log_Space': 463L, 'Last_SQL_Error': '', 'Relay_Master_Log_File': 'mysql-bin.000050', 'Master_SSL_Allowed': 'No', 'Master_SSL_CA_File': '', 'Slave_IO_State': 'Waiting for master to send event', 'Relay_Log_File': 'relay-bin.000054', 'Replicate_Ignore_DB': '', 'Last_IO_Error': '', 'Until_Condition': 'None', 'Replicate_Do_Table': '', 'Last_Errno': 0L, 'Master_Host': '10.75.19.79', 'Master_SSL_Key': '', 'Skip_Counter': 0L, 'Slave_SQL_Running': 'Yes', 'Relay_Log_Pos': 210L, 'Master_SSL_Cert': '', 'Last_IO_Errno': 0L, 'Slave_IO_Running': 'Yes', 'Connect_Retry': 60L, 'Last_SQL_Errno': 0L, 'Replicate_Wild_Ignore_Table': '', 'Master_SSL_Cipher': ''}

对应代码如下:

        def get_all_slave_lag(self):

                for slave in self.slaves_list:
                        conn=MySQLdb.connect(host=slave,user=self.user,passwd=self.password,port=self.port,db=self.db)
                      cursor=conn.cursor(cursorclass=MySQLdb.cursors.DictCursor)

                        cursor.execute("show slave status")

                        result=cursor.fetchall()

                        for row in result:
                                print row
                                self.lags.append(row['Seconds_Behind_Master'])

                        cursor.close()
                        conn.close()

这样比较方便且通用,不用考虑格式问题。

本例子是对应show slave status是这样使用,对于show status以及show variables 也一样处理

转载于:https://www.cnblogs.com/gsblog/p/3313325.html

### Windows 上同时安装和配置两个 MySQL 实例 在 Windows 环境下,可以通过主从复制的方式实现两套独立运行的 MySQL 实例。以下是具体方法: #### 配置环境准备 为了确保两个 MySQL 实例能够正常工作,需要分别解压并设置不同的路径以及对应的 `my.ini` 文件。 1. **下载与解压** 下载 MySQL 安装包,并将其解压到两个不同目录中。例如: - 第一个实例位于 `D:\DevTools\mysql-8.0.27-winx64` - 第二个实例位于 `D:\DevTools\mysql-8.0.27-winx64-1` 2. **修改配置文件 (`my.ini`)** 创建或编辑每个实例下的 `my.ini` 文件,确保端口、数据存储路径和其他参数不冲突。 对于第一个实例 (Master),其配置如下所示[^3]: ```ini [mysqld] port=3306 datadir=D:\\DevTools\\mysql-8.0.27-winx64\\data log-bin=mysql-bin server-id=1 ``` 对于第二个实例 (Slave),其配置应调整为: ```ini [mysqld] port=3307 datadir=D:\\DevTools\\mysql-8.0.27-winx64-1\\data relay-log=mysql-relay-bin log-slave-updates=true read-only=true server-id=2 master-host=localhost master-user=repl_user master-password=password master-port=3306 ``` #### 初始化数据库 对于每一个实例都需要执行初始化操作来生成初始的数据文件结构。 1. 打开 CMD 并切换至对应 bin 路径下; 2. 使用以下命令完成初始化过程(针对 Master 和 Slave 的情况可能略有差异)[^2]: ```bash mysqld --initialize-insecure --datadir=E:\MYSQL5740\master\mysqldata ``` #### 注册服务 通过注册系统服务使得每次开机自动启动相应的 MySQL 进程。 1. 利用管理员权限开启命令提示符工具; 2. 输入相应指令添加新服务项: - 主库服务安装: ```bash mysqld -install mysql_master --defaults-file=D:\DevTools\mysql-8.0.27-winx64\my.ini ``` - 从库服务安装: ```bash mysqld -install mysql_slave --defaults-file=D:\DevTools\mysql-8.0.27-winx64-1\my.ini ``` #### 启动测试 最后一步就是验证上述所有步骤是否成功实施。 ```bash net start mysql_master net start mysql_slave ``` 确认无误之后即可按照常规方式连接访问这两个相互关联却又彼此独立运作着的服务节点了。 --- ### 注意事项 - 确认防火墙规则允许所使用的端口号通信。 - 如果遇到任何错误消息,请仔细检查日志记录以定位问题所在之处。 ```python import pymysql def connect_to_mysql(host='localhost', user='root', password='', db=''): try: connection = pymysql.connect( host=host, user=user, password=password, database=db, cursorclass=pymysql.cursors.DictCursor ) return connection except Exception as e: print(f"Error connecting to the MySQL Server: {e}") if __name__ == "__main__": conn = connect_to_mysql('localhost', 'repl_user', 'password', '') if conn is not None and conn.open: with conn.cursor() as cur: sql_query = """SHOW SLAVE STATUS""" cur.execute(sql_query) result = cur.fetchone() if result['Slave_IO_Running'] == 'Yes' and result['Slave_SQL_Running'] == 'Yes': print("Replication setup successful.") else: print("Replication issues detected.") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值