mysql的组从复制

news2024/9/21 4:24:06
1.原理分析
三个线程
1.实际上主从同步的原理就是基于 binlog 进行数据同步的。在主从复制过程中,会基于 3 个线程来操作, 一个主库线程,两个从库线程。
2.二进制日志转储线程( Binlog dump thread )是一个主库线程。当从库线程连接的时候, 主库可以将二进制日志发送给从库,当主库读取事件(Event )的时候,会在 Binlog 上加锁,读取完成之
后,再将锁释放掉。
3.从库 I/O 线程会连接到主库,向主库发送请求更新 Binlog 。这时从库的 I/O 线程就可以读取到主库 的二进制日志转储线程发送的 Binlog 更新部分,并且拷贝到本地的中继日志 ( Relay log )。
4.从库 SQL 线程会读取从库中的中继日志,并且执行日志中的事件,将从库中的数据与主库保持同步。
复制三步骤
步骤 1 Master 将写操作记录到二进制日志( binlog )。
步骤 2 Slave Master binary log events 拷贝到它的中继日志( relay log );
步骤 3 Slave 重做中继日志中的事件,将改变应用到自己的数据库中。 MySQL 复制是异步的且串行化的,而且重启后从接入点开始复制。
具体操作
1.slaves端中设置了master端的ip,用户,日志,和日志的Position,通过这些信息取得master的认证及
信息

2.master端在设定好binlog启动后会开启binlog dump的线程

3.master端的binlog dump把二进制的更新发送到slave端的

4.slave端开启两个线程,一个是I/O线程,一个是sql线程:

i/o线程用于接收master端的二进制日志,此线程会在本地打开relaylog中继日志,并且保存到本地磁盘

sql线程读取本地relog中继日志进行回放

5.什么时候我们需要多个slave?

当读取的而操作远远高与写操作时。我们采用一主多从架构

数据库外层接入负载均衡层并搭配高可用机制

2.配置mastesr
[root@mysql1 ~]# vim /etc/my.cnf

配置完后要重新启动服务
[root@mysql1 ~]#/etc/init.d/mysqld restart

参数说明:

server-id	            MySQL服务ID
super_read_only=on	    on 表示只读 , 默认是可写可读的
log_bin=mysql-bin      # 开启bin-log日志

 

进入数据库配置用户权限:
[root@mysql1 ~]# mysql -uroot -p123123
##生成专门用来做复制的用户,此用户是用于slave端做认证用
mysql> CREATE USER 'repl'@'%' IDENTIFIED BY '123123';

##对这个用户进行授权,给予权限
mysql> GRANT REPLICATION SLAVE ON *.* TO repl@'%';

##查看master的状态
mysql> SHOW MASTER STATUS;

3.配置slave
[root@mysql2 ~]# vim /etc/my.cnf

配置完后要重新启动服务
[root@mysql2 ~]#/etc/init.d/mysqld restart

进入数据库配置所属master:

mysql> CHANGE MASTER TO
MASTER_HOST='172.25.254.10',
MASTER_USER='repl',MASTER_PASSWORD='123123',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=350;
启动slave服务;

mysql> start slave;
Query OK, 0 rows affected (0.01 sec)

查看服务的连接情况:
mysql> SHOW SLAVE STATUS\G;

查看到的结果:

mysql> SHOW SLAVE STATUS\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 172.25.254.10
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 350
Relay_Log_File: mysql-node2-relay-bin.000002
Relay_Log_Pos: 320 Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 350
Relay_Log_Space: 533
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
Master_UUID: 888d2164-4b05-11ef-a049-000c299355ea
Master_Info_File: /data/mysql/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more
updates
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:
1 row in set (0.00 sec

查看到这两个的连接显示yes则表示连接成功。

注:

当有数据时,在创建一个slave2主机连接时,需要先锁表,确保备份后数据一致:

mysql> FLUSH TABLES WITH READ LOCK;
备份后再解锁:
mysql> UNLOCK TABLES;
#利用master节点中备份出来的lee.sql在slave2中拉平数据
[root@mysql-node3 ~]# mysql -uroot -plee -e "create database lee;"
[root@mysql-node3 ~]# mysql -uroot -p lee <lee.sql
[root@mysql-node3 ~]# mysql -uroot -plee -e "select * from lee.userlist;"
mysql: [Warning] Using a password on the command line interface can be insecure.
+----------+----------+
| username | password |
+----------+----------+
| user1    | 123      |       
| user2    | 123      |       
+----------+----------+

4.延迟复制

MySQL延迟复制原理是通过在从库上设置延迟时间,使得SQL线程在执行主库传来的Binlog事件前等待指定时间,以此实现从库数据相对于主库的滞后更新。这一特性在数据保护、审计、分析和特定行业合规性要求等方面具有重要价值,但同时也需注意其带来的延迟风险、管理复杂性和资源消耗问题。

工作原理
步骤如下:

主库操作与日志记录:主库接受客户端的写操作,完成事务处理并在事务提交时将数据变更记录到二进制日志(Binlog)中。

日志传输:从库的I/O线程连接主库,请求并接收主库的Binlog事件,这些事件按顺序写入到从库的中继日志(Relay Log)。

延迟等待:当新的Binlog事件到达从库后,SQL线程并不立即执行它们。相反,SQL线程会检查每个事件是否已达到设定的延迟时间。如果未达到,SQL线程会等待直到延迟时间届满。

事件重放:一旦延迟时间过去,SQL线程开始执行Relay Log中的事件,将主库的更新操作应用到从库的数据库中,从而实现数据的延迟同步。

延迟复制时用来控制sql线程的,和i/o线程无关。

(这个延迟复制不是i/o线程过段时间来复制,i/o是正常工作的。)

是日志已经保存在slave端了,那个sql要等多久进行回放。
slave端:
mysql> STOP SLAVE SQL_THREAD;
mysql> CHANGE MASTER TO MASTER_DELAY=60;  设置的参数时间为60
mysql> START SLAVE SQL_THREAD;
mysql> SHOW SLAVE STATUS\G;
Master_Server_Id: 1
Master_UUID: db2d8c92-4dc2-11ef-b6b0-000c299355ea
Master_Info_File: /data/mysql/master.info
SQL_Delay: 60                                                                 ##延迟效果
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
Master_Retry_Count: 86400
测试:
master 中写入数据后过了延迟时间才能被查询到。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2085515.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

神仙级的免费开源电子书阅读器,还支持听书功能,极空间部署『Koodo Reader』

神仙级的免费开源电子书阅读器&#xff0c;还支持听书功能&#xff0c;极空间部署『Koodo Reader』 哈喽小伙伴们好&#xff0c;我是Stark-C~ 前段时间不是给大家分享的电子书管理工具『TaleBook』嘛~&#xff0c;然后就有粉丝私信我有没有那种专门看电子书的阅读器&#xff…

Qt上传文件小记

最近由于公司上线了云平台&#xff0c;需要用Qt与云平台进行对接&#xff0c;故拾起了network模块。 众所周知Qt网络http相关的类QNetworkAccessManager发挥着举足轻重的作用。 普通的http&#xff1a;GET POST PUT DELETE已经耳熟能详&#xff0c;网上也有很多的文章有介绍到…

如何限制企业内部文件外发?告别文件泄露,七大招数限制企业内部文件外发!

如何限制企业内部文件外发&#xff0c;告别文件泄露&#xff01;文件一旦外泄&#xff0c;不仅可能泄露商业机密&#xff0c;还可能对企业的声誉和利益造成重大损害。 因此&#xff0c;如何有效限制企业内部文件外发&#xff0c;成为了每个企业必须面对和解决的问题。以下七大…

Vue 3 CLI TypeScript 项目搭建全攻略

一、前期准备 在搭建 Vue 3 CLI TypeScript 项目之前&#xff0c;我们需要做好一系列的准备工作。 首先&#xff0c;Node.js 是必不可少的运行环境。Vue 3 CLI 要求 Node.js 的版本至少为 8.9 以上。您可以从Node.js 官方网站下载最新的长期支持&#xff08;LTS&#xff09;版…

数字芯片设计验证经验分享系列文章(第四部分):将ASIC IP核移植到FPGA上——如何测试IP核的功能和考虑纯电路以外的其他因素

作者&#xff1a;Philipp Jacobsohn&#xff0c;SmartDV首席应用工程师 Sunil Kumar&#xff0c;SmartDV FPGA设计总监 本系列文章从数字芯片设计项目技术总监的角度出发&#xff0c;介绍了如何将芯片的产品定义与设计和验证规划进行结合&#xff0c;详细讲述了在FPGA上使用I…

Python中类型转换函数1

1 bool()函数 bool()函数的作用是将给定参数转换为布尔类型&#xff0c;指定参数是非零值&#xff0c;则转换为True&#xff0c;否则转换为False&#xff0c;如图1所示。 图1 bool()函数的使用方法1 如果bool()函数没有参数&#xff0c;则返回值是False&#xff0c;如图2所示…

如何查看 Kubernetes 的操作审计日志?

极狐GitLab 通过 Kubernetes Agent 对 Kubernetes 集群进行管理。整体的步骤为 Kubernetes Agent 的注册、安装。当然&#xff0c;也可以直接对 Agent 进行删除。不管是添加还是删除&#xff0c;后台都会有对应的审计日志&#xff0c;方便对 Kubernetes 集群的操作进行安全审计…

金九银十面试丨Python自动化测试的面试真题:

1.请解释一下Python自动化测试是什么以及为什么它重要&#xff1f; Python自动化测试是指使用Python编程语言进行测试过程中的自动化的过程。它通过编写测试脚本和自动化工具来模拟用户的行为&#xff0c;执行测试用例&#xff0c;并能够自动捕获测试结果和生成测试报告。Pyth…

Qt QLineEdit输入内容的格式限制(2)

设置QlineEdit控件不可编辑、密文输入、输入格式等小技巧 1. 设置不可编辑 setReadOnly(false);//文本不可编辑&#xff0c;但可以复制到剪切板 setEnabled(false);//整个控件被禁用&#xff0c;且会调用控件的禁用状态 setFocusPolicy(Qt::NoFocus);//无法获得焦点&#xff…

什么是密码学?

什么是密码学&#xff1f; 密码学是一种通过使用编码算法、哈希和签名来保护信息的实践。此信息可以处于静态&#xff08;例如硬盘驱动器上的文件&#xff09;、传输中&#xff08;例如两方或多方之间交换的电子通信&#xff09;或使用中&#xff08;在对数据进行计算时&#…

第二十五课,字符串操作函数(二)

一&#xff0c;字符串.replace(子串1, 子串2)&#xff1a;将字符串内的全部子串1&#xff0c;替换为子串2 在用电脑办公时&#xff0c;会出现这样的情景&#xff1a;一篇很长的文章中有一个人的名字全部被错写了&#xff0c;我们需要修改&#xff0c;但一个一个找错掉的名字修…

教师节素材大分享,海报设计不求人,素材多到根本用不完!

设计教师节海报时&#xff0c;设计师们最怕的就是时间不够用&#xff0c;灵感还卡壳。想做出有创意的设计&#xff0c;却总找不到合适的素材。而且&#xff0c;抠图、调色这些繁琐的步骤&#xff0c;特别耗时&#xff0c;让人头疼。还好最近找到一款国产设计软件&#xff0c;简…

SoftMaker Office Pro 2024:高效办公的全方位解决方案

SoftMaker Office Pro 2024是一款集高效、专业、全面于一体的办公软件套件&#xff0c;专为满足现代办公需求而设计。这款套件不仅包含了文字处理、电子表格、演示文稿等核心功能&#xff0c;还集成了项目管理、文档管理和客户管理等实用工具&#xff0c;为用户提供了全方位的办…

Leetcode 77. 组合 组合型回溯 C++实现

Leetcode 77. 组合 问题&#xff1a;给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。你可以按 任何顺序 返回答案。 算法&#xff1a; 创建二维返回数组 ans &#xff0c;和临时数组 path 。 进入 dfs 函数&#xff0c;d 代表还需要选 d 个数字…

Qt QComboBox下拉菜单显示提示信息

亲测有效 void MainWindow::initCOmboBox() {QStandardItemModel *model new QStandardItemModel(this);QStandardItem *item;item new QStandardItem("1.00");item->setToolTip("黏性土");model->appendRow(item);item new QStandardItem("…

《软件工程导论》(第6版)第1章 软件工程学概述 复习笔记

第1章 软件工程学概述 一、软件危机 1&#xff0e;软件危机的介绍 &#xff08;1&#xff09;概念 软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。这些问题绝不仅仅是不能运行的软件才具有的&#xff0c;实际上&#xff0c;几乎所有的软件都不同程度…

OpenAI GPT-3.5 “prompt“ argument not working

题意&#xff1a;"OpenAI GPT-3.5 的 prompt 参数不起作用" 问题背景&#xff1a; I am trying to make a flutter app with the openAI api that works like a chatbot, and I want to add a prompt so that the responses are more specialized, like in the open…

【系统架构师软考】计算机体系结构(二)

目录 CPU、GPU、NPU、FPGA、ASIC特性对比 SoC Cache的地址映像方法 直接映射&#xff08;Direct Mapping&#xff09; 2. 全相联映射&#xff08;Fully Associative Mapping&#xff09; 3. 组相联映射&#xff08;Set-Associative Mapping&#xff09; Cache的替换算…

刚刚!EI数据库再次更新!89本被踢,上百种期刊迎来变动

【SciencePub学术】本期热点 EI目录更新 刚刚&#xff0c;爱思唯尔更新了EI Compendex收录期刊目录。时隔近9个月&#xff0c;EI数据库才迎来了再次更新&#xff01; 此次更新后&#xff0c;目前在检连续出版/核心收录&#xff08;SERIALS&#xff09;列表共收录期刊名称5644本…

KTH5701 系列低功耗、高精度 3D 霍尔传感器

KTH5701 是一款数字输出的 3D 霍尔芯片&#xff0c;内部 分别集成了 X 轴、 Y 轴和 Z 轴三个独立的霍尔传感器。 信号链采用高精度运放通过 16 bit ADC 将模拟信号 转换成数字输出。外部主机可以采用 SPI 或 I2C 两种 模式读出测量数据。此外&#xff0c;在芯片…