/py_sync_binlog

同步MySQL binlog 将分库分表合并到另外一个库表中

Primary LanguagePythonApache License 2.0Apache-2.0

-----  程序说明:
本程序实时监控MySQL binlog解析event SQL同步至另外一个实例或者另一库或表中
-----  版本号:
v 1.0.0
    1、初始化版本提交

v 1.0.1
    1、修复同步删除语句更新检查点bug
    2、增加批量组提交功能
v 2.0.0(由于年前公司有事,推迟到3月底发布)
    1、重写SQL执行模块
    2、重写采集进程模块
    3、修复event更新bug
    4、重写加密模块,符合业界加密标准
    5、新增正则表达式匹配库表进行合并
    6、新增5.7 json格式更新
    7、多线程协程处理会出现数据不一致(还在开发中)
    8、修复异常字符处理逻辑

-----  功能说明:

1、支持分库分表合并到单个库表中
2、支持一比一实时同步
3、支持DDL同步
4、支持库表同步切换同步
5、支持脱敏字段加密同步
6、支持批量组提交、加快同步速度
7、支持正则匹配
8、支持MySQL5.5 5.6 5.7 8.0+ 

-----  依赖环境:
程序基于Python 3.6开发,最新版本运行环境不能低于Python 3.3版本

-----  安装:
在install目录执行: sh install.sh

-----  初次启动程序说明:
启动在安装后最后一行有提示怎么启动,需要注意的是初次启动需要手动获取master binlog file 和 position (命令:show master status)
并且手工分两行写入checkpoint文件中,再运行启动命令
示例:
binlog.000005
154
-----  关闭程序说明:
请一定要安全关闭,运行python3 shutdown.py进行关闭,如果非正常关闭如强制关闭进程,可能导致数据丢失和checkpoint文件损坏

-----  同步表数据说明:
同步的所有表必须要有主键,否则会导致同步数据不一致

-----  目录解构描述:
py_sync_binlog_mysql
|-- auto_cnf
|   `-- auto.cnf
|-- checkpoint  // 检查点文件
|-- encryption // 密码加密模块
|   `-- passwd_encryption.py
|-- install //安装目录
|   |-- certifi-2018.4.16-py2.py3-none-any.whl
|   |-- chardet-3.0.4-py2.py3-none-any.whl
|   |-- crypto-1.4.1.tar.gz
|   |-- idna-2.7-py2.py3-none-any.whl
|   |-- install.sh
|   |-- Naked-0.1.31-py2.py3-none-any.whl
|   |-- pycrypto-2.6.1.tar.gz
|   |-- PyMySQL-0.8.1.tar.gz
|   |-- PyYAML-3.12.tar.gz
|   |-- requests-2.19.1-py2.py3-none-any.whl
|   |-- shellescape-3.4.1-py2.py3-none-any.whl
|   `-- urllib3-1.23-py2.py3-none-any.whl
|-- LICENSE
|-- logs 
|-- README.md
|-- startup.py  // 启动程序
|-- sync_binlog //主目录
|   |-- AES_Encryption.py //同步加密模块
|   |-- analysis_binlog_main.py // 分析模块
|   |-- analysis_binlogs.py 
|   |-- analysis_rows.py // 行解析模块
|   |-- batch_analysis_insert_sql.py // 批量提交模块
|   |-- Decrypt.py //同步加密模块
|   |-- global_transaction_insert_batch_id.py // 全局ID模块
|   |-- main_multi_threading.py // 多线程模块(暂时没有用)
|   |-- merge_dbname_tables.py // 合并模块
|   |-- output_log.py // 日志模块
|   |-- parameter_check.py // 参数检查模块
|   |-- safe_shutdown.py // 安全关闭模块
|   |-- send_binlog.py // 发送SQL模块
|   `-- update_post.py // 更新检查点模块
`-- sync_conf.py // 配置文件
`-- shutdown.py // 关闭程序

----- 常见问题
1、同步出现更新未找到匹配行或者删除未匹配行,程序自动自动退出
处理步骤:检查上下游数据是否一致,并且在日志中找到出错SQL语句,如果是下游不存在数据则需要添加该数据
重启程序,程序默认不会跳过出错语句,需要手工处理数据后才能继续
2、同步出现主键冲突
处理步骤与问题1一致
3、如果有加密字段出现问题
处理步骤:
找到上游数据在Navicat中查询数据复制为insert语句,删除上游数据,重新插入,确保下游也无该数据,再重启同步程序
4、如果有合并表库操作暂不支持DDL,如果只是同步是支持DDL的