请问 mysql 数据实时复制到 postgresql 里面 如何实现最好呀

2015-07-01 18:03:37 +08:00
 qq2549112

mysql 只读权限
postgresql 可写可读

mysql里面有个表
字段如下:
orderID<int>,itemID<int>,info<text>,lastUpdate<datetime>
其中lastUpdate是这个记录的最后修改时间
每个记录有可能随时被修改,随即这个记录的lastUpdate会更新

postgresql字段如下:
orderID<int>,itemID<int>,info<jsonb>,lastUpdate<datetime>

postgresql 和mysql 字段都对应,只是字段类型有些不同 ,比如info这个字段,在mysql里面字段类型是text,而在postgresql里面字段类型是jsonb

现在想让postgresql保持和mysql数据一致
当mysql里面变化,也要让postgresql里面变化, 可接受的延迟是10秒左右

请问大家,有什么好的方案吗

有现成的轮子吗?如果没有的话 用python来写,这个东东的大概思路该如何弄呢 多谢

5429 次点击
所在节点    问与答
22 条回复
qq2549112
2015-07-01 18:22:58 +08:00
求大神指点一二
hging
2015-07-01 18:35:31 +08:00
...mysql只读为什么会有变化.
qq2549112
2015-07-01 18:53:52 +08:00
@hging 我的帐号是只读权限 没有给我写的权限,其他业务有写的权限
choury
2015-07-01 19:00:20 +08:00
你可以看下mysql的主从复制协议,然后接收mysql的binlog,然后自己解析……不过我感觉这个工作量有点大,你看有没有人干过这事吧
Septembers
2015-07-01 20:34:01 +08:00
gamexg
2015-07-01 20:38:20 +08:00
有 lastUpdate 字段,可接受10秒延时,直接定时获取最近更新的不就完了?
jiaojing
2015-07-01 20:46:02 +08:00
就是个etl吧
看看Kettle之类的行不行
cevincheung
2015-07-01 21:02:08 +08:00
postgresql有dblink
rming
2015-07-01 21:54:44 +08:00
qq2549112
2015-07-01 22:01:03 +08:00
@choury 谢谢,mysql 我只有只读权限 所以 无法在上面 安装 binlog
qq2549112
2015-07-01 22:02:25 +08:00
@Septembers 谢谢 SymmetricDS 好像不太适合我,这个东西好复杂,我想让 我的数据每隔1-10秒,postgresql 就和mysql保持一次更新同步,保证2个数据库里面的信息一致
qq2549112
2015-07-01 22:02:47 +08:00
@gamexg 简单的说就是这个意思, 就是我太菜了,不知道如何实现细节
qq2549112
2015-07-01 22:03:00 +08:00
@jiaojing 不是etl 谢谢
qq2549112
2015-07-01 22:03:22 +08:00
@cevincheung dblink 我用的rds 无法安装软件 谢谢哦
Septembers
2015-07-01 22:28:21 +08:00
@qq2549112
必须要解决"数据发现"的问题

被动发现比较难实现实时一致
而且会给主数据库带来一定的负担

除非主动发现、思路如下:
可以考虑向上司申请建立个 从库
然后写个工具分析 从库 的binlog提取数据到PostgreSQL

(另外从库还可以作为主库的备份,存在
qq2549112
2015-07-01 22:48:11 +08:00
@Septembers 非常感谢您的回答

我分别用的阿里云的 mysql rds 和 postgresql rds

mysql rds 是别人提供给了我 一个 [只读权限] 的 帐号密码
postgresql rds 是我自己购买的


之前我自己写过一个python脚本,5秒同步一次 [首次很慢,因为要拉取历史数据,之后5秒一次没有问题]
目前不用担心给主数据库带来负担,并且数据量并不是特别大,
所以 不用担心给mysql rds [主数据库] 增加负担


关于您说的binlog,因为是rds,所以binlog这个方案实现起来 似乎有点麻烦

所以 可能我还是得用以前的方法

用python 去 mysql [发现数据] 然后 再插入到 新的postgresql里面

然后每隔 几秒 就去 [发现] 一次
msg7086
2015-07-01 23:33:45 +08:00
如果数据修改端自己能控制的话,用mysql proxy之类的玩意插一个代理。
不能的话当然只能不停刷了。
「首次」其实也可以分批拉的,按照时间排序然后每次limit一下数量就好了。
cevincheung
2015-07-02 02:01:12 +08:00
@qq2549112 阿里云的RDS For Postgresql是支持dblink的
qq2549112
2015-07-02 11:54:14 +08:00
@cevincheung 谢谢, 我网上搜了下 dklink 好像这个只是 创建一个链接, 数据还是在原始的mysql里, 但这样的话 就无法使用postgresql的某写特性了 比如jsonb特性

所以我像把数据 直接 增量同步到 postgresql里面
cevincheung
2015-07-02 23:22:13 +08:00
@qq2549112 那就只能试试触发器了或者自己解析binlog

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/202551

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX