寻求:MySQL中dblink的替代方案

我们知道,在 oracle中,可以建立 dblink 以解决 不同 数据库(异域)之间的数据交互问题,在MySQL中有类似的功能吗?
希望达到的目的:在 MySQL 的存储过程中,连接远程数据库,并能做到对远程数据库的 增删改查 操作?
已想到的替代方案:建立辅助数据库,并做 repication,但似乎这样把问题复杂了,有没有更好的办法?请示之。
[b]问题补充:[/b]
补充:
因为需要在已有数据库上 抽取 部分数据,放到另一台机器上做备份,想采用存储过程完成,但操纵远程数据库就成了阻碍。
不考虑效率,用java做一次处理是可以,但如果定时抽取、备份就显得困难多了,那简单的问:备份 已知数据库 的 部分数据 到 另一台 机器上,如何实现?
:)
[b]问题补充:[/b]
kimmking说的导出再导入的方案也想过,因为数据量到时比较大,
导出后导入时,之前导入的数据怎么办?要覆盖就划不来了。
备份希望能能是 增量备份,而据我所知,MySQL可以从日志中做增量备份,但又没办法在日志级别做数据过滤呢?或者 再深思一下,谢谢两位关注!
[b]问题补充:[/b]
LucasLee说用quartz做job scheduling,这个感觉可行,但又两点需要再思考一下,
1. 能不能做到增量备份(因为数据库中的表结构并不是每个表都有时间戳,所以从表中确定每天备份的范围是不大可能的,难不成要覆盖之前备份好的数据?)
2. 数据量大的情况下,使用java去处理的效率还能接受吗?(虽然是备份,但效率也是注重的,有无相关经验,请示之)
谢谢二位关注,考虑一下我自己的替代方案:
在主数据库(M1)上另建 一个 表结构完全一样的 辅助数据库(M2),远程数据库为 M3,用 存储过程 把数据 定时写到 M2 中,然后 M2 和 M3 做数据同步,尽可畅所欲言 :D
[b]问题补充:[/b]
LucasLee问为什么写程序?是因为要抽取原始数据库的部分数据做备份,如果全部备份的话 直接选择复制 就没什么问题了。
kimmking分析的对,所以也正在想办法,这个方法难点在于 增量抽取备份 不知如何实现,我提出对每张表写 trigger,每次增、删、改时,同步操作 M2,但这样会影响 M1 的更新效率。
[b]问题补充:[/b]
感谢kimmking和LucasLee的关注,这里做总结,最后我们定的方案是这样的,远程数据库和主数据库做 repication,然后定时 删除数据(逆向,不抽取数据,而是在已有数据的基础上删除数据不要的),这样 我的问题就避免了。3Q :)

7个回答

这个方法可行。
缺点:
1、数据量大的话,M1->M2的压力大。
2、数据量小的话,M2是鸡肋。


另外可以看看:MySQL同步复制
http://www.iteye.com/wiki/topic/335061

一个变态方案:
在外部用java配置一个远程的mysql数据连接。用java实现crud,
然后做成本地这个mysql的java扩展函数,在存储过程中调用这个函数。

据我所知,似乎mysql没有dblink这样的功能。
你还是不要用存储过程完成这种功能,用java读写两个数据库好了。

写个程序,定时任务或是调度,从mysql服务器1增量导出数据,导入到mysql服务器2

用QAURTZ可以实现定时调度。不过得要java进程在后台运行。
简单点,可以用linux cron或windows的任务计划,启动一个java程序来实现(用ant启动java更方便)。

你就是希望做备份而已?
那还是用MySQL自带的复制功能好了,一点不复杂,设置一下就行了,
干嘛要写程序呢。

其实觉得去掉M2,直接同步M1到M3,使用mysql同步复制比较好。

至于需要筛选,这个可以由业务系统自己做。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问