开发者社区> auqbllxiu> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Python:mysql-replication监控MySQL的binlog变动

简介: Python:mysql-replication监控MySQL的binlog变动
+关注继续查看

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
}
}
"""



            </div>

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Python:mysql-replication监控MySQL的binlog变动
Python:mysql-replication监控MySQL的binlog变动
0 0
Python监控云南民族大学成绩查询并推送(部署到宝塔)
前景:由于yq上学期考试推迟了,导致本学期考了,现在成绩还查不到,整天去关注也麻烦,于是部署个在服务器检测的脚本,出成绩后推送到微信邮箱 import requests import time def ceshi(): cookies = { #这里填写你自己的cookie '__pInId__': '', 'SESSION': '', } headers = { 'Connection': 'keep-alive',
0 0
Python:mysql-replication监控MySQL的binlog变动
Python:mysql-replication监控MySQL的binlog变动
0 0
Python:mysql-replication监控MySQL的binlog变动
Python:mysql-replication监控MySQL的binlog变动
0 0
使用python时刻中监控文件夹,记录文件夹中文件异常信息
使用python时刻中监控文件夹,记录文件夹中文件异常信息
0 0
使用python监控linux服务器
使用python监控linux服务器
0 0
EMQ
HStreamDB Newsletter 2022-06|新集群机制、可视化监控、Python 客户端发布…
本月,HStreamDB 团队专注于 v0.9 的开发工作,完成了 HServer 去中心化集群的切换、HStream IO Embedded Runtime 和 CDC Source Connector 的开发, 并发布了首个可用的 Python 客户端。
0 0
【小硬核】你的聊天记录是怎么被公司监控的?| Python 主题月
【小硬核】你的聊天记录是怎么被公司监控的?| Python 主题月
0 0
python 监控Tomcat 重启
利用python监控Tonmcat启动
0 0
用 Python 写摸鱼监控进程,用这个!
继打游戏、看视频等摸鱼行为被监控后,现在打工人离职的倾向也会被监控。 有网友爆料称知乎正在低调裁员,视频相关部门几乎要裁掉一半。而在知乎裁员的讨论区,有网友表示企业安装了行为感知系统,该系统可以提前获知员工跳槽念头。
0 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
MySQL 5.7让优化更轻松
立即下载
PostgresChina2018_张启程_为什么我们抛弃MongoDB和MySQL,选择PgSQL
立即下载
好的 MySQL 兼容可以做到什么程度
立即下载