----- 程序说明: 本程序实时监控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的