Python:mysql-replication监控MySQL的binlog变动
2023-09-14 09:07:15 时间
Github: https://github.com/noplay/python-mysql-replication
设置同步账号权限
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'replicator'@'%' IDENTIFIED BY '123456';
# 刷新权限
flush privileges;
参考
利用Python my-replication读取mysql的binlog
[mysql]mysql grant 用户权限总结
安装
pip install mysql-replication
代码示例
# -*- coding: utf-8 -*-
import datetime
import json
from pymysqlreplication import BinLogStreamReader
from pymysqlreplication.row_event import (
DeleteRowsEvent,
UpdateRowsEvent,
WriteRowsEvent
)
class DateEncoder(json.JSONEncoder):
"""
自定义类,解决报错:
TypeError: Object of type 'datetime' is not JSON serializable
"""
def default(self, obj):
if isinstance(obj, datetime.datetime):
return obj.strftime('%Y-%m-%d %H:%M:%S')
elif isinstance(obj, datetime.date):
return obj.strftime("%Y-%m-%d")
else:
return json.JSONEncoder.default(self, obj)
# 配置数据库信息
mysql_settings = {
'host': '127.0.0.1',
'port': 3306,
'user': 'root',
'passwd': '123456'
}
def main():
# 实例化binlog 流对象
stream = BinLogStreamReader(
connection_settings=mysql_settings,
server_id=100, # slave标识,唯一
blocking=True, # 阻塞等待后续事件
# 设定只监控写操作:增、删、改
only_events=[
DeleteRowsEvent,
UpdateRowsEvent,
WriteRowsEvent
]
)
for binlogevent in stream:
# binlogevent.dump() # 打印所有信息
for row in binlogevent.rows:
# 打印 库名 和 表名
event = {"schema": binlogevent.schema, "table": binlogevent.table}
if isinstance(binlogevent, DeleteRowsEvent):
event["action"] = "delete"
event["data"] = row["values"]
elif isinstance(binlogevent, UpdateRowsEvent):
event["action"] = "update"
event["data"] = row["after_values"] # 注意这里不是values
elif isinstance(binlogevent, WriteRowsEvent):
event["action"] = "insert"
event["data"] = row["values"]
print(json.dumps(event, cls=DateEncoder))
# sys.stdout.flush()
# stream.close() # 如果使用阻塞模式,这行多余了
if __name__ == '__main__':
main()
"""
输出数据格式
{
"schema": "demo", # 数据库名
"table": "student", # 表名
"action": "update", # 动作 insert、delete、update
"data": { # 数据,里边包含所有字段
"id": 26,
"name": "haha",
"age": 34,
"update_time": "2019-06-06 16:59:06",
"display": 0
}
}
"""
相关文章
- pycharm连接不上mysql中的数据库时_python Mysql时间带t
- Python爬虫之requests
- MySQL存储文本:技术窍门(mysql保存文本)
- Python简易操作MySQL数据库指南(python操作mysql数据库)
- MySQL实现IP配置的简易步骤(mysql配置ip)
- Zabbix实现MySQL数据库性能监控(zabbix监控mysql)
- MySQL导出数据到Excel的技巧(mysql导出xls)
- 教你如何在MySQL中创建数据表(mysql数据库中创建表)
- MySQL 监控系统:实时监控MySQL性能,加强数据安全保障,提升数据处理效率。(mysql监控系统)
- MySQL时间戳转换方法,详解25字中文文章标题。(mysql转换时间戳)
- 使用Shell实现MySQL监控:快速了解数据库状态!(shell监控mysql)
- MySQL 负载实时监控:保障服务质量(mysql 负载监控)
- Python连接MySQL数据库:初学者指南(python入mysql)
- MySQL 状态监控了解数据库性能的关键(mysql_status)
- MySQL高效读取上亿数据(mysql上亿数据读取)
- MYSQL离线使用方法大揭秘不联网也能愉快地使用MySQL(mysql 不联网吗)