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

注意事项

  1. 权限要求
  • 源MySQL账号需要REPLICATION SLAVE, REPLICATION CLIENT, SELECT权限
  • 目标MySQL账号需要INSERT, UPDATE, DELETE权限
  1. MySQL配置要求
# 源MySQL必须开启binlog并设置为ROW模式
[mysqld]
log-bin=mysql-bin
binlog-format=ROW
server-id=1  # 必须设置且唯一
  1. 表结构建议
  • 目标表可以有不同的结构,但映射字段需要兼容
  • 建议目标表有与源表相同或更多字段
  1. 性能调优
  • 对于大批量数据同步,调整batch.sizebatch.timeout
  • 目标MySQL的max_allowed_packet参数可能需要增大
  1. 监控
  • 建议启用Prometheus监控来跟踪同步状态
monitor:prometheus: trueport: 8080  # 监控端口

这个配置可以实现从源MySQL到目标MySQL的实时数据同步,支持字段映射、数据转换和条件过滤等功能。