【发布时间】:2011-09-06 13:22:24
【问题描述】:
我正在开发一个在客户端 PC (Win) 上运行的应用程序,该 PC 配置了 MySQL 服务器 5.1 实例,该实例将充当远程主机的只读从属。远程主机有几十个模式,但我每个客户端只需要一个,所以我在 my.ini 中提供 replication-do-db 设置,只复制客户端需要的模式。复制是有效的,但是当我们的客户进入世界上只能通过 3G 无线访问互联网的地区时,他们很快就会超过他们的数据计划限制并遇到昂贵的问题。
据我了解,MySQL 将所有模式的所有事务写入单个二进制日志文件,这意味着每个客户端必须下载在主服务器上的每个模式上执行的所有事务,然后一旦下载,应用数据库过滤器根据客户端 my.ini 文件中的 replication-do-db 设置。
为了尽量减少这种低效率,我采用了 slave_compressed_protocol = 1 设置,这似乎将传输的数据减少了 50%,但仍然导致我们的客户快速超过他们的数据限制,从而增加 3G 费用.
我无法想象我是唯一一个面临这个问题的人,所以我相信我会得到很多关于如何通过设置 x = y 来实现这一目标的答案。但是,我找不到这种设置的任何文档,也找不到推荐的方法。
到目前为止,这是我对可能解决方案的想法,请提供反馈或替代路线:
- 为每个模式设置一个“代理”从属设备(在不同的机器上,或者在具有不同 MySQL 实例/端口的同一个机器上)
- 将代理从属服务器配置为仅复制客户端希望复制的一个数据库。
- 将客户端的 MySQL 实例配置为相应代理从站的从站。
这应该导致客户端仅提取其架构的 binlog 数据。不利的一面(据我所知)是它大大增加了我们设置的复杂性,可能使其更加脆弱。
想法?这种方法会奏效吗?
注意,我们在 RedHat 上运行 MySQL 5.0 服务器,但如果它产生解决方案,我们可以升级到 5.5。
【问题讨论】:
-
我建议在dba.stackexchange.com 询问这个问题,真正的数据库专家在那里。
-
@Lyke,你会推荐另一个 DBMS 吗?微软SQL?复制到移动客户端效果很好,只是太繁琐了。
-
谢谢@Johan,我会这样做的。
-
我建议阅读
High performance MySQL second editionoreilly.com/catalog/9780596101718 它有一个非常有趣的章节(第8章IRC)关于复制。 -
再次感谢@Johan。我去拿一份。仅供参考,根据您的建议,我已将其重新发布到 dba.stackexchange.com/questions/3106/…。
标签: mysql database-replication