MySQL 主从复制那些事(一)
本部分主要以理论为主,具体的主从搭建环境,大家可以参考博客其他部分。下面我就给大家数说主从复制那些理论的东西。说的不一定都是正确的,有不同出入的地方,欢迎大家一起交流沟通,以下我把我自己整理出来的主从复制的一些理论部分。
复制的概念
MySQL复制就是一台MySQL服务器(slave)从另一台MySQL服务器(master)进行日志的复制然后再解析日志并应用到自身
复制的应用
第一:是解决宕机带来的数据不一致,因为MySQL复制可以实时备份数据;
第二:是减轻数据库服务器的压力,多台服务器的性能一般比单台要好。但是MySQL复制不适合大数据量,大数据量推荐使用集群。
复制的原理图:

replication涉及到的三个线程
1 master上的 binlog dump(dump线程),即读取master上的binlog,发送到slave上的线程。2 slave上的IO线程:读取slave上的relay log。3 slave上的sql线程:执行IO线程读取的relay log的线程。
复制相关的日志格式,提供3种格式:Row 格式(首先我们的推荐的)。mix 格式(5.7后版本把他忘记吧)statements 格式(传统的复制格式)
set rpl_semi_sync_master_wait_point=AFER_COMMIT
- 至少有一个slave 节点收到binlog 后在返回(IO 线程接收到即可)
- 减少数据丢失风险
- 不能完全避免数据丢失
- 超时后,切换回异步复制

master:set global rpl_semi_sync_master_enabled=ON|OFF;slave:set global rpl_semi_sync_slave_enabled=ON|OFF;
rpl_semi_sync_master | ACTIVE | REPLICATION | semisync_master.so | GPL
- 网络问题,切换到异步复制
- 从库网络,IO 问题导致主库性能下降
- 从库故障 利用备份还原后加入集群中,把主库拖跨
- 复制结构中可以让binlog 备份服务保持增强半同步,如果binlog 备份能如何保持半同步,整个结构安全度会增加很多,另外要考虑复制结构中单库的约束,整个实列的大小:单实例1T左右、SAS盘 Raid10 : 单实例500G以下、单库: 200G。
五:为了增强复制引入了并行复制的概念。
在Master并发commit 事物多时,slave上并发性能越好
为什么要引入多线程的复制,5.5 的 问题,延迟问题非常的严重,5.6 开始版本支持多线程复制,每一个库有一个独立SQL线程进行回放对于有多个库的实列有帮助,对于单实列的库依然是单线程。主从复制,多线程大大的增强了从库的能力, 5.7 版本支持多线程复制,保留基于库的多线程回放,保留基于库的多线程回放,增加根据组提交进行完全的并行复制模式,Enhanced multi-threaded slave.
小结:并发复制:MySQL5.6 的并发复制是基于库级别的,MySQL5.7 的并发复制是基于事物级别(logical Clock)
stop slave sql_thread;
set global salve_parallel_workers=8;
set global slave_paralle_type="LOGICAL_CLOCK";# OR DATABASE
start slave sql_thread
.png)
| 相关的参数 | |||||
| slave_IO_Running | yes | NO 需要关注 | |||
| slave_SQL_Running | yes | NO 需要关注 | |||
| seconds_behind_master | 0 | 大于0 需要关注 | 单纯这个值是不能判定延迟。需要结合其他参数一起看 | ||
| last Errno & last Error | 0 |
- 主从结构其中某个节点异常的重启
- 复制出错,修复后需要安排校验
- 核心库或是核心,每个月为周期全部需要校验一次
- 业务级别校验:记账类业务,基于小时级别校验及每天的整体校验
- DBA 可以利用percona-tools去校验
MySQL 主从复制那些事(一)的更多相关文章
- 分布式数据存储-MySQL主从复制
前言 一.主从复制过程 MySQL的主从复制能力是通过三个线程来实现的,两个在Slave端的I/O和SQL两个线程,还有一个在Master端I/O线程: Binlog dump thread:Mast ...
- MySQL主从复制——主库已有数据的解决方案
在上篇文章中我们介绍了基于Docker的Mysql主从搭建,一主多从的搭建过程就是重复了一主一从的从库配置过程,需要注意的是,要保证主从库my.cnf中server-id的唯一性.搭建完成后,可以在主 ...
- MySQL主从复制以及在本地环境搭建
MySQL主从复制原理: master(主服务器),slave(从服务器) MySQL master 将数据变更写入二进制日志( binary log, 其中记录叫做二进制日志事binary log ...
- mysql的那些事之架构
MySQL架构的那些事 此篇博客为原创,欢迎转载,转载时请注明出处,谢谢 最近深入学习了一下mysql的内容,想把自己的理解分享出来. mysql架构 逻辑架构 Connectors:连接器 Mana ...
- Linux下MySQL主从复制(GTID)+读写分离(ProxySQL)-实施笔记
GTID概念: GTID( Global Transaction Identifier)全局事务标识.GTID 是 5.6 版本引入的一个有关于主从复制的重大改进,相对于之前版本基于 Binlog 文 ...
- MySQL主从复制(Master-Slave)实践
MySQL数据库自身提供的主从复制功能可以方便的实现数据的多处自动备份,实现数据库的拓展.多个数据备份不仅可以加强数据的安全性,通过实现读写分离还能进一步提升数据库的负载性能. 下图就描述了一个多个数 ...
- 2.快速部署MySQL主从复制
1.快速部署MySQL主从复制 [root@mysql ~]# mysql -uroot -p123456 -S /data/3307/mysql.sock -e "show slave ...
- MySQL 主从复制与读写分离概念及架构分析
1.MySQL主从复制入门 首先,我们看一个图: 影响MySQL-A数据库的操作,在数据库执行后,都会写入本地的日志系统A中. 假设,实时的将变化了的日志系统中的数据库事件操作,在MYSQL-A的33 ...
- MySQL主从复制原理及配置详细过程以及主从复制集群自动化部署的实现
一.复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重 ...
随机推荐
- 深度揭秘腾讯云TSF日调用量超万亿次背后技术架构
腾讯云TSF是整合外部开源框架和腾讯内部历经多年锤炼的PaaS平台打造而成的企业级分布式应用服务开发与托管平台,本文重点对TSF中负责服务托管的PaaS平台进行揭秘,从技术角度解析TSF 平台是如何每 ...
- 部署openstack的官网文档解读mysql的配置文件
部署openstack的官网文档解读mysql的配置文件(使用与ubutu和centos7等系统) author:headsen chen 2017-10-12 16:57:11 个人原创,严禁转载 ...
- cesium 显示北京时间
cesium用的JulianDate:代表天文朱利安时间,用的是世界协调时,比北京时间晚8个小时,所以在源代码中给默认的时间格式加上8小时. 应该会有更好的办法,希望有大神可以告诉我!!!!!!!!! ...
- Atlas安装配置
准备环境 192.168.1.1(Altas) 192.168.1.2(MySQL主) 192.168.1.3(MySQL从) 官方链接:https://github.com/Qihoo360/Atl ...
- 使用Quartz 2D擦除图片
Quartz 2D 是一个强大的二位图像绘制引擎,在开发中如果遇到需要高度自定义的控件,我们就可能需要用Core Graphics进行绘制. 这几天一同事开发一个聊天中的一个子模块,A 画一幅图,然后 ...
- spring cloud 专题二(spring cloud 入门搭建 之 微服务搭建和注册)
一.前言 本文为spring cloud 微服务框架专题的第二篇,主要讲解如何快速搭建微服务以及如何注册. 本文理论不多,主要是傻瓜式的环境搭建,适合新手快速入门. 为了更好的懂得原理,大家可以下载& ...
- Android GC Log
最近在研究Android内存垃圾回收的内容,遇到一些自己之前不知道的技巧和方法.现在分享一种简单的在Logcat中可以看到垃圾回收状态的方法.经常关注Logcat日志的童鞋偶尔会看到一条类似于以下形式 ...
- linux服务器中毒可疑进程sfewfesfs CPU80%
我用的是wdlinux, 难免会有漏洞,不知怎么就被莫名其妙地给入侵了,而且还频繁发包.下面是我查看攻击机器的整个过程. 首先跟客户要了root密码登录看,第一个命令是就top cd /proc/25 ...
- C语言的文件读写操作函数小结
一.文件打开 使用 fopen( ) 函数来创建一个新的文件或者打开一个已有的文件,这个调用会初始化类型 FILE 的一个对象,类型 FILE包含了所有用来控制流的必要的信息.函数原型为: FILE ...
- linux小白成长之路8————访问Docker中的mysql
[内容指引] 本篇实战演示如何操作Docker中的mysql数据库,包含以下五个知识点: 登录容器: 登录mysql: 运行SQL指令创建数据库: 退出mysql: 退出容器: 1.登录容器 我们在上 ...