提高MySql复制速度

edo*_*ian 6 mysql mysql-replication

我正在寻找有关如何提高 mysql 从站复制速度的指针。它对于正常生产来说足够快,但如果由于某种原因落后,则需要很长时间才能赶上。(如果服务器关闭或复制停止了几个小时等)

一些数据:

  • 数据库在2TB左右,每天写的binlog在500GB左右。
  • 对于正常生产使用,从延迟保持在 0 或 1 秒
  • 在尝试追赶时,它以每秒 1 秒左右的速度接近掌握。(所以赶上10个小时需要10个小时)
  • Slave 仅作为故障转移机器重放数据,没有针对它运行的选择,如果他死了,它应该能够替换主人(一切我们都很慢,但没关系)
  • 服务器在同一个物理网络中

可以做些什么来提高这个速度?

(是的,改进硬件是一种选择,但我们希望确保在花费大量资金之前检查过其他选项)

编辑:

回复@3molo 问题的一些数据:

  • 追赶时的带宽使用:~2MB/s 到 10MB/s,我猜没问题。
  • CPU 使用率低,io 等待时间长(slave 只有 2 个 CPU,大约 70% 到 85% 的 io 等待而追赶。所以这意味着瓶颈在磁盘上?
  • Ram 使用量为 1.5GB 使用 4GB(其余为“缓存”)。所以我看不到那里有多大潜力?(因为它只是写负载(?))

如果瓶颈是磁盘(6 个磁盘 raid 10 设置),除了增加 raid 之外还有其他选择吗?还是我们必须这样做?

3mo*_*olo 6

在追赶时写下来会很有趣:

  • 使用了多少带宽

  • cpu利用率多少(尤其是i/o等待)

  • 内存使用

响应新的 i/o wait 信息高;for innodb 可以做的很多,看一看。我从 mysqlperformanceblog 学到了很多东西。这里有一些提示:

innodb_flush_method=O_DIRECT

“避免双缓冲并减少交换压力,在大多数情况下,此设置可提高性能。但如果您没有电池备份 RAID 缓存,请小心,因为写入 IO 可能会受到影响。”

innodb_flush_log_at_trx_commit=2

“如果您不关心 ACID,并且在操作系统完全崩溃的情况下可能会在最后一两秒内丢失事务,那么请设置此值。它可以产生巨大的影响,尤其是对许多短写入事务。”

这些对我们来说是奇迹,但缺点是您可能会丢失一秒钟的写入数据。这是因为不是写入(刷新到磁盘)每条记录,而是每秒刷新一次。

您可以在以下位置阅读更多信息:http : //www.mysqlperformanceblog.com/2007/11/01/innodb-performance-optimization-basics/