mysql主从复制(代码片段)

水木,年華 水木,年華     2022-12-09     722

关键词:

前言:

在企业应用中,成熟的业务通常数据量都比较大,单台MySQL在安全性、高可用性和高并发方面都无法满足实际的需求,需配置多台主从数据库服务器以实现读写分离。

一.什么叫高可性:

高可用性:
指的是冗余备份包含性能指标(五大负载+内核优化方向)
安全性指标:网络部分安全性、通讯加密,用户登陆、管理权限安全性

二.MySQL设计思路

①MySQL主从复制:让slave服务器中的中继日志同步master二进制日志
②MySQL读写分离:基于主从复制以功能性拆分成读和写,缓解MySQL读写的压力,解决读写比例失恒,单台读写瓶颈的问题。
③MHA高可用:对master服务器做一个冗余备份工作。
三种方式:
①纵向扩展:强化自己服务器(五大资源,内核优化 加数据库内的优化,索引,存储过程,select查询等等
②横向扩展:增加服务器数量
③借助于内存/缓存数据库:Redis,来帮助MySQL缓存一些高热数据,减少MySQL压力
除此之外可以考虑是否需要做一些架构,服务上的改动

三.MySQL主从复制原理

3.1MySQL的复制类型

基于语句的复制(基于SQL语句)
基于行的复制(ROW基于行)
混合类型的复制(MIXED混合模式)

3.2MySQL主从复制默认使用的机制

全同步
半同步
异步(默认)

3.3MySQL主从复制工作过程

主从复制原理核心在于2个日志文件,3个线程(4个线程)
2个日志:二进制日志和中继
三个线程:master上的dump线程,slave上的IO线程和SQL线程
目的:slave上的中继日志趋近实时同步master上的二进制日志
过程:
dump线程会监听二进制日志的更新,如果有更新则会通知slave IO
首先slave上的IO线程向master上申请同步二进制日志的更新内容
dump线程会把同步的sql日志内容与slave服务器,slave的IO线程会把写入自己的中继日志
slave sql线程把日志中的更新语句同步执行到数据库内部,以达到和master数据库趋近一致

##master
二进制日志
线程:dump,用于监听binlog同时通知SLAVE I/O
##slave
relay log
线程1 :I/O
负责向master请求更新的日志内容
将更新的内容同步到本地的relay log
线程2: sql
将本地的relay log中的更新内容(对本地relay log 做监听),同步执行到自己数据库内

四.主从复制配置

虚拟机:
客户端client(测试)                 192.1683.80.1
mysql-master                      192.168.80.2
mysql-slave1                      192.168.80.3
mysql-slave2                      192.168.80.4
Ameoba                            192.168.80.5

4.1主从服务器时间同步

master服务器配置
①安装ntp,修改配置文件

 ntpdate ntp.aliyun.com
 hostnamectl set-hostname master  #将主机名改成master
 su 

同样slave1和slave2也同步阿里云服务器

ntpdate ntp.aliyun.com
hostnamectl set-hostname slave1
hostnamectl set-hostname slave2
su 

3台虚拟机设置计划任务

crontab -e 
*/10 * * * * /usr/sbin/ntpdate ntp.aliyun.com

编译安装5.7MySQL,启动MySQL

4.2配置主从同步

(1)master服务器修改配置文件

 vim /etc/my.cnf
19 log_bin=master-bin             #开启二进制日志文件(之后生成的日志名为master-bin)
20 log_slave_updates=true         #开启从服务器日志同步
21 server_id=11                   #主服务器id为11(不可重复)

重启服务

systemctl restart mysqld 

(2)从服务器配置

vim /etc/my.cnf
 17 log_bin=master-bin          #开启二进制日志文件
 18 server_id = 23              #设置 server1 id为22,server2 id为23
 19 relay-log=relay-log-bin     #从服务器上同步日志文件记录到本地
 20 relay-log-index=slave-relay-bin.index   #定义relay-log的位置和名称(index索引)

在这里插入图片描述

4.3配置规则

[root@master mysql]#  mysql -u root -p
mysql> grant replication slave on *.* to 'myslave'@'192.168.80.%' identified by '123456';
Query OK, 0 rows affected, 1 warning (0.00 sec)
#给从服务器提权,允许使用slave的身份复制master的所有数据库的所有表,并指定密码为123456

mysql> flush privileges;   #刷新权限表
Query OK, 0 rows affected (0.01 sec)
show master status;   查看状态

在这里插入图片描述

mysqlbinlog --no-defaults --base64-output=decode-rows -v master-bin.000001

在这里插入图片描述

开启从服务器功能

change master to master_host='192.168.80.2',master_user='myslave',master_password='123456',
master_log_file='master-bin.000001',master_log_pos=603;

开启从服务器同步

start slave;

查看slave的状态

show slave status\\G

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

查看主从是否同步的点在于
I/O和SQL的两个yes
当不同步时,需要查看的
1、last_error(全局,sql线程的、I/O线程的)

4.4验证主从同步

master创建表,在从服务器器上依旧可以查看到
在这里插入图片描述
在这里插入图片描述

五.小结

MySQL主从复制与读写分离是密切相关的,介绍了MysQL的主从复制(同步),紧接着下一篇会介MySQL读写分离。

这里简单介绍一下二进制日志:
MysQL的二进制日志是一个二进制文件,主要用于记录修改数据或有可能引起数据变更的SQL语句二进制日志中记录了对MySQL数据库执行更改的所有操作,并且记录了语句发生时间、执行时长、操作数据等其他额外信息,但是它不记录SELECT 、SHOW等不修改数据的SQL语句。
同步失败可使用以下方法尝试解决:
忽略当前的错误执行 下一步同步
先stop slave;
slave 数据库中:

set global sql_slave_skip_counter=1;
start slave;

I/o线程一直处于connecting
第一件事,看laster error,报错项内容是为支点找不到

stop slave;

slave数据库中:

CHANGE MASTER TO MASTER _LOG_FILE= 'mysql-bin.000001',MASTER _LOG_POS=0;

遇到这个是因为binlog位置索引处的问题,生产环境下不要直接reset slave(删除change master操作的) ;

reset slave会将主从同步的文件以及位置恢复到初始状态,一开始没有数据还好,有数据的话,相当于重新开始同步,可能会出现一些问题;
一般做主从同步,都是要求以后的数据实现主从同步,而对于旧的数据完全可以使用数据库同步工具先将数据库同步,完了再进行主从同步;

遇到上面的问题,正确的做法是

1.打开主(master)服务器,进入mysql
2.执行flush logs;  //这时主服务器会重新创建一个binlog文件;
3.在主服务上执行show master slave\\G
4.来到从服务器的mysql;
5.stop slave;
6.change master to master_log_file='mysql-bin.000002',master_log_pos=154;
//这里的file和pos都是上面主服务是master显示的。
7.start slave; 
8.show slave status\\G;

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从库... 查看详情

主从复制和读写分离(代码片段)

主从复制和读写分离一.概述二.主从复制原理1.mysql复制类型2.mysql主从复制的工作过程三.Mysql读写分离1.读写分离原理2.读写分离方案3.读写分离存在的意义4.什么时候要读写分离四.Mysql主从复制和读写分离实验案例拓扑图:思... 查看详情

mysql数据库——主从复制与读写分离(代码片段)

文章目录前言一、MySQL主从复制1.支持的复制类型2.主从复制的工作过程是基于日志3.请求方式4.主从复制的原理5.MySQL集群和主从复制分别适合在什么场景下使用6.为什么使用主从复制、读写分离7.用途及条件8.mysql主从复制存在的... 查看详情

mysql的主从复制(代码片段)

MySQL的主从复制Whyweneed主从复制?复制功能复制方式复制原理复制流程图复制过程复制中线程的作用从节点主节点从节点需要建立二进制日志文件吗?Mysql复制特点主从复制配置过程主节点从节点配置演示主机修改my.ini配置文... 查看详情

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.mysql的复制类型(1)STATEMENT(基于SQL语句):(2)ROW(基于行)(3)MIXED推荐使用2.主从复制的过程详解(1)核心点(2)详细复制过程... 查看详情

mysql主从复制详解(代码片段)

前言:在MySQL中,主从架构应该是最基础、最常用的一种架构了。后续的读写分离、多活高可用架构等大多都依赖于主从复制。主从复制也是我们学习MySQL过程中必不可少的一部分,关于主从复制的文章有很多,笔者也来凑凑热... 查看详情

《mysql系列-主从相关》docker安装mysql,实现主从复制(代码片段)

Docker安装MySQL,实现主从复制一、前言1Docker安装MySQL参考历史文章Docker安装MySQL,准备两台MySQL容器master节点容器名称MySQL01容器IDfaf2312fd62a端口33061slave节点容器名称MySQL01容器IDdfc693c2bb04端口330622MySQL主从复制配置实操参考... 查看详情

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... 查看详情

msyql5.7主从复制(代码片段)

目录mysql主从复制主从原理配置主从复制master主节点配置slave从节点配置mysql主从复制合理的mysql主从复制需要3台机器,每台机器上都有mysql。3台中,一台是master节点,负责数据写入。另外两台负责读取。绝大多数的业... 查看详情

mysql主从复制搭建(代码片段)

1.为什么开启主从复制? 随着互联中业务访问量的发展,如果是单机部署数据库,就会导致I/O访问频率过高,为了让数据库高可用,采用数据库读写分离架构。2.主从复制原理 MySQL数据库服务器主(master)节点复制到一个... 查看详情

mysql主从复制(代码片段)

一、主从复制介绍1.1什么是主从复制将主服务器的binlog日志复制到从服务器上执行一遍,达到主从数据的一致状态,称之为主从复制。一句话表示就是,主数据库做什么,从数据库就跟着做什么。1.2为何要做主从&... 查看详情

mysql数据库在线热备(主从复制之ab复制)(代码片段)

MySQL数据库在线热备(主从复制之AB复制)MySQL主从复制的搭建(AB复制)环境准备操作MySQL主从复制核心思路MySQL主从复制的具体实践在Master端安装、初始化以及运行mysql软件在Slave从服务器端安装mysql软件(不... 查看详情

从理论到实战,彻底搞懂mysql主从复制原理(代码片段)

文章目录前言常见主从架构模式单向主从双向主从级联主从多主一从主从原理基于语句复制(STATEMENT)基于行复制(ROW)混合模式(MIXED)主从实战一主一从双向主从级联主从多主一从半同步复制实战GTID前... 查看详情

mysql主从复制及其配置(代码片段)

MySQL主从复制1.为什么需要主从复制?2.什么是主从复制?3.原理4.配置4.1准备两台服务器(已经安装了MySQL)4.2修改配置4.2.1master主服务器4.2.2slave从服务器4.2.3验证1.为什么需要主从复制?在业务复杂的系统中,有这么... 查看详情

mysql主从复制失败(uuid)(代码片段)

我这里用docker镜像生成的两个容器,所以会导致主从复制失败:主从的uuid(UUID是通用唯一识别码)相同。mysql>stopslave;QueryOK,0rowsaffected(0.01sec)mysql>CHANGEMASTERTOMASTER_HOST=‘172.18.0.201‘,->MASTER_PORT=3306,->MASTER_USER=‘rep‘, 查看详情