tungsten replicator:数据迁移利器【mysql 数据同步到 mongodb】

导语

tungsten-replicator 是一款开源的、高性能、跨数据库系统的复制引擎,可用作多种场景下的数据迁移组件。本文尝试利用该工具实现 mysql 数据到 mongodb 的同步。

一、初始环境设置:

  • 103 主机:mysql 服务器,开启 log-bin,binlog_format 设置为 row 格式;端口 3700;安装过程不赘述
  • 104 主机:mongodb 服务器;端口 225032;安装过程不赘述
  • 两台机器有一个同名的账户,这里用默认的机器账户 webroot,两台机器配置信任关系,相互之间可免密码登录

二、配置同步账户:

登录 mysql 主机,为 tungsten-replicator 进程授权,因为这里 tungsten-replicator 是本机安装,故授权 ip 是 103;权限类型至少需要 replication slave、replication client、create database ,还需增删查改,建议授权 all privleges.

  • grant all privilegs on . to tungsten@'103' identified by ''tungsten;

三、下载 tungsten-replicator:

四、解压安装:

在 103 主机执行如下操作:

tar -zxf tungsten-replicator-2.2.0-292.tar.gz cd tungsten-replicator-2.2.0-292 ./tools/tpm install mysql2mongodb --dataservice-schema=qqnews_main --datasource-mysql-conf=/data/webroot/myrocksandmysql57/mysql57/etc/my.cnf --enable-heterogenous-master=true --install-directory=/data/webroot/tp_mysql --master=10.62.19.103 --replication-password=tungsten --replication-user=tungsten --skip-validation-check=InstallationScriptCheck --skip-validation-check=MySQLDefaultTableTypeCheck --start-and-report=true

在 104 主机执行如下操作:

tar -zxf tungsten-replicator-2.2.0-292.tar.gz cd tungsten-replicator-2.2.0-292 ./tools/tpm install mysql2mongodb --datasource-type=mongodb --enable-heterogenous-slave=true --install-directory=/home/webroot/tp_mongodb --master=10.62.19.103 --members=10.49.82.222 --replication-port=25032 --skip-validation-check=InstallationScriptCheck --start-and-report=true --topology=master-slave

参数解释:mysql2mongodb 是服务名字,唯一标识一对数据迁移服务;mysql 端通过 master 参数、datasource-mysql-conf 中包含的端口信息、replication-user、replication-password 信息连接上指定实例,之后同步 dataservice-schema 库数据;mongodb 端通过 members 参数、replication-port 连接指定的 mongo 实例(也可以是 mongos 入口),然后进行同步。如果 mongo 端同样做了授权:详细参数参见 ./tool/tpm help install 。

执行完成后,看到 state 是 ONLINE 状态即说明成功。此时可以看到在 install-directory 目录下如下:ls backups relay releases service_logs share thl tungsten

这步骤安装时候一直不能通过:当时报错是:

原因为配置 ssh 信任关系时候,两台机器可以相互登录,但本机不能免密码登录本机。分别将自己的密钥添加到认证文件中就好了;

另公司内为了安全,ssh 端口非默认的 22,那么这步安装时候要加参数: --net-ssh-option=port=36000 。

五、查看同步状态:

cd /home/webroot/tp_mongodb cd tungsten/tungsten-replicator/ ./bin/trepctl status Processing status command... NAME VALUE ---- ----- appliedLastEventId : mysql-bin.000450:0000000000003937;59 appliedLastSeqno : 47980 appliedLatency : 0.635 channels : 1 clusterName : mysql2mongodb currentEventId : mysql-bin.000450:0000000000003937 currentTimeMillis : 1475138537477 dataServerHost : 10.62.19.103 extensions : host : 10.62.19.103 latestEpochNumber : 47957 masterConnectUri : thl://localhost:/ masterListenUri : thl://10.62.19.103:2112/ maximumStoredSeqNo : 47980 minimumStoredSeqNo : 0 offlineRequests : NONE pendingError : NONE pendingErrorCode : NONE pendingErrorEventId : NONE pendingErrorSeqno : -1 pendingExceptionMessage: NONE pipelineSource : jdbc:mysql:thin://10.62.19.103:3700/ relativeLatency : 88699.477 resourcePrecedence : 99 rmiPort : 10000 role : master seqnoType : java.lang.Long serviceName : alpha_mysql serviceType : local simpleServiceName : mysql2mongodb siteName : default sourceId : 10.62.19.103 state : ONLINE timeInStateSeconds : 179684.874 transitioningTo : uptimeSeconds : 179687.108 useSSLConnection : false version : Tungsten Replicator 2.2.0 build 292 Finished status command...

输出解释:status 状态表示同步进程工作状态,若有报错则会在这里看到。

起停同步进程:

cd /data/webroot/alpha/tungsten/tungsten-replicator ./bin/replicator restart

上下线数据迁移服务:

./bin/trepctl offline

默认是基于 binlog 全库开始同步,指定同步特定库表:

cd /data/webroot/alpha/tungsten/tungsten-replicator ../tools/tpm update mysql2mongodb --repl-svc-extractor-filters=replicate --property=replicator.filter.replicate.do=qqnews_main.test_fulltext

从指定的 pos 点开始同步:

cd /data/webroot/alpha/tungsten/tungsten-replicator && ./bin/trepctl offline ./bin/trepctl online -from-event mysql-bin.000006:1029

六、验证数据同步效果:

mysql 端建立一张表,并插入一条数据; use qqnews_main;craete table t (id int);insert into t set id=1;

mongo 端进行验证: use qqnews_main;db.t.find();

该步骤如果执行完成后,数据未能实时同步,可以通过./bin/trepctl 的输出配合进行调试。

七、缺点:

  • 通过 tungsten-replication 同步之后的数据没法进行 check 比对,只能依赖业务层面 check
  • 基准数据需要人工导入
  • 部分 DDL 语句不能正常同步,如 drop table;drop database 等

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏实战docker

实战docker,编写Dockerfile定制tomcat镜像,实现web应用在线部署

最初在tomcat上部署web应用的方式,是通过maven的maven-compiler-plugin插件先打成war包,再将war包复制到tomcat的web...

4255
来自专栏零基础使用Django2.0.1打造在线教育网站

零基础使用Django2.0.1打造在线教育网站(二十七):项目部署上线

努力与运动兼备~~~有任何问题可以加我好友或者关注微信公众号,欢迎交流,我们一起进步!

1374
来自专栏Java技术分享

MySQL Binlog的介绍

基本定义:二进制日志,也成为二进制日志,记录对数据发生或潜在发生更改的SQL语句,并以二进制的形式保存在磁盘中; 作用:binlog的作用类似于Oracle的归...

3129
来自专栏Laoqi's Linux运维专列

使用mysql-proxy配置mysql读写分离

3328
来自专栏Objective-C

iOS-修改app显示名称(本地化和国际化)

3166
来自专栏weixuqin 的专栏

Python3 + django2.0 + apache2 + ubuntu14部署网站上线

1973
来自专栏CaiRui

Mysql-13mysql的复制

1.mysql复制概念   指将主数据库的DDL和DML操作通过二进制日志传到复制服务器上,然后在复制服务器上将这些日志文件重新执行,从而使复制服务器和主服务器...

1776
来自专栏Java技术分享

MySQL Binlog的介绍

基本定义:二进制日志,也成为二进制日志,记录对数据发生或潜在发生更改的SQL语句,并以二进制的形式保存在磁盘中;

2916
来自专栏建站达人秀

如何搭建 Django 网站

Django是一个非常受欢迎的全功能服务器端Python Web框架,可以快速开发安全和可维护的网站。由经验丰富的开发人员构建。Django负责处理Web开发大...

1954
来自专栏北京马哥教育

Shell常用命令总结

? 作者 | 天才白痴梦 来源 | 博客园 ? 豌豆贴心提醒,本文阅读时间5分钟,文末有秘密! 1 ls命令:列出文件 ls -la 列出当前目录下的...

4257

扫码关注云+社区