当前位置:网站首页>A, MySQL principle of master-slave replication
A, MySQL principle of master-slave replication
2022-07-31 08:28:00 【m0_67401382】
MySQL主从复制
一、MySQL主从复制原理
MySQL的主从复制和MySQLThere is an inevitable connection between the read-write separation and the read-write separation,首先要部署主从复制,只有主从复制完成了,才能在此基础上进行数据的读写分离
1)MySQL支持的复制类型
(1)基于语句的复制:在主服务器上执行的SQL语句,在从服务器上执行同样的语句.MySQL默认采用基于语句的复制,效率比较高.But the binary log function must be turned on;
(2)基于行的复制:把改变的内容复制过去,而不是把命令在从服务器上执行一遍;
(3)混合类型的复制:默认采用基于语句的复制,一旦发现基于语句无法精确复制时,就会采用基于行的复制;
2)复制的工作过程
MySQLThe working process of replication is described in detail:
1.在每个事物更新数据完成之前,MasterThese changes are recorded in the binary log.写入二进制日志完成后,Master通知存储引擎提交事务;
2.Slave将Master的Binary log(二进制日志)复制到其Relay log(中继日志).首先SlaveStart a worker process——I/O线程,I/O线程在Master上打开一个普通的连接,然后开始Binlog dump process(Binary log dump process).Binlog dump process从Master的二进制日志中读取事件,如果已经跟上Master,It will sleep and waitMaster产生新的事件.I/OThe thread writes these times to the relay log;
3.SQL slave thread(SQL从线程)处理该过程的最后一步.SQL线程从中继日志中读取事件,并重放其中的事件而更新Slave的数据,使其与Master中的数据一致,只要该线程与I/O线程保持一致,中继日志通常会位于OS的缓存中,所以中继日志的开销很小;
复制过程有一个很重要的限制,即复制在Slave上是串行化的,也就是说Master上的并行更新操作不能在Slave上并行操作.
二、搭建MySQL主从复制
大致步骤分为:
(1)MySQLThe master server establishes time synchronization;
(2)MySQLTime synchronization from the server;
(3)关闭防火墙;
(4)安装MySQL数据库;
(5)配置MySQL主服务器;
(6)配置MySQL从服务器;
(7)验证主从复制效果;
实验环境
master:192.168.38.138
slave1:192.168.38.139
slave2:192.168.38.140
(1)MySQLThe master server establishes time synchronization
yum -y install ntp
//安装NTP
vim /etc/ntp.conf
//编写ntp服务的配置文件 并在末尾添加
server 127.127.1.0
//The upper server needs to be synchronized(本身)
fudge 127.127.1.0 stratum 10
//Synchronize the tier number of the upper server(Size cannot exceed or equal16)
systemctl start ntpd
//重启ntp服务
(2)MySQLTime synchronization from the server
Both slave servers must perform time synchronization!
yum -y install ntpdate
systemctl start ntpd
ntpdate 192.168.38.138
//安装ntpdate工具,并指定ntpserver synchronization
crontab -e
*/30 * * * * /usr/sbin/ntpdate 192.168.38.138
(3)关闭防火墙(Or open the corresponding port)
systemctl stop firewalld
//关闭防火墙
systemctl disable firewalld
//开机自动关闭
(4)安装MySQL数据库
For details, see the previous database installation
(5)配置MySQL主服务器
vim /etc/my.cnf
server-id = 1 #服务器ID号,Custom but not with anything elseMySQL服务器冲突
log-bin=master-bin #添加,主服务器开启二进制日志
log-slave-updates=true #添加,允许从服务器更新二进制日志
systemctl restart mysqld
mysql -u root -p
grant replication slave on *.* to 'myslave'@'192.168.38.%' identified by '密码';
//授权用户myslave,密码是123456,在192.168.38.0网段的所有MySQLAll databases on the server、The table has permission to replicate
flush privileges; #刷新
show master status; #File 列显示日志名,Fosition 列显示偏移量
show master statusG; #查看日志文件名,position位置....
(6)配置MySQL从服务器
vim /etc/my.cnf
server-id = 2
//修改,注意id与Master的不同,两个Slave的id也要不同
relay-log=relay-log-bin
//添加,开启中继日志,从主服务器上同步日志文件记录到本地
relay-log-index=slave-relay-bin.index
//添加,定义中继日志文件的位置和名称
systemctl restart mysqld
mysql -u root -p
//配置同步,注意 master_log_file 和 master_log_pos 的值要与Master查询的一致,
change master to master_host='192.168.38.138' , master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=603;
start slave; #启动同步,如有报错执行 reset slave;
show slave statusG #查看 Slave 状态
//确保 IO 和 SQL 线程都是 Yes,代表同步正常.
Slave_IO_Running: Yes #负责与主机的io通信
Slave_SQL_Running: Yes #负责自己的slave mysql进程
(7)验证主从复制效果
Log in on the master serverMySQL数据库,创建并查看数据库;
mysql> create database work;
Query OK, 1 row affected (0.00 sec)
在从服务器上查看
show databases;
总结
主从复制:
主从复制核心部分就是两个日志三个线程(高版本的mvsal以及异步复制、半同步复制、全同步复制三种模式)
二个日志:二进制日志和中继日志
三个线程:master的dump和slave的I/O、SQL
主要原理:master将数据保存在二进制日志中,I/O向dump发出同步请求,dump把数据发送给I/O线程,I/O写入本地的中继日志
SOL线程读取本地中继日志数据,同步到自己数据库中,完成同步
、半同步复制、全同步复制三种模式)
二个日志:二进制日志和中继日志
三个线程:master的dump和slave的I/O、SQL
主要原理:master将数据保存在二进制日志中,I/0向dump发出同步请求,dump把数据发送给I/0线程,I/O写入本地的中继日志
SOL线程读取本地中继日志数据,同步到自己数据库中,完成同步
先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在.深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小.自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前.因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担.添加下方名片,即可获取全套学习资料哦
边栏推荐
- 《c语言》青蛙跳台阶递归问题
- 【C#】判断字符串中是否包含指定字符或字符串(Contains/IndexOf)
- sqlmap使用教程大全命令大全(图文)
- Environment_Variable_and_SetUID
- WLAN部署(AC+AP)配置及常见问题记录
- Machine Learning - Notes and Implementation of Linear Regression, Logistic Regression Problems
- Linux redis6.2.6 configuration file
- Vue项目通过node连接MySQL数据库并实现增删改查操作
- 模块化规范
- 【pytorch记录】pytorch的分布式 torch.distributed.launch 命令在做什么呢
猜你喜欢
使用PageHelper实现分页查询(详细)
MySql database optimization query tool
MySQL安装到最后一步 write configuration file 失败 怎么办?及后安装步骤
sqli-labs(less-11)
【小程序专栏】总结uniapp开发小程序的开发规范
奉劝那些刚参加工作的学弟学妹们:要想进大厂,这些核心技能是你必须要掌握的!完整学习路线!
【插值与拟合】
初识NK-RTU980开发板
Vulkan与OpenGL对比——Vulkan的全新渲染架构
[Interview: Concurrency 37: Multithreading: Thread Pool] Custom Thread Pool
随机推荐
哆啦a梦教你页面的转发与重定向
Ubuntu安装Mysql5.7
深度学习随机数设置,保证实验的可重复性
SQL连接表(内连接、左连接、右连接、交叉连接、全外连接)
MySql数据库优化查询工具
手把手教你开发微信小程序自定义底部导航栏
MySQL安装教程
【pytorch记录】pytorch的分布式 torch.distributed.launch 命令在做什么呢
控制文本保留几行,末尾省略
shell/bash脚本命令教程
超级详细的mysql数据库安装指南
CY7C68013A之LED闪烁
个人报错问题 持续总结
蚂蚁核心科技产品亮相数字中国建设峰会 持续助力企业数字化转型
PHP中 比较 0、false、null,‘‘ “
SQLAlchemy使用教程
2022.07.22 _ a day
MySQL详解
Vulkan与OpenGL对比——Vulkan的全新渲染架构
SSM框架简单介绍