mysql主从复制原理及应用
一、主从复制简介
MySQL主从复制是一种异步、基于日志的、单向的数据库复制技术,它通过在主服务器上启用二进制日志并将其发送给一个或多个从服务器,实现了从服务器与主服务器之间的数据同步。主服务器将所有的数据库操作记录到二进制日志中,从服务器会定期或实时地检查主服务器的二进制日志,并将其中的操作应用到本地的MySQL实例中。复制过程可以基于语句、基于行或混合方式实现,并且可以通过多种手段来监测和管理复制延迟,以提高数据的可用性和可靠性。
原理如下:
- 配置主服务器:在主服务器上启用二进制日志,并记录所有的数据库变更操作。每个二进制日志文件都包含一系列数据库操作的记录,这些记录按照时间顺序排列。
- 配置从服务器:在从服务器上启动一个复制进程,该进程连接到主服务器并请求复制数据。从服务器会根据主服务器的配置信息,自动下载并解析主服务器的二进制日志文件,然后将其中的操作应用到本地的MySQL数据库中。
- 复制过程:当主服务器上的数据库发生变化时,这些变化会被记录到二进制日志中。复制进程会定期或实时地检查主服务器的二进制日志,并将其中的新操作复制到从服务器的本地MySQL数据库中。复制过程可以通过多种方式实现,例如:
- 基于语句的复制:复制进程将主服务器上的SQL语句复制到从服务器上执行。
- 基于行的复制:复制进程将主服务器上的数据库行变更操作复制到从服务器上执行。
- 混合复制:复制进程根据操作类型和情况选择使用基于语句的或基于行的复制方式。
- 复制延迟:由于网络延迟、从服务器的负载等原因,从服务器上的数据可能会滞后于主服务器上的数据。这种滞后被称为复制延迟,它可能会对应用程序产生影响。因此,需要监测复制延迟并及时处理。
- 故障转移:如果主服务器发生故障,需要将复制切换到另一个MySQL服务器上。可以通过使用MySQL提供的工具或第三方工具来实现自动或手动的故障转移。
总的来说,MySQL主从复制技术通过将数据从主服务器复制到多个从服务器中,提高了数据的可用性和可靠性。复制过程可以通过多种方式实现,并且可以根据实际情况进行调整和优化,以提高性能和稳定性。
二、主服务器
1.启用二进制日志(binlog)和设置server_id
[root@node1 ~]# vim /etc/my.cnf
log_bin=mysql-bin
server_id=10
# server_id要唯一
2.重启mysql服务
[root@node1 ~]# systemctl restart mysqld
3.创建一个mysql用户,并授予该用户复制权限
mysql> grant replication slave on *.* to 'rep'@'192.168.136.%' identified by '123456';
# 192.168.136.%,表示任何以192.168.136.开头的IP地址都可以连接到MySQL服务器并使用该用户进行复制操作。mysql> show grants for 'rep'@'192.168.136.%'; # 查看用户的授权
4.查看主库状态
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 440 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
5.备份数据库
锁表设置只读:为后面备份准备,注意生产环境要提前申请停机时间。
mysql> flush tables with read lock;
备份数据库的话因为我这个是空的所以就不做备份省略,做备份的话要把主服务器数据上传到从库
三、从服务器
1.启用二进制日志(binlog)和设置server_id
[root@node2 ~]# vim /etc/my.cnf
log_bin=msyql_bin
server_id = 11
2.重启mysql服务
[root@node2 ~]# systemctl restart mysqld
3.设定主库同步
mysql> change master to-> master_host='192.168.136.161',-> master_user='rep',-> master_password='123456',-> master_log_file='mysql-bin.000001',-> master_log_pos=440;
Query OK, 0 rows affected, 2 warnings (0.01 sec)
4.启动从库同步并检查状态
mysql> start slave;
Query OK, 0 rows affected (0.01 sec)mysql> show slave status\G;# 查看这两参数是否是yes,如果不是查看mysql日志
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
三、测试同步
1.创建一张表,并插入数据
mysql> CREATE TABLE student (-> id INT(10) NOT NULL UNIQUE PRIMARY KEY ,-> name VARCHAR(20) NOT NULL ,-> sex VARCHAR(4) ,-> birth YEAR,-> department VARCHAR(20) ,-> address VARCHAR(50) -> );
Query OK, 0 rows affected (0.02 sec)
mysql> INSERT INTO student VALUES( 901,'张老大', '男',1985,'计算机系', '北京市海淀区');
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO student VALUES( 902,'张老二', '男',1986,'中文系', '北京市昌平区');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO student VALUES( 903,'张三', '女',1990,'中文系', '湖南省永州市');
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO student VALUES( 904,'李四', '男',1990,'英语系', '辽宁省阜新市');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO student VALUES( 905,'王五', '女',1991,'英语系', '福建省厦门市');
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO student VALUES( 906,'王六', '男',1988,'计算机系', '湖南省衡阳市');
Query OK, 1 row affected (0.01 sec)
2.分别在主库和从库查看数据是否同步
# 主库:
mysql> select * from student;
+-----+-----------+------+-------+--------------+--------------------+
| id | name | sex | birth | department | address |
+-----+-----------+------+-------+--------------+--------------------+
| 901 | 张老大 | 男 | 1985 | 计算机系 | 北京市海淀区 |
| 902 | 张老二 | 男 | 1986 | 中文系 | 北京市昌平区 |
| 903 | 张三 | 女 | 1990 | 中文系 | 湖南省永州市 |
| 904 | 李四 | 男 | 1990 | 英语系 | 辽宁省阜新市 |
| 905 | 王五 | 女 | 1991 | 英语系 | 福建省厦门市 |
| 906 | 王六 | 男 | 1988 | 计算机系 | 湖南省衡阳市 |
+-----+-----------+------+-------+--------------+--------------------+
6 rows in set (0.00 sec)
# 从库
mysql> select * from student;
+-----+-----------+------+-------+--------------+--------------------+
| id | name | sex | birth | department | address |
+-----+-----------+------+-------+--------------+--------------------+
| 901 | 张老大 | 男 | 1985 | 计算机系 | 北京市海淀区 |
| 902 | 张老二 | 男 | 1986 | 中文系 | 北京市昌平区 |
| 903 | 张三 | 女 | 1990 | 中文系 | 湖南省永州市 |
| 904 | 李四 | 男 | 1990 | 英语系 | 辽宁省阜新市 |
| 905 | 王五 | 女 | 1991 | 英语系 | 福建省厦门市 |
| 906 | 王六 | 男 | 1988 | 计算机系 | 湖南省衡阳市 |
+-----+-----------+------+-------+--------------+--------------------+
6 rows in set (0.00 sec)
# 主从同步成功
相关文章:
mysql主从复制原理及应用
一、主从复制简介 MySQL主从复制是一种异步、基于日志的、单向的数据库复制技术,它通过在主服务器上启用二进制日志并将其发送给一个或多个从服务器,实现了从服务器与主服务器之间的数据同步。主服务器将所有的数据库操作记录到二进制日志中,…...
《Kubernetes故障篇:unable to retrieve OCI runtime error》
一、背景信息 1、环境信息如下: 操作系统K8S版本containerd版本Centos7.6v1.24.12v1.6.12 2、报错信息如下: Warning FailedCreatePodSandBox 106s (x39 over 10m) kubelet (combined from similar events): Failed to create pod sandbox: rpc error: …...
el-upload上传图片和视频,支持预览和删除
话不多说, 直接上代码: 视图层: <div class"contentDetail"><div class"contentItem"><div style"margin-top:5px;" class"label csAttachment">客服上传图片:</div><el…...
clickhouse MPPDB数据库 运维实用SQL总结III
文章目录 CH问题处理使用remote函数报URL "xxxx:9000" is not allowed in configuration fileclickhouse MPPDB数据库 运维实用SQL总结 clickhouse MPPDB数据库 运维实用SQL总结II clickhouse MPPDB数据库 运维实用SQL总结III CH server相关的配置参见 : clickhous…...
ARM和MIPS的区别
ARM和MIPS的区别主要有以下几方面: 指令集:ARM支持32位和64位指令,而MIPS同时支持32位和64位指令。除法器:MIPS有专门的除法器,可以执行除法指令,而ARM没有。寄存器:MIPS的内核寄存器比ARM多一…...
TypeScript -- 类
文章目录 TypeScript -- 类TS -- 类的概念创建一个简单的ts类继承 public / private / protected-- 公共/私有/受保护的public -- 公共private -- 私有的protected -- 受保护的 其他特性readonly -- 只读属性静态属性 -- static修饰ts的getter /setter抽象类abstract TypeScrip…...
【LeetCode】124.二叉树中的最大路径和
题目 二叉树中的 路径 被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。 路径和 是路径中各节点值的总和。 给你一个二叉树的根节点 root &…...
Linux命令总结
1.目录相关命令 绝对路径: 如/etc/init.d当前目录和上层目录: ./ …/主目录: ~/切换目录: c 2.进程相关命令 查看当前进程: ps ps -ef(system v 输出)ps -aux bsd 格式输出ps -ef|grep pid 执…...
SpringBoot临时属性设置
在Spring Boot中,可以通过设置临时属性来覆盖应用程序中定义的属性。这在某些情况下很有用,例如在命令行中指定配置参数或在测试环境中覆盖默认值。 你可以使用--(双破折号)语法来设置临时属性。以下是一些示例: 1. …...
【Python小知识】如何解决代理IP在多线程环境下的并发问题?
前言 在多线程环境下,使用代理IP可能会出现并发问题。具体而言,多个线程可能同时使用同一个代理IP,导致代理IP被封禁或无法访问。为了解决这个问题,我们需要使用一个代理IP池来管理可用的代理IP,并在多线程环境下动态…...
redis常见面试汇总
目录 Redis 适合的场景 Redis 不适合的场景 3、Redis 有哪些常见的功能? 什么是缓存穿透?怎么解决? 什么是缓存雪崩?该如何解决? 参考文献: Redis 适合的场景 缓存:减轻 MySQL 的查询压力…...
子数组的解释与专题
子数组:指在一个数组中,选择一些连续的元素组成的新数组。 例题一:6900. 统计完全子数组的数目 给你一个由 正 整数组成的数组 nums 。 如果数组中的某个子数组满足下述条件,则称之为 完全子数组 : 子数组中 不同 …...
PHP: 开发入门macOS系统下的安装和配置
安装Homebrew 安装 ~~友情提示:这个命令对网络有要求,可能需要翻墙或者用你的手机热点试试,或者把DNS换成(114.114.114.114 和 8.8.8.8) /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebr…...
在CentOS下安装docker
1)在Cent OS安装docker先有一个Cent OS 7.6系统 这个很重要,不同版本按照的时候是不一样的。 2)查看CentOS版本 cat /etc/redhat-releas 3)用root账户登录进去配置国内yum源 wget -O /etc/yum.repos.d/CentOS-Base.repo http:…...
[JavaWeb]SQL介绍-DQL查询数据
SQL介绍-DQL查询数据 一.基础查询二.条件查询三.排序查询1.聚合函数2.分组查询 四.分页查询 DQL查询基础的语法结构如下: SELECT字段列表 FROM表名列表 WHERE条件列表 GROUP BY分组字段 HAVING分组后条件 ORDER BY排序字段 LIMIT分页限定一.基础查询 说明语法查询…...
[containerd] 在Windows上使用IDEA远程调试containerd, ctr, containerd-shim
文章目录 1. containerd安装2. 源码编译3. 验证编译的二进制文件是否含有调试需要的信息3.1. objdump工具验证3.2. file工具验证3.3. dlv工具验证 4. debug 1. containerd安装 [Ubuntu 22.04] 安装containerd 2. 源码编译 主要步骤如下: 1、从github下载containe…...
Verilog语法学习——LV4_移位运算与乘法
LV4_移位运算与乘法 题目来源于牛客网 [牛客网在线编程_Verilog篇_Verilog快速入门 (nowcoder.com)](https://www.nowcoder.com/exam/oj?page1&tabVerilog篇&topicId301) 题目 题目描述: 已知d为一个8位数,请在每个时钟周期分别输出该数乘1/…...
打卡力扣题目九
#左耳听风 ARST 打卡活动重启# 目录 一、问题 二、解题方法一 三、解题方法二 四、两种方法的区别 关于 ARTS 的释义 —— 每周完成一个 ARTS: ● Algorithm: 每周至少做一个 LeetCode 的算法题 ● Review: 阅读并点评至少一篇英文技术文章 ● Tips: 学习至少一个…...
Python零基础入门(九)——函数,类和对象
系列文章目录 个人简介:机电专业在读研究生,CSDN内容合伙人,博主个人首页 Python入门专栏:《Python入门》欢迎阅读,一起进步!🌟🌟🌟 码字不易,如果觉得文章不…...
在linux上面部署activemq
1、下载 网址:ActiveMQ 注意:新版本5.17起 要求jdk11, 5.16兼容jdk8, 所以,确保已经安装 java11 或以上的版本 这里安装较新版:5.18.2,已经安装了java17 如何安装jdk17,请详见我的另一篇文章:linux…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...
Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...
使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...
最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...
跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...
SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...
DingDing机器人群消息推送
文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人,点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置,详见说明文档 成功后,记录Webhook 2 API文档说明 点击设置说明 查看自…...
