我正在开发一个在客户端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获得大量关于如何实现这一目标的答案。但是,我找不到任何关于这种设置的文档,也没有建议的方法。
到目前为止,我想到了一个可能的解决方案,请提供反馈或备用路线:
此应该导致客户端仅提取其架构的binlog数据。缺点(据我所知),它大大增加了我们设置的复杂性,可能使它更脆弱。
思考?这种方法是否有效?
注意,我们在RedHat上运行MySQL 5.0服务器,但如果它产生解决方案,我们可以升级到5.5。
答案 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 ..如果您的表具有唯一名称,您应该能够以这种方式过滤所有表