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)上,并重 ...
随机推荐
- Pycharm头部注释添加
1.第一步 2.第二步 搜索框输入:File and Code Templates 然后右边找到 Python Script 3.第三步 将下面内容复制到图中红框内,然后点击OK #!/usr/bin ...
- 使用MBROSTool 工具制作本地硬盘多启动盘的方法总结
前段时间写了一个自用五合一多启动盘分享--分别用来维护娱乐,wifi密码破解,win&mac登陆密码绕过/清除,反馈的同学还是挺多,觉得大家都有这方面的需求,于是再把自己的使用经验总结一下. ...
- redis's usage
author:headsen chen date:2017-12-07 16:33:40 notice:This article is created by headsen chen ,and n ...
- servlet的执行过程
第一次访问servlet的过程: 服务器启动:在服务器启动的时候,加载项目,就扫描web.xml文件,获得应用有哪些servlet,url-pattern, 客户端通过URl访问服务器[向服务器发送一 ...
- MYSQL数据库学习十四 存储过程和函数的操作
14.1 为什么使用存储过程和函数 一个完整的操作会包含多条SQL语句,在执行过程中需要根据前面SQL语句的执行结果有选择的执行后面的SQL语句. 存储过程和函数的优点: 允许标准组件式编程,提高了S ...
- POJ 1979 DFS
题目链接:http://poj.org/problem?id=1979 #include<cstring> #include<iostream> using namespace ...
- 【Python】 uuid生成唯一ID
uuid uuid是128位的全局唯一标识符(univeral unique identifier),通常用32位的一个字符串的形式来表现.有时也称guid(global unique identif ...
- 【Python】 发邮件用 smtplib & email
smtplib & email ■ 概述 发邮件主要用到smtplib以及email模块.stmplib用于邮箱和服务器间的连接,发送的步骤.email模块主要用于处理编码,邮件内容等等.主要 ...
- 数据库 --> sqlite3之api使用
创建 if [ ! -d /opt/dbspace ] then mkdir /opt/dbspace fi if [ -f /opt/dbspace/.memo.db ] then rm /opt/ ...
- Python类中的self到底是干啥的
Python类中的self到底是干啥的 Python编写类的时候,每个函数参数第一个参数都是self,一开始我不管它到底是干嘛的,只知道必须要写上.后来对Python渐渐熟悉了一点,再回头看self的 ...