关键词:
MySQL的主从复制
Why we need 主从复制 ?
当单台 MYSQL 服务器无法满足当前网站流量时的优化方案。需要搭建 mysql 集群技术。
复制功能
- 数据分布
- 负载均衡(读)
- 备份
- 高可用和故障切换
- MySQL升级测试
复制方式
- 主–从复制
- 主–主复制
- 半同步复制
复制原理
Mysql 中有一种日志叫做 bin 日志(二进制日志)。这个日志会记录下所有修改了数据库的SQL 语句(insert,update,delete,create/alter/drop table, grant 等等)。
主从复制的原理其实就是把主服务器上的 bin 日志复制到从服务器上执行一遍,这样从服务器上的数据就和主服务器上的数据相同了。
复制流程图
复制过程
- 主节点必须启用二进制日志,记录任何修改了数据库数据的事件。
- 从节点开启一个线程(I/O Thread)把自己扮演成 mysql 的客户端,通过 mysql协议,请求主节点的二进制日志文件中的事件
- 主节点启动一个线程(dump Thread),检查自己二进制日志中的事件,跟对方请求的位置对比,如果不带请求位置参数,则主节点就会从第一个日志文件中的第一个事件一个一个发送给从节点。
- 从节点接收到主节点发送过来的数据把它放置到中继日志(Relay log)文件中。并记录该次请求到主节点的具体哪一个二进制日志文件内部的哪一个位置(主节点中的二进制文件会有多个,在后面详细讲解)
- 从节点启动另外一个线程(sql Thread ),把 Relay log 中的事件读取出来,并在本地再执行一次。
复制中线程的作用
从节点
- I/O Thread: 从 Master 节点请求二进制日志事件,并保存于中继日志中。
- Sql Thread: 从Relay log 中读取日志事件并在本地完成重放。
主节点
- Dump Thread:为每个 Slave 的 I/O Thread 启动一个 dump 线程,用于向从节点发送二进制事件。
从节点需要建立二进制日志文件吗?
看情况,如果从节点需要作为其他节点的主节点时,是需要开启二进制日志文件的。这种情况叫做级联复制。如果只是作为从节点,则不需要创建二进制文件。
Mysql复制特点
- 异步复制:主节点中一个用户请求一个写操作时,主节点不需要把写的数据在本地操作完成同时发送给从服务器并等待从服务器反馈写入完成,再响应用户。主节点只需要把写入操作在本地完成,就响应用户。但是,从节点中的数据有可能会落后主节点,可以使用(很多软件来检查是否落后)
- 主从数据不一致。
主从复制配置过程
主节点
- 启用二进制日志。
- 为当前节点设置一个全局唯一的server_id。
- 创建有复制权限的用户账号 REPLIACTION SLAVE ,REPLIATION CLIENT。
从节点
- 启动中继日志。
- 为当前节点设置一个全局唯一的server_id。
- 使用有复制权限的用户账号连接至主节点,并启动复制线程。
配置演示
环境:
主机: windows , mysql 5.7 ip:192.168.14.165
从机: Linux, mysql 5.7 , ip: 192.168.14.167
主从都配置在[mysqld]节点下,都是小写
主机修改my.ini配置文件(Windows)
- 主服务器唯一id :server-id=1
- 启用二进制日志
log-bin=自己本地的路径/mysqlbin
log-err=自己本地的路径/mysqlerr
从机修改my.cnf配置文件(Linux)
- 配置从服务器id: server-id=2
- 启动二进制日志 :log-bin=mysql-bin
因为修改过配置文件,主机和从机都需要重启mysql服务
主机和从机都关闭防火墙
- windows手动关闭
- 关闭虚拟机linux防火墙,service iptables stop
在windows主机上建立账户,并授权给slave
GRANT REPLICATION SLAVE ON *.* TO 'dhy'@'从机数据库IP' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;
查询master状态
SHOW MASTER STATUS;
记录File和position的值
在LInux从机上配置需要复制的主机
CHANGE MASTER TO MASTER_HOST ='192.168.14.165',
MASTER_USER ='zhangsan',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysqlbin.具体数字',MASTER_LOG_POS=具体值; #二进制文件的位置,从哪一行开始复制
启动从服务器复制功能
start slave
查看从机状态
停止从服务器复制功能
stop slave
注意
每一次开启从机复制功能前,先查看当前主机状态,得到最新的position位置,即从哪一行开始进行复制
mysql主从复制的简单搭建(代码片段)
文章目录1、MySQL一主一从的简单搭建1.1、主从复制简介1.2、MySQL主从复制简介1.3、主从复制的架构1.4、前期准备1.5、主要配置实现1.5.1、测试环境1.5.2、配置my.cnf文件1.5.3、启动mysql测试1.5.4、配置主从结构1.5.4.1、主服务器配置1.5.4... 查看详情
mysql主从复制的简单搭建(代码片段)
文章目录1、MySQL一主一从的简单搭建1.1、主从复制简介1.2、MySQL主从复制简介1.3、主从复制的架构1.4、前期准备1.5、主要配置实现1.5.1、测试环境1.5.2、配置my.cnf文件1.5.3、启动mysql测试1.5.4、配置主从结构1.5.4.1、主服务器配置1.5.4... 查看详情
mysql数据库——主从复制与读写分离(代码片段)
文章目录前言一、MySQL主从复制1.支持的复制类型2.主从复制的工作过程是基于日志3.请求方式4.主从复制的原理5.MySQL集群和主从复制分别适合在什么场景下使用6.为什么使用主从复制、读写分离7.用途及条件8.mysql主从复制存在的... 查看详情
主从复制和读写分离(代码片段)
主从复制和读写分离一.概述二.主从复制原理1.mysql复制类型2.mysql主从复制的工作过程三.Mysql读写分离1.读写分离原理2.读写分离方案3.读写分离存在的意义4.什么时候要读写分离四.Mysql主从复制和读写分离实验案例拓扑图:思... 查看详情
mysql主从复制详解(代码片段)
前言:在MySQL中,主从架构应该是最基础、最常用的一种架构了。后续的读写分离、多活高可用架构等大多都依赖于主从复制。主从复制也是我们学习MySQL过程中必不可少的一部分,关于主从复制的文章有很多,笔者也来凑凑热... 查看详情
mysql主从复制与读写分离!(代码片段)
mysql主从复制与读写分离一.前言二.主从复制原理1.mysql的复制类型(1)STATEMENT(基于SQL语句):(2)ROW(基于行)(3)MIXED推荐使用2.主从复制的过程详解(1)核心点(2)详细复制过程... 查看详情
mysql主从复制(代码片段)
目录主从复制基础主从复制简介主从复制前提主从复制搭建主库配置(3307实例)从库配置(3308实例)主从复制原理主从复制相关文件主从复制相关线程主从复制图解原理主从故障监控/分析/处理IO线程故障连接主... 查看详情
mysql主从复制与读写分离(原理深刻,过程详细,值得一看)(代码片段)
...是读写分离(2)为什么要读写分离(3)什么时候要读写分离(4)主从复制与读写分离2.MySQL主从复制(1)mysql支持的复制类型(2)主从复制的工作过程(3)mysql主从复制高延迟的原因(4)mysql主从复制高延迟的解决办法3.常见的MySQL读写分离方式(1)... 查看详情
mysql主从复制及读写分离实际部署与验证(代码片段)
MySQL主从复制及读写分离前言:一、主从复制1.原理:2.准备来做主从复制和读写分离的服务器如下:3.主从复制具体步骤1.关闭所有服务器的防火墙2.Mysql主从服务器都进行时间同步3.主从服务器mysql配置4.从服务器的mysq... 查看详情
mysql运维主从复制--主从复制概述主从复制原理搭建mysql主从复制(代码片段)
文章目录1.主从复制概述2.主从复制原理3.搭建3.1服务器准备3.2主库配置3.2.1修改配置文件/etc/my.cnf3.2.2重启MySQL服务器3.2.3登录mysql,创建远程连接的账号,并授予主从复制权限3.2.4通过指令,查看二进制日志坐标3.3从库... 查看详情
mysql主从复制以及读写分离(❤❤❤❤含理论和实验❤❤❤❤大家中秋快乐!㊗)(代码片段)
文章目录一、MySQL主从复制的理论部分1.1、主从复制与读写分离的概述1.2、mysql支持的复制类型1.3、主从复制的工作过程(主写从复制❤❤❤❤)1.4、MySOL主从复制延迟的原因二、MySQL读写分离的理论部分2.1、MySQL读写分离... 查看详情
mysql主从复制以及读写分离(❤❤❤❤含理论和实验❤❤❤❤大家中秋快乐!㊗)(代码片段)
文章目录一、MySQL主从复制的理论部分1.1、主从复制与读写分离的概述1.2、mysql支持的复制类型1.3、主从复制的工作过程(主写从复制❤❤❤❤)1.4、MySOL主从复制延迟的原因二、MySQL读写分离的理论部分2.1、MySQL读写分离... 查看详情
mysql主从复制(代码片段)
MySQL复制允许将主实例(master)上的数据同步到一个或多个从实例(slave)上,默认情况下复制是异步进行的,从库也不需要一直连接到主库来同步数据MySQL复制的数据粒度可以是主实例上所有的数据库,也可以是指定的一个或多个数... 查看详情
mysql主从复制出错的解决方法(代码片段)
MySQL主从复制出错的解决方法主从复制中若是出现错误可以通过几个方法来进行解决1.如果主从复制时发生了主键冲突,从而阻止了主从复制,可以使用sql_slave_skip_counter这个变量来忽略错误将其排除2.如果发生了较大的错误,可... 查看详情
msyql5.7主从复制(代码片段)
目录mysql主从复制主从原理配置主从复制master主节点配置slave从节点配置mysql主从复制合理的mysql主从复制需要3台机器,每台机器上都有mysql。3台中,一台是master节点,负责数据写入。另外两台负责读取。绝大多数的业... 查看详情
简述mysql主从复制的原理面试必看(代码片段)
MySQL主从复制主节点和从节点同步数据,每个节点保持数据一致MySQL主从复制的作用实现负载均衡读写分离实现数据库备份实现数据库高可用和故障切换MySQL主从复制原理和过程MySQL主从复制依赖二进制日志实现主节点更新数... 查看详情
mysql数据库的主从复制和读写分离!(代码片段)
这里写目录标题一、主从复制1.1MySQL支持的复制类型1.2MySQL主从复制核心原理搭建MySQL的主从复制读写分离读写分离方法需要读写分离的原因及适用场景搭建读写分离一、主从复制在实际生产环境中,如果对数据库的读写都在... 查看详情
mysql数据库的主从复制和读写分离!(代码片段)
这里写目录标题一、主从复制1.1MySQL支持的复制类型1.2MySQL主从复制核心原理搭建MySQL的主从复制读写分离读写分离方法需要读写分离的原因及适用场景搭建读写分离一、主从复制在实际生产环境中,如果对数据库的读写都在... 查看详情