我们可以在MySQL 5.0复制中做些什么来解决带宽问题?

时间:2011-06-01 18:39:22

标签: mysql database-replication

我正在开发一个在客户端PC(Win)上运行的应用程序,它配置了一个MySQL服务器5.1实例,它将作为远程主服务器的只读从属服务器。远程主服务器有几十个模式,但我每个客户端只需要一个模式,所以我在my.ini中提供 replication-do-db 设置,只复制客户端需要的模式。复制工作正常,但是当我们的客户进入世界上只能通过3G无线接入互联网的地区时,他们会迅速超出数据计划限制并遇到昂贵的问题。

据我了解,MySQL将所有模式的所有事务写入单个binlog文件,这意味着每个客户端必须下载在master上的每个模式上执行的所有事务,然后一旦下载,就应用数据库过滤器客户端的my.ini文件中的 replication-do-db 设置。

为了最大限度地降低这种低效率,我采用了 slave_compressed_protocol = 1 设置,这似乎将传输数据减少了50%,但仍然导致我们的客户快速超出其数据限制架起3G账单

我无法想象我是唯一一个面对此问题的人,所以我相信我会通过设置x = y获得大量关于如何实现这一目标的答案。但是,我找不到任何关于这种设置的文档,也没有建议的方法。

到目前为止,我想到了一个可能的解决方案,请提供反馈或备用路线:


  1. 为每个架构设置一个“代理”从站(在不同的盒子上,或者与不同的MySQL实例/端口相同的盒子)
  2. 将代理服务器slave配置为replicate-do-db,只配置客户端希望复制的一个数据库。
  3. 将客户端的MySQL实例配置为适当代理从属的从属。
  4. 应该导致客户端仅提取其架构的binlog数据。缺点(据我所知),它大大增加了我们设置的复杂性,可能使它更脆弱。

    思考?这种方法是否有效?

    注意,我们在RedHat上运行MySQL 5.0服务器,但如果它产生解决方案,我们可以升级到5.5。

2 个答案:

答案 0 :(得分:2)

我已经在DBA Stack Exchange中解决了这个问题:https://dba.stackexchange.com/questions/3106/what-can-we-do-in-mysql-5-0-replication-to-address-bandwidth-concerns/3107#3107

我不想在Stack Exchange中加倍。主持人,请关闭这个!!!

答案 1 :(得分:0)

两个建议

1。)尝试使用--replicate-do-table选项并仅指定所需的表

2。)尝试使用--replicate-wild-do-table = name ..如果您的表具有唯一名称,您应该能够以这种方式过滤所有表

MySQL docs on table replication