我正在开发一个在客户端 PC (Win) 上运行的应用程序,它配置了一个 MySQL 服务器 5.1 实例,它将充当远程主站的只读从站。远程主服务器有几十个模式,但我每个客户端只需要一个,所以我在 my.ini 中提供了replication-do-db设置以仅复制客户端需要的模式。复制有效,但是当我们的客户进入只能通过 3G 无线网络访问互联网的地区时,他们会迅速超出数据计划限制并遇到昂贵的问题。
据我了解,MySQL 将所有模式的所有事务写入单个 binlog 文件,这意味着每个客户端必须下载在主服务器上的每个模式上执行的所有事务,然后在下载后,对每个复制应用数据库过滤器 -客户端的 my.ini 文件中的do-db设置。
为了最大限度地减少这种低效率,我采用了slave_compressed_protocol = 1设置,这似乎将传输的数据减少了 50%,但仍然导致我们的客户快速超过他们的数据限制,从而增加了 3G 账单。
我无法想象我是唯一面临这个问题的人,所以我相信我会通过设置 x = y 来获得关于如何实现这一目标的大量答案。但是,我找不到有关此类设置的任何文档,也找不到推荐的方法。
到目前为止,这是我对可能解决方案的想法,请提供反馈或替代路线:
这应该导致客户端仅提取其架构的二进制日志数据。缺点(据我所知)是它极大地增加了我们设置的复杂性,可能使其更加脆弱。
想法?这种方法甚至会奏效吗?
请注意,我们在 RedHat 上运行 MySQL 5.0 服务器,但如果它产生解决方案,我们可以升级到 5.5。
我们正在实施在 MySQL 上运行的新 CMS (Drupal 6.x)。我们有两个数据中心——主要的和次要的——它们之间的延迟是已知的。我们不确定我们将运行哪个版本的 MySQL……社区或企业,但这是一个待定的时间。看起来我们将运行 InnoDB 引擎,操作系统将是 RedHat EL 5.5 主服务器将处于活动状态,而辅助服务器将处于被动或热备用状态。
我想在 MySQL 中跨两个数据中心实现复制、高可用性和自动故障转移。
在故障转移到辅助服务器后,当我们故障恢复到主服务器时,我们希望将数据从辅助数据库快速完整地同步到主数据库,以便我们可以继续提供来自主服务器的内容。
我很想知道可以使用哪些技术/工具/最佳实践来解决/解决这些问题。此外,任何陷阱或啊哈时刻也将不胜感激。我已经阅读了 MySQL 复制、集群和一些 3rd 方工具,如 Tungsten 和 Dolphinics,但我不确定什么是最好的行动方案。
感谢您的时间!
知识管理
原始问题: 我有多个服务器都需要充当主服务器,好像一个服务器出现故障,下一个服务器启动并接管。我只是想知道复制的最佳方式是什么。所有服务器都在不同的数据中心。
问题
更新的问题: 我们在世界各地的不同数据中心都有服务器,每台服务器都需要访问通常位于本地主机上的数据库。
每台服务器都需要能够更新数据库,每台服务器几乎都是其他服务器的镜像。这些都通过一个服务器(超级主机)保持同步,所有服务器都可以与之通信。
所有的服务器只和supermaster 通信,它们不知道任何其他服务器。超级主机本身就是其他服务器的镜像,只是附加了同步所有服务器的服务。
有时supermaster因为各种原因离线;发生这种情况时,其他服务器将照常进行,包括读取和写入数据。当超级主机恢复时,它开始同步过程并整理并解决其他服务器之间的冲突,完成后所有服务器都有数据的镜像并且全部“同步”。
因此,在对这个问题进行更多思考之后,我的问题是;
任何帮助深表感谢。
我们正在为我们公司开发一种新的系统架构。我们有一个 HPC,它在我们自己的数据中心运行,我们正在规划我们的前端和 Amazon Web Service 上的后备系统。
系统架构:

先决条件:
题:
在这种设置中复制 MySQL 数据库的最佳解决方案是什么?
我试图了解一个相当大的表的“热数据”部分的大小,我想知道这是否可以直接在 mysql 中完成。我知道使用 percona 版本的 mysql,我可以访问诸如“每个表访问的行数”之类的数字,但我实际上需要每行这些数据(例如,id 为 1 的行被读取 200 次,行id 2 被读取 300 次,其中 id 是自动增量列)
raid 5 适合安装 mysql 吗?
让我进一步解释我的应用程序。我的应用程序是一个套接字编程,它将与 gps 设备连接以接收 gps 字符串,然后进行进一步处理。套接字编程将在另一台服务器中,而 db 将在另一台服务器中。因此,在进一步处理期间,它将从数据库查询。所以在这里我猜会有很多 i/o 仪式。在进一步的处理过程中,最少有 5 个选择,插入最少 1 个,但有时它甚至可能最少 4 个或更多,还有一些更新。希望我现在更清楚了。
我找到了很多关于设置 MySQL 复制的好材料,但没有太多关于在发生故障时该怎么做。了解我可以达到的弹性程度是设计我的系统的基础,所以我不是在这里寻找“如何”管理建议,而是想了解可实现的语义。
因此,为了简化我的要求,我有一个应用程序,除非它可以读取数据库,否则无法运行。有两种场景:一是常见用法,一分钟请求很多,读数据库返回一个答案。其次,不那么频繁地用新数据更新数据库。更新延迟几分钟是可以接受的。
所以我的第一个想法是:Master->Slave
现在读者可以使用 Master 或 Slave,如果我们失去 Master 一段时间,读者可以对抗 Slave。
听起来很简单。但是......更严重的问题呢,如何手动恢复?多久时间?什么数据丢失?
以这个场景为例:Master->Slave。我们知道从站可能与主站有点不同步。现在假设我们失去了主人,这意味着它不会很快回来。
现在大概我们需要 Slave 成为可写的 Master,我们需要一个新的 Slave。
具体问题:
我有 3 台 Mysql 服务器要复制:两台(包括主服务器)是本地的,一台是远程的。让我们调用我的主服务器 A、辅助服务器 B 和远程开发服务器 C。
作为一种可能的配置,我开始阅读有关环形配置的信息。有些评论似乎看不起这种拓扑。
我的问题是,鉴于 Mysql 5.1 的当前状态,哪些类型的主-主拓扑是可取的并且已知是容错的?
一般来说,戒指真的是个坏主意吗?
就我而言,A 和 B 位于预计不会出现任何网络故障的 Intranet 上,因此 B 理论上可以用作 A 的故障转移。大多数时候,我在 C 上工作,这是一台远程机器,有时在到达 A 和 B 时网络出现问题。目前没有任何数据是关键的(即,只要它们最终被镜像,就可以),但我希望 A 和 B 能够被紧密地镜像——比如轻负载时 5 秒的时间范围内(鉴于我的初步测试,我认为这应该是一个简单的要求)。
我目前有 B 作为 A 的 Slave,但我期待在 A、B 和 C 上成为 Master-Master。
mysql ×8
replication ×6
architecture ×1
clustering ×1
mysql-5.0 ×1
mysql-5.1 ×1
mysql-5.5 ×1
statistics ×1