MySQL-主从复制
1、主从复制的理解
在工作用常见Redis作为缓存与MySQL一起使用。当有请求时,首先会从缓存中进行查找,如果存在就直接取出,否则访问数据库,这样 提升了读取的效率,也减少了对后台数据库的访问压力。Redis的缓存架构时高并发架构 中重要的一环
- 作用
读写分离
:通过主从复制的方式来 同步数据 ,然后通过读写分离提高数据库并发处理能力。数据备份
:通过主从复制将主库上的数据复制到从库上,相当于一种热备份机制,也就是在主库正常运行的情况下进行备份,并不会影响到服务具有高可用性
:数据备份实际上是一种冗余机制,通过该方式可以换取数据库的高可用性,也就是当服务器出现故障或宕机的情况下,可以切换到从服务器上,保证数据的正常运行。
2、主从复制的原理
从数据库(Slave)从 主数据库(Master)读取
binlog
来进行数据同步。
2.1、原理刨析
三线程
:在主从复制过程中,会基于三线程来操作,一个主库线程,两个从库线程。二进制日志转储线程(Binlog dump thread)
:是一个主库线程。当从库线程连接的时候,主库可以将二进制日志发送给从库,当主库获取事件的时候,会在Binlog上加锁
,读取完成之后,再将锁释放掉。从库I/O线程
:会连接到主库,向主库发送请求更新 Binlog。这是从库的I/O线程就可以读取到主库的二进制日志转储线程发送的 Binlog 更新部分,并且拷贝到本地的中继日志(relay log)中。从库SQL线程
:会读取从库中的中继日志(relay log)并且执行日志中的事件,将从库中的数据与主库保持同步。
- 不是所有版本的MySQL都默认开启服务器的二进制日志。在进行主从复制的时候,先检查服务器是否已经开启二进制日志
- 除非特殊指定,默认情况下从服务器会执行所有主服务器中保存的事件。也可以通过配置,使从服务器执行特定的事件。
复制三步骤
:- 1、Mater 将写操作记录到二进制日志(binlog)。这些记录叫做二进制日志事件
- 2、Slave 将 Master 的binary log event 拷贝到他的中继日志(relay log)
- 3、Slave 重做 relay log 中的事件,将改变应用到自己的数据库中。MySQL复制是异步且串行化的,而且重启后从
接入点
开始复制
2.2、复制的基本原则
- 每个 Salve 只有一个Master
- 每个 Salve 只能有一个唯一的服务器ID
- 每个 Master 可以有多个Slave
3、主从架构的搭建
一台主机用于处理所有的写操作,一台从机负责所有读请求,如下图所示:
3.1、准备工作(采用虚拟机方式搭建主从复制架构)
- 两台及以上虚拟机
- 安装MySQL
- 修改MySQL的
server-uuid
,使得主从服务器中MySQL的uuid都是独立的并重启mysql服务
[root@slave ~]# vim /var/lib/mysql/auto.cnf[auto]
server-uuid=7e14fc46-fef9-11ee-98d3-0050562861fc
3.2、主机配置文件
建议MySQL版本保持一致且后台以服务运行,主从所有配置项都在 [mysqld]节点下,且都是小写字母。
具体参数配置如下
- 必选项:
- 主服务器唯一ID:server-id=1
- 启用二进制日志,指名路径:log-bin=rqtanc-bin
- 可选项:
- read-only:0默认表示读写(主机),1表示只读(从机)
- binlog_expire_log_seconds:设置日志文件保留的时长,单位为秒
- max_binlog_size:控制单个二进制日志文件的大小,最大值和默认值是 1GB
- binlog-ignore-db:设置不复制的数据库
- binlog-do-db:设置需要复制的数据库,默认全部
- binlog_format:设置binlog格式
先搭建完主从复制,在创建数据库。MySQL主从复制起始时,从机不继承主机数据。
3.3、从机配置文件
- 必选项:
- 从服务器唯一ID:server-id
- 可选项:
- relay-log:启用中继日志
3.4、主机:建立账户并授权
- 创建用户:create user ‘slave’@‘%’ identified by ‘123456’;
- 授予权限:grant replication slave on . to ‘slave’@‘%’;
- 修改用户身份验证插件和密码:alter user ‘slave’@‘%’ identified with mysql_native_password by ’ 123456’;
- 刷新权限:flush privileges;
mysql> create user 'slave'@'%' identified by '123456';
Query OK, 0 rows affected (8.55 sec)mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%';
Query OK, 0 rows affected (8.28 sec)mysql> alter user 'slave'@'%' identified with mysql_native_password by ' 123456';
Query OK, 0 rows affected (1.21 sec)mysql> flush privileges;
Query OK, 0 rows affected (12.98 sec)mysql> show master status;
+-------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| rqtanc-bin.000008 | 965 | | | |
+-------------------+----------+--------------+------------------+-------------------+
1 row in set (0.26 sec)mysql>
3.5、从机:配置需要复制的主机
- 从机上复制主机的命令
- change master to master_host=‘主机的IP地址’ , master_user=‘主机用户名’ ,master_password=‘主机用户名密码’ ,master_log_file=‘rqtanc-bin.具体数字’ ,master_log_pos=具体值
mysql> change master to master_host='192.168.12.130' , master_user='slave' ,master_password='123456' ,master_log_file='rqtanc-bin.000008' ,master_log_pos=965;
Query OK, 0 rows affected, 8 warnings (15.63 sec)
如果之前从机做过同步,则先停止。执行:stop slave;
- 启动 slave 同步
mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.69 sec)
如果之前生成了relay_log信息,则先执行
reset slave;
删除slave数据库的relaylog文件,并重新启用relaylog文件。
- 查看同步状态:show slave status;
mysql> show slave status\G
*************************** 1. row ***************************Slave_IO_State: Connecting to masterMaster_Host: 192.168.12.130Master_User: slaveMaster_Port: 3306Connect_Retry: 60Master_Log_File: rqtanc-bin.000008Read_Master_Log_Pos: 965Relay_Log_File: rqtanc-relay.000001Relay_Log_Pos: 4Relay_Master_Log_File: rqtanc-bin.000008Slave_IO_Running: ConnectingSlave_SQL_Running: YesReplicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0Last_Error: Skip_Counter: 0Exec_Master_Log_Pos: 965Relay_Log_Space: 156Until_Condition: NoneUntil_Log_File: Until_Log_Pos: 0Master_SSL_Allowed: NoMaster_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: NoLast_IO_Errno: 1045Last_IO_Error: error connecting to master 'slave@192.168.12.130:3306' - retry-time: 60 retries: 6 message: Access denied for user 'slave'@'192.168.12.131' (using password: YES)Last_SQL_Errno: 0Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 0Master_UUID: Master_Info_File: mysql.slave_master_infoSQL_Delay: 0SQL_Remaining_Delay: NULLSlave_SQL_Running_State: Slave has read all relay log; waiting for more updatesMaster_Retry_Count: 86400Master_Bind: Last_IO_Error_Timestamp: 240609 02:26:13Last_SQL_Error_Timestamp: Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: Executed_Gtid_Set: Auto_Position: 0Replicate_Rewrite_DB: Channel_Name: Master_TLS_Version: Master_public_key_path: Get_master_public_key: 0Network_Namespace:
1 row in set, 1 warning (0.00 sec)
Last_IO_Error: error connecting to master ‘slave@192.168.12.130:3306’ - retry-time: 60 retries: 6 message: Access denied for user ‘slave’@‘192.168.12.131’ (using password: YES)
用户密码不匹配导致
3.6、主从复制测试
- master
mysql> create database master_slave;
Query OK, 1 row affected (6.06 sec)mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| master_slave |
| mysql |
| performance_schema |
| rqtanc |
| sys |
| test |
+--------------------+
7 rows in set (8.52 sec)mysql> use master_slave;
Database changed
mysql> create table tb_master_slave(id int ,name varchar(10));
Query OK, 0 rows affected (23.40 sec)mysql> insert into tb_master_slave values(1,'rqtanc'),(2,'test');
Query OK, 2 rows affected (17.60 sec)
Records: 2 Duplicates: 0 Warnings: 0
- slave
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| master_slave |
| mysql |
| performance_schema |
| rqtanc |
| sys |
| test |
+--------------------+
7 rows in set (29.71 sec)mysql> use master_slave;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -ADatabase changed
mysql> show tables;
+------------------------+
| Tables_in_master_slave |
+------------------------+
| tb_master_slave |
+------------------------+
1 row in set (0.35 sec)mysql> select * from tb_master_slave;
+------+--------+
| id | name |
+------+--------+
| 1 | rqtanc |
| 2 | test |
+------+--------+
2 rows in set (0.05 sec)
3.7、停止主从复制
- stop slave
mysql> stop slave;
Query OK, 0 rows affected, 1 warning (0.94 sec)
相关文章:
MySQL-主从复制
1、主从复制的理解 在工作用常见Redis作为缓存与MySQL一起使用。当有请求时,首先会从缓存中进行查找,如果存在就直接取出,否则访问数据库,这样 提升了读取的效率,也减少了对后台数据库的访问压力。Redis的缓存架构时高…...
开发没有尽头,尽力既是完美
最近遇到了一些难题,开发系统总有一些地方没有考虑周全,偏偏用户使用的时候“完美复现”了这个隐藏的Bug...... 讲道理创业一年之久为了生存,我一直都有在做复盘,复盘的核心就是:如何提升营收、把控开发质量࿰…...
【手推公式】如何求SDE的解(附录B)
【手推公式】如何求SDE的解(附录B) 核心思路:不直接求VE和VP的SDE的解xt,而是求xt的期望和方差,从而写出x0到xt的条件分布形式(附录B) 论文:Score-Based Generative Modeling throug…...
STM32F103单片机工程移植到航顺单片机HK32F103注意事项
一、简介 作为国内MCU厂商中前三阵营之一的航顺芯片,建立了世界首创超低功耗7nA物联网、万物互联核心处理器浩瀚天际10X系列平台,接受代理商/设计企业/方案商定制低于自主研发十倍以上成本,接近零风险自主品牌产品,芯片设计完成只…...
Llama模型家族之Stanford NLP ReFT源代码探索 (四)Pyvene论文学习
LlaMA 3 系列博客 基于 LlaMA 3 LangGraph 在windows本地部署大模型 (一) 基于 LlaMA 3 LangGraph 在windows本地部署大模型 (二) 基于 LlaMA 3 LangGraph 在windows本地部署大模型 (三) 基于 LlaMA…...
rapidjson 打包过程插入对象
开发过程中遇到一种情况,在打包过程中插入一个字符串(里面是json对象), 官方文档 没看到相关例子,不知道是不是自己粗心没找到。方法RawValue其实是一个通用打包方法,一般情况我们都调用的是String()、Int(…...
NVeloDocx一个基于NVelocity的word模版引擎
NVeloDocx是一个基于NVelocity的Word模版引擎,目前主要是用于E6低代码开发平台供用户轻松制作各种Word报告模版。 有以下优点: 1、完全的NVelocity语法; 2、直接在Word中写NVelocity脚本,使用非常非常方便; 3、完全兼…...
【JavaEE】Spring IoCDI详解
一.基本概念 1.Ioc基本概念 Ioc: Inversion of Control (控制反转), 也就是说 Spring 是⼀个"控制反转"的容器. 什么是控制反转呢? 也就是控制权反转. 什么的控制权发发了反转? 获得依赖对象的过程被反转了也就是说, 当需要某个对象时, 传统开发模式中需要自己通…...
Bean的作用域
singleton : 单例,IOC 容器中只有唯一的 bean 实例。Spring 中的 bean 默认都是单例的,是对单例设计模式的应用。 prototype : 原型,每次获取都会创建一个新的 bean 实例。也就是说,连续 getBean() 两次,得到的是不同…...
卡尔曼滤波器例子
卡尔曼滤波器 卡尔曼滤波器(Kalman Filter)是一种用于线性系统状态估计的递归算法,可以有效地融合传感器数据和系统模型来估计系统的状态。它在机器人学中广泛应用,尤其是位置和速度等状态的估计。通过卡尔曼滤波器,可以有效地估计机器人在二维平面内的真实位置,并减小测…...
Web前端发展路线:深度解析与未来展望
Web前端发展路线:深度解析与未来展望 在数字化时代的浪潮中,Web前端技术日新月异,成为推动互联网行业发展的重要引擎。本文将从四个方面、五个方面、六个方面和七个方面,深入探讨Web前端的发展路线,为您揭示这一领域的…...
Unity3D入门基础知识汇总
1. unity界面 右上边可以切换布局。 左边选择Shaded wireframe,可以看到3D物体的都是由三角形组成的。 2. 物体显示 网格(三角形构成) 材质 3. 资源商店 Windows -> Asset Store 挑出喜欢的资源之后,点击”添加至我的…...
Triton学习笔记
b站链接:合集Triton 从入门到精通 文章目录 算法名词解释:scheduler 任务调度器model instance、inference和requestbatching 一、Triton Inference Server原理1. Overview of Trition2. Design Basics of Trition3. Auxiliary Features of Trition4. A…...
办理公司诉讼记录删除行政处罚记录删除
企业行政处罚记录是可以做到撤销消除的,一直被大多数企业忽略,如果相关诉讼记录得不到及时删除,不仅影响企业招投标,还影响企业的贷款申请,严重的让企业资金链断裂,影响企业长远发展和企业形象。行政处罚是…...
IO流字符流(FileReader与FileWriter)
目录 FileReader 空参read方法 带参read方法👇 FileWriter void write(intc) 写出一个字符 void write(string str) 写出一个字符串 void write(string str,int off,int len) 写出一个字符串的一部分 void write(char[] cbuf) …...
使用 GPT-4 创作高考作文 2024年
使用 GPT-4 创作高考作文 2024年 使用 GPT-4 创作高考作文:技术博客指南 🤔✨摘要引言正文内容(详细介绍) 📚💡什么是 GPT-4?高考作文题目分析 ✍️🧐新课标I卷 人类智慧的进步&…...
计算机网络 期末复习(谢希仁版本)第5章
**屏蔽作用:**运输层向高层用户屏蔽了下面网络核心的细节(如网络拓扑、所采用的路由选择协议等),使应用进程看见的就是好像在两个运输层实体之间有一条端到端的逻辑通信信道。 10. 端口用一个 16 位端口号进行标志,允许…...
CSAPP Lab01——Data Lab完成思路
陪你把想念的酸拥抱成温暖 陪你把彷徨写出情节来 未来多漫长再漫长还有期待 陪伴你 一直到 故事给说完 ——陪你度过漫长岁月 完整代码见:CSAPP/datalab-handout at main SnowLegend-star/CSAPP (github.com) 01 bitXor 这道题是用~和&计算x^y。 异或是两个…...
将小爱音箱接入 ChatGPT 和豆包,改造成你的专属语音助手
网址 https://github.com/idootop/mi-gpt 一个ts的项目,看样子是个纯前端的项目。 演示的挺有意思的,傻妞应该是魔幻手机的角色。感觉能用这个例子的,最少得三十而立了。 个人感觉这种项目都是整活加炫技,估计我要用上这东西&…...
mongodb总概
一、mongodb概述 mongodb是最流行的nosql数据库,由C语言编写。其功能非常丰富,包括: 面向集合文档的存储:适合存储Bson(json的扩展)形式的数据;格式自由,数据格式不固定,生产环境下修改结构都可以不影响程序运行;强大的查询语句…...
【设计模式】策略模式(行为型)⭐⭐
文章目录 1.概念1.1 什么是策略模式1.2 优点与缺点 2.实现方式3. Java 哪些地方用到了策略模式4. Spring 哪些地方用到了策略模式 1.概念 1.1 什么是策略模式 它允许用户在不修改现有对象的代码的情况下向对象添加新的功能;这种模式是通过创建一个包含该对象的包装…...
《软件定义安全》之三:用软件定义的理念做安全
第3章 用软件定义的理念做安全 1.不进则退,传统安全回到“石器时代” 1.1 企业业务和IT基础设施的变化 随着企业办公环境变得便利,以及对降低成本的天然需求,企业始终追求IT集成设施的性价比、灵活性、稳定性和开放性。而云计算、移动办公…...
pdf文件在线压缩网站,pdf文件在线压缩工具软件
在数字化时代的今天,PDF文件已经成为我们日常生活和工作中不可或缺的一部分。然而,随着PDF文件的广泛使用,其文件大小问题也日益凸显。过大的PDF文件不仅占用了大量的存储空间,而且在传输和共享过程中也往往面临诸多不便。因此&am…...
java程序100道21-30
21.定义一个接口A,有一个String的常量值为Java的 s,有void 的print()方法和String 的getInfo()方法,类X是A的实现类,类A的print()方法输出常量s,方法getInfo()返回“Hello!!!” package Exercises.One_Hundred.Demo21; public…...
英伟达SSD视觉算法模型训练、转换与部署
深度学习的训练和推理流程,是先采用高性能图形服务器使用深度学习框架来训练(Training)机器学习算法,研究大量的数据来学习一个特定的场景,完成后得到模型参数,再部署到终端执行机器学习推理(Inference),以训练好的模型从新数据中得出结论。 一般的深度学习项目,训练…...
智能变电站网络报文记录及故障录波分析装置
是基于Intel X86、PowerPC、FPGA等技术的高度集成化的硬件平台,采用了高性能CPU无风扇散热、网络数据采集、高速数据压缩存储加密等多种技术,实现了高性能计算、多端口同步高速数据采集、数据实时分析、大容量数据存储等功能。 ● 在满足工业标准的同时&…...
npm ERR! code E404 npm ERR! 404 Not Found - GET https://registry.npmjs.org/
npm ERR! code E404 npm ERR! 404 Not Found - GET https://registry.npmjs.org/ 📜 智能合约依赖下载失败的解决方案摘要引言正文内容1. 场景描述 🤔2. 可能原因分析2.1 包不存在或名称错误2.2 网络问题2.3 npm配置错误 3. 解决方案🛠️3.1 …...
Dockerfille解析
用于构建Docker镜像的文本,由一条条指令构成 Docker执行Dockerfile的流程 1. Docker从基础镜像执行一个容器 2. 执行一条指令并对容器进行修改 3. 执行类型Docker commit的命令添加一个新的镜像层 4. Docker再基于新的镜像执行一个新的容器 5. 执行Dockerfile中…...
定个小目标之刷LeetCode热题(14)
了解股票的都知道,只需要选择股票最低价格那天购入,在股票价格与最低价差值最大时卖出即可获取最大收益,总之本题只需要维护两个变量即可,minPrice和maxProfit,收益 prices[i] - minPrice,直接用代码描述如下 class …...
智慧管道管理:油气管道可视化的领先应用
通过图扑油气管道可视化技术,实现实时监控与数据分析,快速识别潜在风险,有效提升管道维护效率和安全性能。...
值得买网站模板/室内设计培训哪个机构比较好
本帖最后由 slymitec 于 2020-2-28 19:12 编辑首先一个疑惑就是很多驱动在 Windows 下是需要安装的,但是在 Linux 下确不需要安装,比较常见的解释是Linux内核集成了该驱动。但微软也在Windows安装程序提供了大量驱动,为什么就不集成呢&#x…...
青岛外贸网站制作公司/dw网站制作
问题描述: 假设在数据库中存在以下两张数据表: User表,存放用户的基本信息,基本结构如下所示: 类型说明ID_Userint自动增长字段,用作该表的主键UserNamevarchar UserDepart表,存放用户所拥有的部…...
自学网站开发/娱乐热搜榜今日排名
3G标准并不中立的技术中立论 2000年,我国有自主知识产权的TD-SCDMA标准与欧洲的WCDMA标准、美国的CDMA2000标准共同被国际电信联盟接受为3G的国际标准。由于当时其他两大标准已经进入产品实质研发,而TD-SCDMA标准处于理论方案阶段,因而市场前…...
建设银行官方网站注册/app排名优化公司
从测试描述了解到该问题复现概率较高,因此决定刷最新版本后重新抓份log。果然,seek几次就遇到了问题,查看log并定位到最后一次seek的位置,可以明显的看到如下异常打印: //seekto指令 04-30 12:02:08.840 16164 16164 I…...
微信小程序注册需要多少钱/window优化大师
创建Gradle HelloWord创建Gradle项目编写HelloWorld测试文件 创建Maven HelloWord测试Maven HelloWord测试Gradle HelloWord测试 Gradle项目与Maven项目的不同项目结构不同Maven项目Gradle项目 依赖坐标的不同在Maven中的依赖在Gradle中的依赖 在这里,我通过在IDE…...
网络营销编辑干什么的/九幺seo优化神器
CommonsChunk 插件的作用就是提取代码中的公共代码,然后将公共模块打包到一个独立的文件中,以便在其它的入口和模块中使用,原理就是把多个入口共同的依赖都给定义成一个新入口 多种打包情况: 单一入口,模块单一引用 va…...