主从库同步耗时查询

先查看从服务器的状态

1 mysql>SHOW SLAVE STATUS;

如果发现以下两个字段

1 Slave_IO_Running: No
2 Slave_SQL_Running: NO

其中有一个为No,则同步出错,需要恢复。出错信息可以参考Last_Error字段。

一般情况下,在从服务器上执行

1 mysql>stop slave;
2 mysql>start slave;

即可恢复。

如果运行这个之后,依然不能恢复,则可尝试以下方法。

先锁定表,在主服务器上执行

1 mysql>FLUSH TABLES WITH READ LOCK;
2 mysql>SHOW MASTER STATUS;

第一句锁定表,第二句显示主服务器的状态,记下

1 File:
2 Position:

这两个字段的值,再把需要同步的数据库的目录,在主服务器上操作,复制到从服务器

1 scp -r db_1 db_2 root@192.168.1.200:/var/lib/mysql/

这里,把db_1,db_2两个数据库目录,复制到从服务器的MySql数据目录下,复制后,注意权限问题。

完成复制之后,在主服务器上操作,解锁表

1 UNLOCK TABLES;

在从服务器上操作

复制代码
1 STOP SLAVE;
2 
3 CHANGE MASTER TO
4 MASTER_LOG_FILE='mysql-bin.000098',
5 MASTER_LOG_POS=22926865;
6 
7 START SLAVE;
8 
9 SHOW SLAVE STATUS;
复制代码

这里,LOG_FILE与LOG_POS分别对应之前在主服务器上查询出来的File与Position字段。

完成。

其中的CHANGE MASTER TO语句,通常还有以下值,按需选择设置

复制代码
1 CHANGE MASTER TO
2 MASTER_HOST='192.168.1.199', 
3 MASTER_USER='repl', 
4 MASTER_PASSWORD='repl', 
5 MASTER_PORT=3306 
6 MASTER_LOG_FILE='MYSQL-BIN.000098', 
7 MASTER_LOG_POS=22926865, 
8 MASTER_CONNECT_RETRY=30; 
复制代码

参考 :http://www.cnblogs.com/heiing/archive/2012/09/17/2688504.html

             http://zhengdl126.iteye.com/blog/432677

            http://blog.youkuaiyun.com/shootyou/article/details/6237719

              http://ycsk.iteye.com/blog/788501

### MySQL 主从同步延时的原因及解决方案 #### 延时原因分析 主从同步延迟(Replication Lag)是指主服务器和从服务器之间的数据复制存在时间差,导致从服务器的数据落后于主服务器。以下是常见的延时原因: 1. **单线程复制限制** 从服务器读取主服务器的二进制日志(binlog)时,只有一个线程负责处理这些日志。当主服务器有大量并发更新操作时,从服务器可能无法及时处理所有日志,从而导致延迟[^1]。 2. **SQL 执行效率低下** 某些复杂的 SQL 语句在从服务器上执行时间较长,或者需要锁表操作,这会导致后续的 SQL 积压,进一步加重延迟[^1]。 3. **硬件性能差异** 如果从服务器的硬件性能低于主服务器,可能会导致从服务器处理能力不足,从而引发延迟[^1]。 4. **网络延迟** 当主服务器和从服务器位于不同的地理位置或网络环境较差时,网络延迟会增加主从同步时间差[^2]。 5. **半同步复制开销** 半同步复制要求主服务器等待至少一个从服务器接收到并写入 relay log 后才返回结果给客户端。这种机制虽然提高了数据安全性,但也引入了额外的 TCP/IP 往返耗时延迟[^3]。 6. **配置不当** 主服务器配置了高安全性的参数(如 `sync_binlog=1` 和 `innodb_flush_log_at_trx_commit=1`),而从服务器未进行优化调整,可能导致从服务器性能下降[^4]。 --- #### 解决方案 针对上述问题,可以采取以下措施来缓解主从同步延迟: 1. **优化从服务器性能** - 提升从服务器的硬件配置,确保其处理能力能够匹配主服务器的工作负载。 - 调整从服务器的参数配置,例如将 `sync_binlog` 设置为 0 或关闭 binlog,同时将 `innodb_flush_log_at_trx_commit` 设置为 0,以提高 SQL 执行效率[^1]。 2. **多线程复制** 从 MySQL 5.6 开始支持多线程复制(Parallel Replication),可以通过设置 `slave_parallel_workers` 参数启用多线程复制,提升从服务器的处理能力[^2]。 3. **减少主服务器压力** - 使用双从服务器架构,其中一台专门用于备份,另一台用于读操作,降低单个从服务器的负载。 - 实现读写分离,将查询请求分发到多个从服务器,减轻主服务器的压力。 4. **优化 SQL 语句** - 定期分析从服务器上的慢查询日志,优化执行效率低下的 SQL 语句。 - 避免在从服务器上执行锁表操作,减少对其他 SQL 的阻塞。 5. **改善网络环境** - 确保主从服务器位于同一局域网内,减少网络延迟。 - 使用更高带宽的网络连接,提升数据传输速度[^2]。 6. **监控与诊断** - 使用 `SHOW SLAVE STATUS` 命令定期检查主从同步状态,重点关注 `Seconds_Behind_Master` 参数值。 - 如果该值为 `NULL`,表示 IO 线程或 SQL 线程出现故障,需及时排查并修复[^1]。 7. **评估半同步复制的适用性** - 如果业务对实时性和数据一致性要求较高,可继续使用半同步复制,但需权衡其带来的性能开销。 - 对于性能敏感的场景,可以选择异步复制或延迟复制(Delay Replication)。 --- ### 示例代码:启用多线程复制 ```sql -- 设置多线程复制的线程数 SET GLOBAL slave_parallel_workers = 4; -- 查看当前多线程复制的配置 SHOW VARIABLES LIKE 'slave_parallel_workers'; ``` --- ### 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值