MySQL复制有多快?


19

我正在考虑设置mysql db的复制,以便能够在每个分支机构中拥有本地从属,而在主办公室中拥有主从属,以提高(显着)分支机构中的应用程序性能。

数据库本身不是那么大(<1gb),但是我想知道。考虑200/300条记录的更新/分钟顶部:复制速度有多快?(假设,首先是一个5MB的通用DSL连接,必要时要更快-试图将成本保持在最低水平,但花更多的钱就可以了)

整个表是否批量复制?当表中的每个记录都被更新时,复制是否按需完成(从文档中,我认为我可以看到它是可配置的)?

笔记:

  • 我在想像这里的文档中那样设置1个主机,2个从属(现在有2个分支机构)设置,只是它是一个应用程序,而不是Web客户端
  • 在主服务器上完成的所有更新都需要在不到10分钟的时间内复制到其他从服务器。
  • 所有这些都假设我可以使我们的ORM(DevExpress XPO)对从从设备读取并向主设备写入的概念感到满意。

Answers:


21

由于磁盘和网络I / O的限制,MySQL复制尽可能接近实时进行。从站打开主机的套接字,该套接字保持打开状态。当在主服务器上发生事务时,该事务将记录在binlog中,并仅在从服务器上重播。如果主站和从站之间的套接字中断,则在下一次成功连接后,将为从站重播binlog。

多主复制执行相同的操作,但是双向。

一些基本的计算将帮助您更好地确定带宽需求。

Average transaction size * number of slaves * updates/minute = bandwidth needed

希望这可以帮助。


4

从属端的复制由两个独立的线程处理。

  • 连接到主服务器的日志读取器进程接收每个数据修改语句,并将其写入中继日志。
  • sql writer进程从中继日志中获取新项目,该提交过程在slaves数据库上提交语句,然后将slave指针移过该语句以指示已接收到查询。

复制延迟受到IO的限制,首先是从数据库上的IO应用中继日志中的事务(可能涉及复杂的SQL查询),其次是受到主服务器上的IO读取二进制日志并将其传输到每个从数据库。

MySQL复制增加了读取查询的容量,但没有增加查询的写入性能,这是以将IO刷新到主服务器和从服务器上的binlog的速度来控制的


3

在MySQL的复制是非常快速的获取数据的奴隶(比你更快将能够运行UPDATE在主机,并切换到另一个窗口来运行SELECT的奴隶,如果(且仅在)网络连接都建立并且一切运行正常的情况下。对于常规的小型查询,任何DSL类连接都应该很好,但是大型插入/更新查询可能需要一些时间来复制,并且在复制出现填充时需要重新同步(而且MySQL很容易出现不幸的是,这些操作将需要一段时间(再次从主数据库复制整个数据库)。有一些技巧可以限制重新同步对主服务器的影响,例如将MySQL放在LVM上,这样您就可以非常快速地执行锁定/快照操作,并将快照内容同步到从属服务器,但是最终,重新同步会很烂。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.