请问 mysql 数据实时复制到 postgresql 里面 如何实现最好呀 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
qq2549112
V2EX    问与答

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

  •  
  •   qq2549112 2015-07-01 18:03:37 +08:00 6088 次点击
    这是一个创建于 3762 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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来写,这个东东的大概思路该如何弄呢 多谢

    第 1 条附言    2015-07-03 14:13:01 +08:00
    结贴

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

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

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

    (另外从库还可以作为主库的备份,存在
    qq2549112
        16
    qq2549112  
    OP
       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
        17
    msg7086  
       2015-07-01 23:33:45 +08:00   1
    如果数据修改端自己能控制的话,用mysql proxy之类的玩意插一个代理。
    不能的话当然只能不停刷了。
    「首次」其实也可以分批拉的,按照时间排序然后每次limit一下数量就好了。
    cevincheung
        18
    cevincheung  
       2015-07-02 02:01:12 +08:00   1
    @qq2549112 阿里云的RDS For Postgresql是支持dblink的
    qq2549112
        19
    qq2549112  
    OP
       2015-07-02 11:54:14 +08:00
    @cevincheung 谢谢, 我网上搜了下 dklink 好像这个只是 创建一个链接, 数据还是在原始的mysql里, 但这样的话 就无法使用postgresql的某写特性了 比如jsonb特性

    所以我像把数据 直接 增量同步到 postgresql里面
    cevincheung
        20
    cevincheung  
       2015-07-02 23:22:13 +08:00   1
    @qq2549112 那就只能试试触发器了或者自己解析binlog
    dhysum
        21
    dhysum  
       2017-03-06 10:23:40 +08:00
    Chenamy2017
        22
    Chenamy2017  
       2018-11-22 17:40:17 +08:00
    楼主问题是否解决了?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2510 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 11:48 PVG 19:48 LAX 04:48 JFK 07:48
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86