我正在考虑设置我们的 mysql 数据库的复制,以便能够在我们的每个分支机构中拥有本地从属服务器,同时在主办公室拥有主服务器以提高我们分支机构的应用程序性能(显着)。
数据库本身并没有那么大(<1gb),但我想知道;考虑到 200-300 条记录更新/分钟的最高值:复制速度有多快?(假设,首先,一个 5mb 的通用 dsl 连接,必要时更快 - 尽量保持成本尽可能低,但有更多的钱)
整个表是批量复制的吗?复制是否按需完成,因为表中的每条记录都被更新(从文档中,我想我看到它是可配置的)?
笔记:
- 我正在考虑 1 个主设备,2 个从设备(现在是 2 个分支机构)设置,就像这里的文档一样,除了它是一个应用程序,而不是一个 Web 客户端
- 在主节点上完成的任何更新都需要在 10 分钟内复制到其他从节点。
- 所有这一切都假设我可以让我们的 ORM (DevExpress XPO) 对从从站读取和向主站写入的概念感到满意。
MySQL 复制尽可能接近实时发生,受磁盘和网络 I/O 的限制。从服务器打开一个到主服务器的套接字,该套接字保持打开状态。当 master 上发生事务时,它会记录在 binlog 中,并简单地在 slave(s) 上重放。如果 master 和 slave 之间的 socket 中断,则在下一次连接成功时为 slave 重放 binlog。
多主复制做同样的事情,但在两个方向。
一些基本计算将帮助您更好地确定您的带宽需求。
Average transaction size * number of slaves * updates/minute = bandwidth needed
希望这可以帮助。
MySQL 中的复制非常快地将数据获取到从属服务器(比您
UPDATE
在主服务器上运行并切换到另一个窗口以SELECT
在从服务器上运行 a 更快,如果(并且仅当)网络连接都已启动并且一切运行正常。对于常规小型查询的一般情况,任何 DSL 类连接都应该没问题,但是大型插入/更新查询可能需要一些时间来复制,并在复制堵塞的情况下重新同步(并且 MySQL 很容易发生不幸的是,这些)将需要一段时间(再次从主数据库复制整个数据库)。有一些技巧可以限制重新同步对您的主服务器的影响,例如将您的 MySQL 放在 LVM 上,这样您就可以非常快速地锁定/快照并将快照内容重新同步到从服务器,但最终重新同步会很糟糕。从属端的复制由两个独立的线程处理。
复制延迟受 IO 限制,首先是从库上的 IO 应用中继日志中的事务(可能涉及复杂的 SQL 查询),其次是主库上的 IO 读取它的 binlog 并将其传输到每个从库。
MySQL 复制增加了读取查询容量,但不会增加查询写入性能,这取决于 IO 可以刷新到主服务器和从服务器上的 binlog 的速度