MySQL 主从复制实战解析
前言:前面几篇文章讲解了在应用层读写分离的配置和使用,这篇文章将来个主从复制的实战解析。
说明:主从复制,读写分离结构图

原理图
主库生成一个线程: Binlog Dump线程
1、此线程运行在主库,当主从都配置好后,从库运行START SLAVE启动复制后,会在主库上生成一个BinlogDump线程,该线程的主要作用就是读取主库Binlog事件,然后发送到从库(从库的I/O线程)。 从库生成两个线程:一个I/O线程,一个SQL线程;
1、i/o线程去请求主库 的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中;
2、主库会生成一个 log dump 线程,用来给从库 i/o线程传binlog;
3、SQL 线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致;

详细流程如下:
1、主库验证从库发起的连接;
2、主库为从库开启一个线程;
3、从库将主库日志的偏移位告诉主库;
4、主库检查该值是否小于当前二进制日志偏移位。
5、如果小于,则通知从库可以取数据。
6、从库持续从主库取数据,直至取完,这时,从库线程进入睡眠,主库线程同时进入睡眠。
7、当主库有更新时,主库线程被激活,并将二进制日志推送给从库,并通知从库线程进入工作状态。
8、从库SQL线程执行二进制日志,随后进入睡眠状态。
存在问题:
1、主库宕机后,数据可能丢失
解决:先配置主主同步,再用keepalived实现双机热备自动切换,具体请百度双机热备
2、从库只有一个sql Thread,主库写压力大,复制很可能延时
说明:当主库的TPS并发较高时,产生的DDL数量超过slave一个sql线程所能承受的范围,那么延时就产生了,当然还有就是可能与slave的大型query语句产生了锁等待。
解决:
1、用多台slave来分摊请求
2、关闭slave的一些日志功能,如sync_binlog,innodb_flushlog,innodb_flush_log_at_trx_commit
3、更好的硬件
一、环境介绍
主:Linux(centos 7) MySQL(5.6.4) IP:192.168.8.228
从:Linux(centos 7) MySQL(5.6.4) IP:192.168.8.146
二、配置主库环境
1、修改mysql配置文件 my.cnf,加入如下红框内容

2、添加从库权限账号 注释:在主服务器上为从服务器分配一个账号,就像一把钥匙,从服务器拿着这个钥匙,才能到主服务器上来共享主服务器的日志文件。
提醒:记得 FLUSH PRIVILEGES 刷新权限


3、查看主服务器当前二进制日志名和偏移量
解释:这个操作的目的是为了在从数据库启动后,从这个点开始进行数据的恢复

出现以上结果,说明主库设置完毕了
三、配置从库环境
1、修改从库mysql配置文件 my.cnf,加入如下红框内容

2、配置连接主库参数
说明:不支持在配置文件中加这些参数,mysql5.5+版本主从复制不支持这些变量,需要在从库上用命令来设置

3、启动slave进程
从库基本命令:
启动:slave start
停止:slave stop

4、查看slave的状态,如果下面两项值为YES,则表示配置正确:
1)、Slave_IO_Running: Yes
2)、Slave_SQL_Running: Yes

到此,从库配置完成,只等主库更新数据了
注意:上一步可能会遇到的问题(一定要记得先停止从库改完后再启动从库) 错误:当执行show slave status\G 时,发现slave_IO_Running:no时,并且下面的error_log还报错了,类似这种 Slave can not handle replication events with时 原因:是你的master和slave的mysql版本不一样,mysql5.6的binlog_checksum默认设置的是crc32。 而MySQL5.5 或者更早的版本默认值是None,所以可以将两个服务器的校验都设为none,或者crc32。
四、开始实验
1、主库表test1和从库表test1里面都没有数据


2、在主库中添加一条数据,再查看从库表是否有这条数据


以上就是本篇文章的全部内容了,关于主从复制--读写分离就到这里了。
参考链接:https://www.cnblogs.com/zhoujie/p/mysql1.html
MySQL 主从复制实战解析的更多相关文章
- mySQL主从复制实战
随着访问量的不断增加,单台MySQL数据库服务器压力不断增加,需要对MYSQL进行优化和架构改造,MYQSL优化如果不能明显改善压力情况,可以使用高可用.主从复制.读写分离来.拆分库.拆分表来进行优化 ...
- 14、mysql主从复制实战
14. 1.服务器准备: 一台服务器,多实例,客户端编码是utf8,服务端编码是utf8; [root@backup 3308]#netstat -tunlp | grep 330 tcp 0 0 0 ...
- 13、mysql主从复制原理解析
13.1.mysql主从复制介绍: 1.普通文件,磁盘上的文件的同步方法: (1)nfs网络文件共享可以同步数据存储: (2)samba共享数据: (3)ftp数据同步: (4)定时任务:cronta ...
- 详解MySQL主从复制实战 - 基于GTID的复制
基于GTID的复制 简介 基于GTID的复制是MySQL 5.6后新增的复制方式. GTID (global transaction identifier) 即全局事务ID, 保证了在每个在主库上提交 ...
- MySQL(13)---MYSQL主从复制原理
MYSQL主从复制原理 最近在做项目的时候,因为部署了 MYSQL主从复制 所以在这里记录下整个过程.这里一共会分两篇博客来写: 1.Mysql主从复制原理 2.docker部署Mysql主从复制实战 ...
- 【大型网站技术实践】初级篇:搭建MySQL主从复制经典架构
一.业务发展驱动数据发展 随着网站业务的不断发展,用户量的不断增加,数据量成倍地增长,数据库的访问量也呈线性地增长.特别是在用户访问高峰期间,并发访问量突然增大,数据库的负载压力也会增大,如果架构方案 ...
- MySQL 5.7主从复制实战篇
MySQL 5.7主从复制实战篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.安装MySQL数据库并启动 1>.在MySQL官方下载相应的安装包(https://dev ...
- 九、linux-msyql下的mysql主从复制深度实战
1.上节基本诉说了mysql主从同步,这里想说明的是,其一从库在请求主库进行同步的时候,是主库的主线程进行用户名.密码的验证,在验证通过后,将请求转交给I/O线程负责同步:其二从库sql线程在读取中继 ...
- 实战-Mysql主从复制
前言: Mysql内建的复制功能是构建大型高性能应用程序的基础.由于目前mysql的高可用性架构MMM和MHA均建立在复制的基础之上,本文就mysql主从复制进行实战描述,希望对读者提供帮助.之前 服 ...
随机推荐
- 折腾Java设计模式之单例模式
博文原址:折腾Java设计模式之单例模式 单例模式 Ensure a class has only one instance, and provide a global point of access ...
- 一种动态写入apk数据的方法(用于用户关系绑定、添加渠道号等)
背景: 正在开发的APP需要记录业务员与客户的绑定关系.具体应用场景如下: 由流程图可知,并没有用户填写业务人员信息这一步,因此在用户下载的APP中就已经携带了业务人员的信息. 由于业务人员众多,不可 ...
- Android Interpolator解析
本文部分图片转自:https://blog.csdn.net/lgaojiantong/article/details/39451243 目录 自定义插值器 系统插值器 1. 自定义插值器 要自定义插 ...
- Java递归方法遍历二叉树的代码
将内容过程中经常用的内容做个记录,如下内容内容是关于Java递归方法遍历二叉树的内容. package com.wzs; public class TestBinaryTree { public st ...
- MIUI12系统怎么样开启Root超级权限的流程
MIUI12系统能有啥方法开启root超级权限?各位都清楚,Android机器有root超级权限,如果手机开启root相关权限,可以实现更好的功能,举例子,各位公司的营销部门,使用某些营销软件都需要在 ...
- Android视频录制从不入门到入门系列教程(三)————视频方向
运行Android视频录制从不入门到入门系列教程(二)————显示视频图像中的Demo后,我们应该能发现视频的方向是错误的. 由于Android中,Camera给我们的视频图片的原始方向是下图这个样子 ...
- 轻松学习UML之类图,状态图
本文主要讲解UML图中的类图与状态图相关内容,如有不足之处,还请指正. 概述 统一建模语言(UML,UnifiedModelingLanguage)是面向对象软件的标准化建模语言,UML因其简单.统一 ...
- Python 进程(一)理论部分
进程 进程(Process)是计算机中的程序关于某数据集合上的一次运行,即正在运行的程序,是系统进行资源分配和调度的基本单位,进程是对正在运行程序的一个抽象,在早期面向进程设计的计算机结构中,进程是程 ...
- 你想知道的3D Touch开发全在这里了
前言 iPhone 6s和iPhone 6s Plus为多点触摸界面带来了强大的3D触摸新维度.这项新技术可以感知用户按下显示屏的深度,让他们比以往任何时候都更能使用你的应用程序和游戏.更多关于3D ...
- [LeetCode] 24. 两两交换链表中的节点
题目链接:https://leetcode-cn.com/problems/swap-nodes-in-pairs/ 题目描述: 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是 ...