MySQL到MySQL的Go-MySQL-Transfer配置示例
Go-MySQL-Transfer 支持将数据从源MySQL同步到目标MySQL数据库。以下是完整的配置示例:
基本配置示例
# 源MySQL配置
mysql:host: 127.0.0.1port: 3306user: rootpassword: source_passwordcharset: utf8mb4server_id: 1001 # 必须唯一,不能与主库或其他从库冲突flavor: mysql # mysql或mariadbgtid: false # 是否使用GTID模式# 目标存储配置为MySQL
target:type: mysqlmysql:host: 127.0.0.1port: 3307 # 目标MySQL端口user: rootpassword: target_passwordcharset: utf8mb4max_open_conns: 20 # 最大连接数max_idle_conns: 5 # 空闲连接数# 同步规则配置
rules:- schema: source_db # 源数据库名table: users # 源表名target_schema: target_db # 目标数据库名target_table: users_info # 目标表名(可与源表不同)key: id # 主键字段名# 字段映射(源字段:目标字段)field_mapping:id: user_idname: full_nameage: ageemail: emailcreated_at: create_time# 可选的字段转换Lua脚本lua_script: |-- 可以在这里对字段值进行转换if type(age) == "string" thenage = tonumber(age)end-- 可以添加新字段new_fields = {}new_fields.user_id = idnew_fields.full_name = string.upper(name)new_fields.age = agenew_fields.email = emailnew_fields.create_time = created_atnew_fields.status = "active" -- 新增字段return new_fields# 同步操作类型(默认全部同步)# ops: [insert, update, delete]
多表同步配置示例
rules:- schema: source_dbtable: productstarget_schema: target_dbtarget_table: productskey: product_idfield_mapping:product_id: idproduct_name: nameprice: pricestock: inventory# 只同步插入和更新操作ops: [insert, update]- schema: source_dbtable: orderstarget_schema: target_dbtarget_table: orderskey: order_idfield_mapping:order_id: idcustomer_id: cidamount: amountstatus: statuscreated_at: create_time# 同步所有操作ops: [insert, update, delete]
高级配置选项
rules:- schema: source_dbtable: logstarget_schema: target_dbtarget_table: system_logskey: log_id# 批量插入配置(提高性能)batch:size: 100 # 每批记录数timeout: 2000 # 超时时间(毫秒)# 条件过滤(只同步符合条件的数据)filter: "status = 'active'"field_mapping:log_id: iduser_id: uidaction: actiondetail: contentcreated_at: log_time# 执行前的SQL(如清理数据)before_sql: "DELETE FROM system_logs WHERE log_time < DATE_SUB(NOW(), INTERVAL 30 DAY)"
注意事项
- 权限要求:
- 源MySQL账号需要
REPLICATION SLAVE, REPLICATION CLIENT, SELECT
权限 - 目标MySQL账号需要
INSERT, UPDATE, DELETE
权限
- MySQL配置要求:
# 源MySQL必须开启binlog并设置为ROW模式
[mysqld]
log-bin=mysql-bin
binlog-format=ROW
server-id=1 # 必须设置且唯一
- 表结构建议:
- 目标表可以有不同的结构,但映射字段需要兼容
- 建议目标表有与源表相同或更多字段
- 性能调优:
- 对于大批量数据同步,调整
batch.size
和batch.timeout
- 目标MySQL的
max_allowed_packet
参数可能需要增大
- 监控:
- 建议启用Prometheus监控来跟踪同步状态
monitor:prometheus: trueport: 8080 # 监控端口
这个配置可以实现从源MySQL到目标MySQL的实时数据同步,支持字段映射、数据转换和条件过滤等功能。