当前位置:网站首页>MySQL:MySQL的集群——主从复制的原理和配置
MySQL:MySQL的集群——主从复制的原理和配置
2022-08-10 22:04:00 【_索伦】
前言
在实际生产环境中,如果对mysql数据库的读和写都在一台数据库服务器中操作,无论是在安全性、高可用性,还是高并发等各个方面都是不能满足实际需求的,一般要通过主从复制的方式来同步数据,再通过读写分离来提升数据库的并发负载能力。
1、数据备份 - 热备份&容灾&高可用
2、读写分离,支持更大的并发
原理介绍
主从复制的流程:两个日志(binlog二进制日志&relay log日志)和三个线程(master的一个线程和
slave的二个线程)
1、主库的更新操作写入binlog二进制日志中。
2、master服务器创建一个binlog转储线程,将二进制日志内容发送到从服务器。
3、slave机器执行START SLAVE命令会在从服务器创建一个IO线程,接收master的binary log复制到其中继日志。
首先slave开始一个工作线程(I/O线程),I/O线程在master上打开一个普通的连接,然后开始
binlog dump process,binlog dump process从master的二进制日志中读取事件,如果已经跟上
master,它会睡眠并等待master产生新的事件,I/O线程将这些事件写入中继日志。
4、sql slave thread(sql从线程)处理该过程的最后一步,sql线程从中继日志中读取事件,并重放其
中的事件而更新slave机器的数据,使其与master的数据一致。只要该线程与I/O线程保持一致,中继日志通常会位于os缓存中,所以中继日志的开销很小。
问题
为什么不用I/O线程直接从主库的bin-log里读数据写入从库中,而是写入中继日志?
因为主库的bin-log内容可能很多,而一个I/O线程读取的缓慢,导致从库更新数据可能会和主库的内容差距越来越大,数据落后。
配置
master(centos7):192.168.131.129
slave(win10):192.168.0.6
保证master和slave之间的网络互通,并且保证3306端口是开放的。
master配置:
1、开启二进制日志 , 目录:/etc/my.cnf
配置log_bin和全局唯一的server-id。
2、创建一个用于主从库通信用的账号
mysql> CREATE USER ‘mslave’@‘192.168.131.1’ IDENTIFIED BY ‘[email protected]’;
mysql> GRANT REPLICATION SLAVE ON . to ‘mslave’@‘192.168.131.1’ IDENTIFIED BY ‘[email protected]’;
mysql> FLUSH PRIVILEGES;
3、获取binlog的日志文件名和position
mysql> show master status;
slave配置:
1、配置全局唯一的server-id(涉及修改配置文件,需要重启mysql57服务)
2、使用master创建的账户读取binlog同步数据(stop slave;start slave)
根据自己情况调整参数
示例,个人的主库bin-log到哪了就配置哪个
3、START SLAVE
通过show slave status命令查看主从复制状态。show processlist查看master和salve相关线程的运行
状态。
常见错误
- IO_ERROR
解决方案:
- 先使用ping命令查看网络通不通?
- 主库所在机器的3306端口是否正常? telnet xxx.xxx.xxx.xxx 3306
- 防火墙对端口有限制?
- 查看主库的错误日志 /var/log/mysql/mysqld.log
2.Last_Error
解决:查看配置信息是否写错,然后重启slave线程
3.SQL_Error
错误原因:
从库还没有同步mytest这个库,但主库使用了 drop database mytest的SQL,那么这条SQL会写到bin-log日志,然后I/O线程读到这个SQL,写入中继日志,从库从中继日志读到了这个SQL,执行后产生的错误。
解决:
可以先停止slave线程,跳过一个错误,然后重启slave
stop slave;
set global sql_slave_skip_counter = 1;
start slave;
边栏推荐
- 2022年8月10日:使用 ASP.NET Core 为初学者构建 Web 应用程序--使用 ASP.NET Core 创建 Web UI(没看懂需要再看一遍)
- JVM经典五十问,这下面试稳了
- 商家招募电商主播要考虑哪些内容
- SDP
- STL-stack
- BM13判断一个链表是否为回文结构
- 艺术与科技的狂欢,阿那亚2022砂之盒沉浸艺术季
- LeetCode-498 - Diagonal Traversal
- Common interview questions for APP UI automation testing, maybe useful~
- 3D model reconstruction of UAV images based on motion structure restoration method based on Pix4Dmapper
猜你喜欢
配电网络扩展规划:考虑使用概率性能源生产和消费概况的决策(Matlab代码实现)
BM13 determines whether a linked list is a palindrome
服务——DHCP原理与配置
艺术与科技的狂欢,阿那亚2022砂之盒沉浸艺术季
JVM classic fifty questions, now the interview is stable
What is Jmeter? What are the principle steps used by Jmeter?
Using SylixOS virtual serial port, serial port free implementation system
深度学习之 12 循环神经网络RNN2
HighTec快捷键(Keys)设置位置
“数据引擎”开启前装规模量产新赛道,「智协慧同」崭露头角
随机推荐
水果沙拉酱
virtual address space
服务——DNS正向反向域名解析服务
Research on multi-element N-k fault model of power system based on AC power flow (implemented by Matlab code) [Power System Fault]
mmpose关键点(一):评价指标(PCK,OKS,mAP)
A shell script the for loop statements, while statement
c语言之 练习题1 大贤者福尔:魔法数,神奇的等式
labelme - block drag and drop events
shell (text printing tool awk)
shell编程之免交互
Shell编程之条件语句(二)
QT笔记——QT工具uic,rcc,moc,qmake的使用和介绍
[Maui official version] Create a cross-platform Maui program, as well as the implementation and demonstration of dependency injection and MVVM two-way binding
LeetCode每日两题02:反转字符串中的单词 (均1200道)
STL-deque
Live Classroom System 08-Tencent Cloud Object Storage and Course Classification Management
BM7 链表中环的入口结点
JVM classic fifty questions, now the interview is stable
阿里云贾朝辉:云XR平台支持彼真科技呈现国风科幻虚拟演唱会
基于交流潮流的电力系统多元件N-k故障模型研究(Matlab代码实现)【电力系统故障】