我正在寻找如何提高一个mysql奴隶的复制速度的指针。 正常生产速度足够快,但由于某种原因,需要很长时间才能赶上。 (如果服务器被closures或复制停止了几个小时等)
一些数据:
可以做些什么来提高速度?
(是的,改善硬件是一种select,但我们希望确保在花费大量资金之前检查其他选项)
编辑:
一些数据回应@ 3molo问题:
如果瓶颈是磁盘(6磁盘RAID 10设置)除了增加RAID还有其他的select,或者我们必须去?
在赶上的时候写下这些会很有趣:
使用多less带宽
CPU利用率(特别是I / O等)
内存使用率
为了响应关于I / O等待的新信息, 对于innodb可以做很多事情,看看。 我从mysqlperformanceblog学到了很多东西。 这里有一些提示:
innodb_flush_method = O_DIRECT
“避免双重缓冲,减less交换压力,在大多数情况下,这个设置可以提高性能,但是如果没有电池备份RAIDcaching,那么写入IO可能会受到影响。
的innodb_flush_log_at_trx_commit = 2
“如果你不关心ACID,并且在完全OS崩溃的情况下可以放松最后一两秒的事务,那么设置这个值就会产生很大的影响,尤其是对于很多短的写事务来说。
那些人为我们做了WONDERS,但是缺点是你可能会丢失一些书面数据。 这是因为不是写每个logging(刷新到磁盘),而是每秒刷新一次。
你可以阅读更多: http : //www.mysqlperformanceblog.com/2007/11/01/innodb-performance-optimization-basics/
MySQL复制速度很快,速度非常快。 它的主要限制是链路层,然后是其余的硬件。
在你的情况下,恢复复制可能会很快显示二进制日志或slave IO的赶上。 如果没有,请先改善您的链接。 否则,如果是SQL,那么服务器的物理限制将会根据负载的types而有所不同,在磁盘IO,RAM和CPU之间会有所不同。
I.为信息文件添加小而简单的IO优化
sync_relay_log_info = 5000000
sync_master_info = 5000000
II。 使用multithreading(可能会导致更糟糕的结果)
slave_parallel_workers = 10
log_slave_updates = 1
slave_preserve_commit_order = 1
slave_parallel_type = LOGICAL_CLOCK
slave_pending_jobs_size_max = 1047527424#应该不小于你的max_allowed_packet
III。 如果您有带宽问题,请尝试使用压缩
slave_compressed_protocol = 1
IV。 对于某些环境来说,重要的是 – 中继日志文件上有很大的IO。
它甚至使一些SSD驱动器的问题,并导致它是一个硬盘的杀手。
所以,我们把所有的内存移动到内存中,并获得几倍的性能提升。
例如在/ tmp目录
编辑/ etc / fstab有类似的东西:
tmpfs / tmp tmpfs defaults,noatime,nodiratime,nosuid,nodev,mode = 1777,size = 1500M 0 0
并初始化它
mount -o remount / tmp
relay_log_space_limit = 500M#所有日志文件的大小限制,以保存您的小型tmpfs驱动器
max_relay_log_size = 100M; #需要至lessless于空间限制的两倍
relay-log = / tmp / YOUR_HOSTNAME-relay-bin
master-info-file = /tmp/master.info
relay-log-info-file = /tmp/relay-log.info
在添加新path语句之前,清除当前中继日志的大小并调整其大小
关机从机
将YOUR_HOSTNAME-relay-bin,master.info,relay-log.info从当前位置(默认/ var / lib / mysql)移动到/ tmp
由于进一步的重新启动和粗鲁的方法,以避免错误后,你可能会但可能不想长期使用这种方式(如slave-skip-errors = 1062,1032,1396)
但
这是一个快速追赶离散案件的方法
有时候这是缺乏资源的唯一途径