使用go-mysql-transfer完成mysql同步到mongoDB

1、mysql开启bin_log

打开my.ini文件(linux中是my.cnf)

log-bin=mysql-bin 
# 开启 binlog
binlog-format=ROW 
# 选择 ROW 模式
server_id=1 
# 配置 MySQL replaction 需要定义,不要和 go-mysql-transfer 的 slave_id 重复

2、确保mysql可以远程登录

如果不行,则登录mysql执行以下sql

use mysql;
update user set host = '%' where user ='root';
flush privileges;
select host,user from user where user='root';

3、下载go-mysql-transfer生产版本

传送门

4、配置go环境

# 下载安装包
wget https://dl.google.com/go/go1.17.linux-amd64.tar.gz

# 解压
tar -C /usr/local -zxvf  go1.17.linux-amd64.tar.gz

# 配置环境变量
vim /etc/profile
# 在最后一行添加
export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin
# wq保存退出后source一下
source /etc/profile

# 验证
go version


5、app.yml

# mysql配置
addr: 127.0.0.1:3307
user: root
pass: 123456
charset : utf8
slave_id: 1001 #slave ID
flavor: mysql #mysql or mariadb,默认mysql

#系统相关配置
#data_dir: D:\\transfer #应用产生的数据存放地址,包括日志、缓存数据等,默认当前运行目录下store文件夹
#logger:
#  level: info #日志级别;支持:debug|info|warn|error,默认info

#maxprocs: 50 #并发协(线)程数量,默认为: CPU核数*2;一般情况下不需要设置此项
#bulk_size: 1000 #每批处理数量,不写默认100,可以根据带宽、机器性能等调整;如果是全量数据初始化时redis建议设为1000,其他接收端酌情调大

#prometheus相关配置
#enable_exporter: true #是否启用prometheus exporter,默认false
#exporter_addr: 9595 #prometheus exporter端口,默认9595

#web admin相关配置
enable_web_admin: true #是否启用web admin,默认false
web_admin_port: 8060 #web监控端口,默认8060

#cluster: # 集群相关配置
    #name: myTransfer #集群名称,具有相同name的节点放入同一个集群
    #bind_ip: 127.0.0.1 # 绑定的IP,如果机器有多张网卡(包含虚拟网卡)会有多个IP,使用这个属性绑定一个
    #ZooKeeper地址,多个用逗号风格
    #zk_addrs: 127.0.0.1:2181
    #zk_authentication: 123456 #digest类型的访问秘钥,如:user:password,默认为空
    #etcd_addrs: 127.0.0.1:2379 #etcd连接地址,多个用逗号分隔
    #etcd_user: test #etcd用户名
    #etcd_password: 123456 #etcd密码

#目标类型
target: mongodb # 支持redis、mongodb、elasticsearch、rocketmq、kafka、rabbitmq

#redis连接配置
#redis_addrs: 127.0.0.1:6379 #redis地址,多个用逗号分隔
#redis_group_type: cluster   # 集群类型 sentinel或者cluster
#redis_master_name: mymaster # Master节点名称,如果group_type为sentinel则此项不能为空,为cluster此项无效
#redis_pass: 123456 #redis密码
#redis_database: 0  #redis数据库 0-16,默认0。如果group_type为cluster此项无效

#mongodb连接配置
mongodb_addrs: 192.168.0.211:27017 #mongodb连接地址,多个用逗号分隔
# mongodb_username: admin #mongodb用户名,默认为空
# mongodb_password: 123456 #mongodb密码,默认为空

#elasticsearch连接配置
#es_addrs: 127.0.0.1:9200 #连接地址,多个用逗号分隔
#es_version: 7 # Elasticsearch版本,支持6和7、默认为7
#es_password:  # 用户名
#es_version:  # 密码

#rocketmq连接配置
#rocketmq_name_servers: 127.0.0.1:9876 #rocketmq命名服务地址,多个用逗号分隔
#rocketmq_group_name: transfer_test_group #rocketmq group name,默认为空
#rocketmq_instance_name: transfer_test_group_ins #rocketmq instance name,默认为空
#rocketmq_access_key: RocketMQ #访问控制 accessKey,默认为空
#rocketmq_secret_key: 12345678 #访问控制 secretKey,默认为空

#kafka连接配置
#kafka_addrs: 127.0.0.1:9092 #kafka连接地址,多个用逗号分隔
#kafka_sasl_user:  #kafka SASL_PLAINTEXT认证模式 用户名
#kafka_sasl_password: #kafka SASL_PLAINTEXT认证模式 密码

#rabbitmq连接配置
#rabbitmq_addr: amqp://guest:guest@127.0.0.1:5672/  #连接字符串,如: amqp://guest:guest@localhost:5672/

#规则配置
rule:
  -
    schema: water #数据库名称
    table: user #表名称
    #order_by_column: id #排序字段,存量数据同步时不能为空
    #column_lower_case:false #列名称转为小写,默认为false
    #column_upper_case:false#列名称转为大写,默认为false
    column_underscore_to_camel: true #列名称下划线转驼峰,默认为false
    # 包含的列,多值逗号分隔,如:id,name,age,area_id  为空时表示包含全部列
    #include_columns: ID,USER_NAME,PASSWORD
    #exclude_columns: BIRTHDAY,MOBIE # 排除掉的列,多值逗号分隔,如:id,name,age,area_id  默认为空
    #column_mappings: USER_NAME=account    #列名称映射,多个映射关系用逗号分隔,如:USER_NAME=account 表示将字段名USER_NAME映射为account
    #default_column_values: area_name=合肥  #默认的列-值,多个用逗号分隔,如:source=binlog,area_name=合肥
    #date_formatter: yyyy-MM-dd #date类型格式化, 不填写默认yyyy-MM-dd
    #datetime_formatter: yyyy-MM-dd HH:mm:ss #datetime、timestamp类型格式化,不填写默认yyyy-MM-dd HH:mm:ss
    #lua_file_path: lua/t_user.lua   #lua脚本文件
    #lua_script:   #lua 脚本
    value_encoder: json  #值编码,支持json、kv-commas、v-commas;默认为json
    #value_formatter: '{{.ID}}|{{.USER_NAME}}' # 值格式化表达式,如:{{.ID}}|{{.USER_NAME}},{{.ID}}表示ID字段的值、{{.USER_NAME}}表示USER_NAME字段的值

    #redis相关
    #redis_structure: string # 数据类型。 支持string、hash、list、set、sortedset类型(与redis的数据类型一致)
    #redis_key_prefix: USER_ #key的前缀
    #redis_key_column: USER_NAME #使用哪个列的值作为key,不填写默认使用主键
    #redis_key_formatter: '{{.ID}}|{{.USER_NAME}}'
    #redis_key_value: user #KEY的值(固定值);当redis_structure为hash、list、set、sortedset此值不能为空
    #redis_hash_field_prefix: _CARD_ #hash的field前缀,仅redis_structure为hash时起作用
    #redis_hash_field_column: Cert_No #使用哪个列的值作为hash的field,仅redis_structure为hash时起作用,不填写默认使用主键
    #redis_sorted_set_score_column: id #sortedset的score,当数据类型为sortedset时,此项不能为空,此项的值应为数字类型

    #mongodb相关
    mongodb_database: demo #mongodb database不能为空
    # mongodb_collection: user #mongodb collection,可以为空,默认使用表名称

    #elasticsearch相关
    #es_index: user_index #Index名称,可以为空,默认使用表(Table)名称
    #es_mappings: #索引映射,可以为空,为空时根据数据类型自行推导ES推导
    #  -
    #    column: REMARK #数据库列名称
    #    field: remark #映射后的ES字段名称
    #    type: text #ES字段类型
    #    analyzer: ik_smart #ES分词器,type为text此项有意义
    #    #format: #日期格式,type为date此项有意义
    #  -
    #    column: USER_NAME #数据库列名称
    #    field: account #映射后的ES字段名称
    #    type: keyword #ES字段类型

    #rocketmq相关
    #rocketmq_topic: transfer_test_topic #rocketmq topic,可以为空,默认使用表名称

    #kafka相关
    #kafka_topic: user_topic #rocketmq topic,可以为空,默认使用表名称

    #rabbitmq相关
    #rabbitmq_queue: user_topic #queue名称,可以为空,默认使用表(Table)名称


6、运行

# Windows直接运行 
go-mysql-transfer.exe

# Linux执行 
nohup go-mysql-transfer &

配置中开启监控后访问 ip:8060

在这里插入图片描述

7、注意

如果mysql主库在同步的时候发生bin_log位置偏移,则通过下列命令刷新一下日志

# 查看状态
show master status;
# 刷新日志
flush logs;
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值