mysql主从架构

news2024/11/29 0:38:38

mysql主从架构是一套非常基础的高可用架构,主要依赖复制技术来实现。

1.复制原理

mysql复制功能主要使用三个线程实现:

1.Binary log dump thread(二进制日志转储线程):当副本连接时发送二进制日志

2.Replication I/O receiver thread(复制 I/O 接收器线程): I/O(接收器)线程,连接到源服务器要求它发送其二进制日志中记录的更新,复制源服务器发送的二进制日志保存到中继日志(relay log)

3.Replication SQL applier thread (复制 SQL 应用程序线程):复制中继日志并执行其中包含的记录

 

  1. 主库执行DDL、DML更新binlog
  2. 二进制日志转储线程检测到binlog更新主动发送binlog给从库
  3. 从库I/O线程接收到binlog后写入到relaylog中
  4. 从库SQL线程检测到relaylog更新,复制relaylog到SQL线程并执行SQL。 

 

2.配置主从

1.主库建立唯一的服务器 ID 

mysql> SET GLOBAL server_id = 2; 

持久化修改:

在/etc/my.cnf添加server-id = 2

 

查看server_id变量 

mysql> show global variables like 'server_id'; 

2.主库开启二进制日志

查看二进制日志是否开启

mysql> SHOW VARIABLES LIKE 'log_bin';

除了使用mysqld命令启动mysql二进制日志是默认不开启的,其他情况都是二进制日志默认是开启的

如果不开启,需要修改/etc/my.cnf配置文件

在[mysqld]添加

log_bin=ON

重启mysql 

3.创建复制用户

mysql> CREATE USER 'repl'@'%' IDENTIFIED BY '123456';

mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';

查看用户

mysql> select Host,User from mysql.user; 

4.获取主库二进制日志坐标 

先锁表,阻止InnoDB进行Commit操作,待副本复制好后可以释放锁,保证主库和从库的数据一致性(会话退出也会自动释放锁)

 mysql> FLUSH TABLES WITH READ LOCK;

确定当前二进制日志文件名和位置 

 mysql> SHOW MASTER STATUS\G

 

5.对主库进行快照

可以选择物理备份、逻辑备份等方法。。。

我这里用的是docker,我直接对主库容器进行镜像,再用这个镜像开启容器作为mysql从库

查看容器

创建镜像

docker commit 10d74d587551 mysql8-slave 

查看镜像

 释放主库的read lock

mysql> UNLOCK TABLES;

 6.启动从库

docker run --name=mysql8-slave10  --restart on-failure -p 3310:3306 -d mysql8-slave:latest

连接上从库服务器

docker exec -it mysql8-slave10 bash 

修改从库的server_id

 SET GLOBAL server_id = 21;

持久化修改:

在/etc/my.cnf添加server-id = 21 

 

从库如果不需要binlog可以关闭该功能,毕竟开启需要消耗资源

如果这个从库是用作备份或者故障恢复等需要用到binlog可以开启binlog

 关闭从库binlog

在/etc/my.cnf添加

[mysqld]
# 关闭二进制日志
skip-log-bin

 7.在从库设置主库复制信息

MySQL 8.0.23之前使用这种格式:

mysql> CHANGE MASTER TO

-> MASTER_HOST='source_host_name',

-> MASTER_USER='replication_user_name',

-> MASTER_PASSWORD='replication_password',

-> MASTER_LOG_FILE='recorded_log_file_name',

-> MASTER_LOG_POS=recorded_log_position;

MySQL 8.0.23之后使用这种格式:

mysql> CHANGE REPLICATION SOURCE TO

-> SOURCE_HOST='source_host_name',

-> SOURCE_USER='replication_user_name',

-> SOURCE_PASSWORD='replication_password',

-> SOURCE_LOG_FILE='recorded_log_file_name',

-> SOURCE_LOG_POS=recorded_log_position

 我连接的是本机的3309端口

CHANGE REPLICATION SOURCE TO SOURCE_HOST='10.0.12.12',SOURCE_USER='repl',SOURCE_PASSWORD='123456',master_port=3309,SOURCE_LOG_FILE='mysql-bin.000001',SOURCE_LOG_POS=1284;

 8.从库启动slave

mysql> start slave;

查看slave状态

mysql> SHOW SLAVE STATUS\G 

我第一次启动发现启动失败

报错:

Last_IO_Error: Error connecting to source 'repl@10.0.12.12:3309'. This was attempt 1/86400, with a delay of 60 seconds between attempts. Message: Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection.

意思是连接失败 ,需要caching_sha2_password安全连接

从MySQL 8.0 中, 默认身份验证插件caching_sha2_password

解决办法:

重新设置主库复制信息,加上了主库公钥的位置获取公钥:

CHANGE REPLICATION SOURCE TO SOURCE_HOST='10.0.12.12',SOURCE_USER='repl',SOURCE_PASSWORD='123456',master_port=3309,SOURCE_LOG_FILE='mysql-bin.000001',SOURCE_LOG_POS=1284,Master_public_key_path='/var/lib/mysql/public_key.pem',Get_master_public_key=1;

 

再次启动又出现错误:

 Last_IO_Error: Fatal error: The replica I/O thread stops because source and replica have equal MySQL server UUIDs; these UUIDs must be different for replication to work.

 意思是主库和从库的MySQL服务器UUID相同了

解决办法:

删除从库的UUID,重启从库重新生成UUID

 rm -rf /var/lib/mysql/auto.cnf 

 

 这两个为yes表示启动成功

 

9.测试

主库操作 

mysql> create database mytest;
Query OK, 1 row affected (0.02 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| mytest             |
| performance_schema |
| sys                |
| test888            |
+--------------------+
6 rows in set (0.03 sec)

从库同步 

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| mytest             |
| performance_schema |
| sys                |
| test888            |
+--------------------+
6 rows in set (0.00 sec)

3.主从数据一致性

主从架构是对主库DDL、DML操作会同步到从库,但是对从库 DDL、DML操作不会同步到主库,这就会造成主从数据不一致了。

如果从库存在一条在主库没有的数据,那么主库插入相同的数据同步到从库时会报错。 

 怎么解决?

1.跳过错误继续同步

 如果这些不同步数据对业务没有影响可以选择跳过错误

(1)在主库锁表

FLUSH TABLES WITH READ LOCK;

(2) 停掉从库slave

stop slave;

(3)从库设置跳过命令 

set global sql_slave_skip_counter = 1;  # 跳过一次 

(4)从库启动slave 

start slave;

(5)主库释放锁 

 UNLOCK TABLES;

 

2.重做主从架构

重新保持主库一致性

(1)主库锁表

 FLUSH TABLES WITH READ LOCK;

(2)逻辑备份主库 

mysqldump -uroot -p123456 --all-databases -A >> all.sql 

(3)把主库数据全部导入从库中

mysql -uroot -p123456 < all.sql 

(4)主库释放锁 

UNLOCK TABLES;

 

 4.主从延迟

查看是否有延迟

 mysql> show slave status\G

 

Seconds_Behind_Master为0表示没有延迟,数值越高表示延迟越高。 

 

 

 

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

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

相关文章

glibc 里的线程 id

这里讲的是通过 pthread_create() 函数返回的线程 id&#xff0c;其实就是 glibc 库里维护的线程id&#xff0c;它跟内核维护的线程 id 不一样&#xff0c;pthread_create() 返回的线程 id 并不一定是唯一的。我们看 pthread_create 函数的源码&#xff0c;它最后返回的线程 id…

【数据分享】2000-2020年我国地级市旅游指标(6项指标/Excel格式/Shp格式)

旅游产业的发展情况是一个城市经济和文化影响力的重要指标&#xff0c;我们在很多研究中都会用到旅游相关的数据&#xff0c;之前我们也分享过一些相关数据&#xff0c;比如1978-2020年的中国旅游统计年鉴和2023年14847条的全国A级景区数据&#xff08;均可查看之前的文章获悉详…

Monarch Mixer:介绍一种性能比Transformer更强的网络架构

六年前&#xff0c;谷歌团队在arXiv上发表了革命性的论文《Attention is all you need》。作为一种优势的机器学习网络架构&#xff0c;Transformer技术迅速席卷全球。Transformer一直是现代基础模型背后的主力架构&#xff0c;并且在不同的应用程序中取得了令人印象深刻的成功…

vue2 集成 - 超图-SuperMap iClient3D for WebGL

1:下载SuperMap iClient3D for WebGL SuperMap iClient3D for WebGL产品包 打开资源目录如下 2:格式化项目中所用的依赖包 开发指南 从超图官网下载SuperMap iClient3D 11i (2023) SP1 for WebGL_CN.zip解压后,将Build目录下的SuperMap3D复制到项目中 \public\static…

Kmeans特征降维方法

文章目录 一、特征降维方法二、数据集介绍三、聚类问题及实现方法四、代码 一、特征降维方法 提取主要特征&#xff0c;忽略次要特征【PCA降维】合并相似特征【特征合并】 PCA主成分提取其实还是会忽略掉一些信息&#xff0c;有时候感觉聚类后的结果并不理想&#xff0c;所以…

非农数据不及预期,美元回落金价触及2000关口

上周五美国非农数据公布&#xff0c;现货黄金短线拉升近16美元&#xff0c;金价突破2000关口最高至2003.55美元/盎司&#xff0c;但随后金价转头回落&#xff0c;最终报收1992.19美元/盎司&#xff0c;涨幅收窄至0.34%。周线级别金价下跌0.61%&#xff0c;金价终止之前连续三周…

助力青少年学习,亚马逊云科技2024年全球人工智能和机器学习奖学金计划正式启动

云未来将以何种方式发展&#xff1f;方向握在意气风发的少年们手中。近日&#xff0c;亚马逊云科技全球人工智能和机器学习&#xff08;AI和ML&#xff09;奖学金计划在中国区的首次颁奖以及2024年启动仪式在北京中学正式举行&#xff0c;有45名学子凭借杰出的学业成绩、对人工…

【Linux】简单部署Yearning并结合内网穿透实现公网访问

文章目录 前言1. Linux 部署Yearning2. 本地访问Yearning3. Linux 安装cpolar4. 配置Yearning公网访问地址5. 公网远程访问Yearning管理界面6. 固定Yearning公网地址 前言 Yearning 简单&#xff0c;高效的MYSQL 审计平台 一款MYSQL SQL语句/查询审计工具&#xff0c;为DBA与开…

Centos7上Python克隆与对网页完整截图

有用的话谢谢点赞~ 安装Python3.11 cd /root wget https://www.python.org/ftp/python/3.11.0/Python-3.11.0.tgz tar -xzf Python-3.11.0.tgz yum -y install gcc zlib zlib-devel libffi libffi-devel yum install readline-devel yum install openssl-devel openssl11 ope…

TCP/IP协议群

TCP/IP协议群 什么是TCP/IP协议群 从字面意义上讲&#xff0c;有人可能会认为 TCP/IP 是指 TCP 和 IP 两种协议。实际生活当中有时也确实就是指这两种协议。然而在很多情况下&#xff0c;它只是利用 IP 进行通信时所必须用到的协议群的统称。具体来说&#xff0c;IP 或 ICMP、…

AI:62-基于深度学习的人体CT影像肺癌的识别与分类

🚀 本文选自专栏:AI领域专栏 从基础到实践,深入了解算法、案例和最新趋势。无论你是初学者还是经验丰富的数据科学家,通过案例和项目实践,掌握核心概念和实用技能。每篇案例都包含代码实例,详细讲解供大家学习。 📌📌📌在这个漫长的过程,中途遇到了不少问题,但是…

MMdetection3.x个人笔记

1.在自定义数据集用训练出的权重进行可视化推理 input(jpg文件) model_config 这两个可以不用加前面的形参 然后用 \ 隔开 写上 --weight xx.pth python demo/image_demo.py data/coco_duck/train2017/10640.jpg work_dirs/solov2_r50_fpn_1x_coco/solov2_r50_fpn_1x_coco…

【MATLAB源码-第68期】基于matlab的802.11b 11Mbps CCK调制解调误码率仿真。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 当涉及802.11b无线局域网&#xff08;Wi-Fi&#xff09;标准时&#xff0c;CCK&#xff08;Complementary Code Keying&#xff09;调制解调技术起着关键作用。下面解释一下CCK在802.11b中的工作原理和特点&#xff1a; 1. 数…

【QT】设置焦点及光标位置

很高兴在雪易的CSDN遇见你 ,给你糖糖 欢迎大家加入雪易社区-CSDN社区云 前言 本文分享Qt中如何设置焦点和光标位置的解决方案,并给出常见的问题解决方案,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(…

22款奔驰GLE450升级几何多光束大灯 车辆自检等功能

每个大灯配备的84个LED灯可确保提供最佳的道路照明&#xff0c;从而始终确保照明灯能够在需要时准确开启。利用位于风挡玻璃后方的摄像头提供的信息&#xff0c;4个控制单元能够以每秒100次的速度计算出理想的灯光模式 驾驶员能够全神贯注于交通状况&#xff0c;无需频繁切换近…

PyCharm 无法登陆 Codeium 的解决方法

PyCharm 登陆 Codeium PyCharm 无法登陆 Codeium 的问题描述PyCharm 使用 token 登陆 Codeium PyCharm 无法登陆 Codeium 的问题描述 使用 PyCharm 登录 Codeium 时&#xff0c;单击 Login 无反应&#xff0c;单击侧边栏的 Codeium 图标也一直显示连接失败。 PyCharm 使用 to…

0.为什么要学c++高性能部署

1.为什么学 python用于训练和demo&#xff0c;c用来部署&#xff0c;是最好的匹配模式。在实际的项目中&#xff0c;python做产品&#xff0c;尤其是需要多线程的&#xff0c;因为GIL锁的限制&#xff0c;劣势非常大&#xff0c;作为胶水语言&#xff0c;性能也比不上c。总结&a…

ModbusTcp通信(S7-1200PLC作为服务器端)

S7-200Smart plc作为ModbusTcp服务器端的通信 S7-200SMART PLC ModbusTCP通信(ModbusTcp服务器)_s7-200 modbustcp-CSDN博客文章浏览阅读2.3k次。S7-200SMART PLC 作为ModbusTCP通信(客户端)编程应用和程序详细讲解可以查看下面的博客,链接地址如下:S7-200SMART PLC Modbus…

以订单退款流程为例,聊聊如何优化策略模式

如果有人问你什么是策略模式&#xff1f;你可以尝试这样回答 策略模式是一种行为设计模式&#xff0c;它允许在运行时根据不同的情况选择不同的算法策略。这种模式将算法的定义与使用的代码分离开来&#xff0c;使得代码更加可读、可维护和可扩展。 在策略模式中&#xff0c;通…