第8课 MySQL主从复制
第1章 企业高可用性标准
1.1 全年无故障率(非计划内故障停机)
1 | 99.9% ----> 0.001*365*24*60=525.6 min |
1.2 高可用架构方案
1 | 负载均衡:有一定的高可用性 |
第2章 主从复制
2.1 简介
1 | 1.1. 基于二进制日志复制的 |
2.2 主从复制前提(搭建主从的过程)
1 | ## 2.1 两台以上mysql实例 ,server_id,server_uuid不同 |
第3章 主从复制搭建
3.1 准备两个数据库实例(3307(主),3308(从))
1 | 略 |
3.2 修改主库my.cnf 开启二进制日志功能
1 | [root@db01 ~]# vim /data/3307/my.cnf |
3.3 启动所有节点
1 | systemctl start mysqld3307 |
3.4 主库创建复制用户(3307 主库)
1 | # mysql -S /data/3307/mysql.sock |
3.5 备份主库数据恢复到从库
1 | [root@db01 ~]# mysqldump -uroot -S /data/3307/mysql.sock -A --master-data=2 --single-transaction -R -E --triggers >/tmp/full.sql |
3.6 配置从库
1 | [root@db01 ~]# mysql -S /data/3308/mysql.sock |
3.7 开启主从专用线程
1 | start slave ; |
3.8 检查状态
1 | mysql> show slave status \G |
3.9 如果搭建报错,解决方法
1 | stop slave ; |
第4章 主从复制的原理
4.1 主从中设置到的文件和线程
4.1.1 线程
1 | 主: |
4.1.2 文件
1 | 主: |
4.2 主从复制原理
主从复制原理描述:
1 | (1) 从库 执行change master to语句 ,将以下信息保存至master.info文件中 |
第5章 主从故障监控\分析\处理
5.1 线程相关监控
5.1.1 主库信息监控(master.info)
1 | mysql> show slave status \G |
5.1.2 从库relay-log的应用信息(relay-log.info)
1 | (2) 从库relay-log的应用信息(relay-log.info) |
5.1.3 从库线程工作状态
1 | (3) 从库线程工作状态 |
5.1.4 过滤复制有关信息
1 | Replicate_Do_DB: |
5.1.5 主从延时时间
1 | Seconds_Behind_Master: 0 |
5.1.6 延时从库的状态
1 | SQL_Delay: 0 |
5.1.7 GTID复制有关
1 | Retrieved_Gtid_Set: |
5.2 主从复制故障分析
5.2.1 IO线程故障
(1) 连接主库
1 | (1) 连接主库 |
主库连接数上线,或者是主库太繁忙
1 | show slave staus \G |
(2) 请求二进制日志 (最常见报错)
1 | (2) 请求日志 (最常见报错) |
5.2.2 SQL 线程故障
SQL线程功能:
1 | (1)读写relay-log.info |
导致SQL线程故障原因分析:
1 | 回放日志 (为什么SQL语句执行失败?) |
处理方法(以从库为核心的处理方案):
1 | 方法一: |
一劳永逸的方法:
1 | 处理建议: |
第6章 主从延时
6.1 监控
1 | (1) 有没有延时 |
6.2 主从延时原因分析
1 | 主库做了修改操作,从库比较长时间才能追上. |
6.2.1 外在因素
1 | 网络 |
6.2.2 主库
1 | (1) 二进制日志写入不及时 |
6.2.3 从库
1 | SQL线程导致的主从延时 |
第7章 过滤复制
7.1 主库 (了解)
1 | mysql> show master status; |
7.2 从库
1 | 在SQL_T回放日志,选择部分日志回放 |
7.3 案例
1 | 从库: |
第8章 延时从库
8.1 介绍
1 | 是我们认为配置的一种特殊从库.人为配置从库和主库延时N小时. |
8.2 为什么要有延时从
1 | 数据库故障? |
8.3 配置延时从库
1 | mysql> STOP SLAVE; -- 先停止同步 |
8.4 模拟故障及恢复
(1) 模拟数据(3307)
1 | create database oss charset utf8mb4; |
(2) 停线程(3308)
1 | mysql> STOP SLAVE; -- 都停了 |
(3) 截取relaylog
1 | #起点: |
(4)截取日志
1 | [root@db01 data]# mysqlbinlog --start-position=320 --stop-position=1401 db01-relay-bin.000002 >/tmp/relay.sql |
(5)恢复
1 | mysql> set sql_log_bin=0; |
(6)从库身份解除
1 | >stop slave; |
第9章 半同步
1 | 解决主从数据一致性问题 |
9.1 半同步复制工作原理的变化
1 | 1. 主库执行新的事务,commit时,更新 show master status\G ,触发一个信号给 |
9.2 配置半同步复制
1 | 加载插件 |
第10章 GTID复制
10.1 GTID介绍
1 | GTID(Global Transaction ID)是对于一个已提交事务的唯一编号,并且是一个全局(主从复制)唯一的编号。 |
10.2 GTID核心参数
1 | gtid-mode=on |
10.3 GTID复制配置过程
10.3.1 清理环境
1 | pkill mysqld |
10.3.2 准备配置文件
1 | 主库db01: |
10.3.3 初始化数据
1 | mysqld --initialize-insecure --user=mysql --basedir=/data/mysql --datadir=/data/mysql/data |
10.3.4 启动数据库
1 | systemctl start mysqld |
10.3.5 构建主从
1 | master:51 |
10.3.6 GTID 从库误写入操作处理
1 | 查看监控信息: |
10.3.7 GTID 复制和普通复制的区别
1 | CHANGE MASTER TO |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 WF's Blog!
评论