MYSQL 主从作用大致分为数据备份和负载均衡两类
Master 节点, 负责所有的写请求
Slave 节点, 负责大部分的读请求;
MySQL 的主从复制: 异步单线程.
实现的具体逻辑方法:
Master 上 1 个 IO 线程, 负责向 Slave 传输 binary log(binlog)
Slave 上 2 个线程: IO 线程和执行 SQL 的线程, 其中:
IO 线程: 将获取的日志信息, 追加到 relay log 上;
执行 SQL 的线程: 检测到 relay log 中内容有更新, 则在 Slave 上执行 sql;
复制类型分为两类, 一种是记录主数据库的操作 sql, 然后在从数据库执行; 另一种是将主数据库中数据的变动记录为 set 语句, 用 set 命令对从数据库进行行的更新;
主从同步出错时, 有两种方法解决
解决方法一: 跳过一步错误, 继续进行同步
- msyql> stop slave;
- msyql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
- msyql> start slave;
方法二: 重做主从
- msyql> stop slave;
- # 查看主服务器上当前的 bin-log 日志名和偏移量
- msyql> show master status;
- # 然后到从服务器上执行手动同步
4. 对主数据库的操作要注意
不要用系统命令复制或删除表数据文件, 要用 sql 命令进行数据修改与表修改, 创建或者删除, 不然会影响从数据库, 造成主从失败;
5.Mysql 主从复制常见故障及解决方法
http://www.10tiao.com/html/706/201603/403220961/1.html
6. 查看主从延迟的方法
主从延时时间: Master 执行成功, 到 Slave 执行成功, 时间差
show slave status, 通过比较 SQL THREAD 接受 events 时间的时间戳与 IO THREAD 执行事件 events 时间戳的差值 -- 秒数, 来确定 slave 落后于 master 多少
使用 pt-heartbeat 工具
http://f.dataguru.cn/thread-461916-1-1.html
7. 同步复制
主数据库数据写入完毕之后, 在从数据库也将数据写入之后, 主数据库才会向客户端返回数据写入成功
异步复制
主数据库写入之后, 从数据库随后更新, 只要求数据最终一致, 允许延迟存在
8. 主从延迟的影响
主从数据不一致, 灾备系统失效, 负载均衡失效, 降低系统性能
9. 常见的主从延迟原因:
Master 上, 大事务, 耗时长: 优化业务, 拆分为小事务
Master 上, SQL 执行速度慢: 优化索引, 提升索引区分度 (事务内部有查询操作)
Master 上, 批量 DML 操作: 建议延迟至业务低峰期操作
Master 上, 多线程写入频繁, Slave 单线程速度跟不上: 提升 Slave 硬件性能, 借助中间件, 改善主从复制的单线程模式
来源: http://www.bubuko.com/infodetail-2605930.html