MySQL 主从搭建
文章目录
- 前言
- 一、MySQL 主从是什么?
- 二、通过 Docker 部署
- 三、配置主从关系
- 四、实际情况分析&解决方案
- 五、常见问题处理
- 1、CLONE需要版本不同
- 2、CLONE需要参数相同
- 总结
前言
MySQL 主从搭建
操作系统:CentOS Linux release 7.9.2009 (Core)
操作系统镜像:CentOS-7-x86_64-Minimal-2009.iso
MySQL 版本:8.0.32
测试方式:Docker
Docker 版本:24.0.2 (Docker Engine - Community)
Docker 相关说明可以参考之前的文章
一、MySQL 主从是什么?
关于 MySQL 主从是什么,请参考这篇文章,感觉大神介绍的非常详尽!手动点赞!!!
二、通过 Docker 部署
# master 主节点
docker run -p 10001:3306 --name mysql_master --restart=always -e MYSQL_ROOT_PASSWORD='master' -d mysql:8.0.32 --server-id=100 --log_bin=master-bin --binlog_format=row --expire_logs_days=7 --max_binlog_size=100M --binlog_cache_size=4m --max_binlog_cache_size=512m
# slave 从节点
docker run -p 10002:3306 --name mysql_slave --restart=always -e MYSQL_ROOT_PASSWORD='slave' -d mysql:8.0.32 --server-id=101 --log_bin=slave-bin --binlog_format=row --expire_logs_days=7 --max_binlog_size=100M --binlog_cache_size=4m --max_binlog_cache_size=512m
说明:
- 仅为示例,生产环境不推荐使用 Docker 环境部署 MySQL。频繁重启容易导致数据异常
- 搭建主从,需要开启 binlog,主从关系是通过 binlog 进行数据同步的
- binlog 会比较大,所以需要设置保存时长,文件大小等相关参数(应根据实际情况进行配置)
三、配置主从关系
1、主节点
# 进入容器
docker exec -it mysql_master bash
# 连接
mysql -uroot -pmaster
-- 创建账户,提供给从节点进行数据同步
CREATE USER 'master_user_sync'@'%' IDENTIFIED WITH mysql_native_password BY 'sync';
FLUSH PRIVILEGES;
GRANT REPLICATION SLAVE ON *.* TO 'master_user_sync'@'%';
GRANT REPLICATION CLIENT ON *.* TO 'master_user_sync'@'%';
GRANT BACKUP_ADMIN ON *.* TO 'master_user_sync'@'%';
FLUSH PRIVILEGES;
2、从节点
# 进入容器
docker exec -it mysql_slave bash
# 连接
mysql -uroot -pslave
-- 设置为只读
mysql> set global read_only=1;
Query OK, 0 rows affected (0.00 sec)-- 设置 Master
change master to master_host='master_ip',master_port=10001,master_user='master_user_sync',master_password='sync',master_log_file='master-bin.000001', -- 开始的文件master_log_pos=0; -- 开始的位置
-- 示例
mysql> change master to master_host='master_ip',-> master_port=10001,-> master_user='master_user_sync',-> master_password='sync',-> master_log_file='master-bin.000003', -- CLONE 到的文件-> master_log_pos=1478; -- CLONE 到的位置
Query OK, 0 rows affected, 9 warnings (0.05 sec)-- 启动 Slave
mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.17 sec)-- 查看状态
mysql> show slave status\G
*************************** 1. row ***************************Slave_IO_State: Waiting for source to send eventMaster_Host: master_ipMaster_User: master_user_syncMaster_Port: 10001Connect_Retry: 60Master_Log_File: master-bin.000003Read_Master_Log_Pos: 1478Relay_Log_File: 0e3d59342a9e-relay-bin.000002Relay_Log_Pos: 327Relay_Master_Log_File: master-bin.000003Slave_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: 0Last_Error:Skip_Counter: 0Exec_Master_Log_Pos: 1478Relay_Log_Space: 544Until_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: 0
Master_SSL_Verify_Server_Cert: NoLast_IO_Errno: 0Last_IO_Error:Last_SQL_Errno: 0Last_SQL_Error:Replicate_Ignore_Server_Ids:Master_Server_Id: 100Master_UUID: 3f9a8fa7-2694-11ee-bf3c-0242ac110003Master_Info_File: mysql.slave_master_infoSQL_Delay: 0SQL_Remaining_Delay: NULLSlave_SQL_Running_State: Replica has read all relay log; waiting for more updatesMaster_Retry_Count: 86400Master_Bind:Last_IO_Error_Timestamp:Last_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)
四、实际情况分析&解决方案
实际情况:生产环境中,可能最开始并未建立主从关系,并且主节点已使用一段时间,已存在历史数据。
问题:binlog 会定期清理,历史数据不全。也可能主节点并未开启 binlog。无法直接建立主从管理。
推荐方案:先不要着急建立主从关系。从节点搭建好,需要先完成数据同步,推荐使用 CLONE 方法。然后再建立主从关系,并启用数据同步(CLONE 会返回位置信息)。
# CLONE 需要先启用插件,Docker 部署可以通过增加参数实现
# --plugin-load-add=mysql_clone.so
-- 通过此 SQL 可以确认是否启用 CLONE 插件
mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME = 'clone';
+-------------+---------------+
| PLUGIN_NAME | PLUGIN_STATUS |
+-------------+---------------+
| clone | ACTIVE |
+-------------+---------------+
1 row in set (0.00 sec)
-- CLONE 方法
mysql> set global clone_valid_donor_list="master_ip:10001";
mysql> CLONE INSTANCE FROM 'master_user_sync'@'master_ip':10001 IDENTIFIED BY 'sync';
-- CLONE 完成后,容器会自动重启
特别注意
:CLONE 把账号、密码也同步了。因此从节点的 root 密码会变更为主节点的 root 密码。
-- 验证是否 CLONE 成功
mysql> select * from performance_schema.clone_status\G
*************************** 1. row ***************************ID: 1PID: 0STATE: Completed -- Completed 数据同步已完成BEGIN_TIME: 2023-07-20 00:31:12.592END_TIME: 2023-07-20 00:31:20.192SOURCE: master_ip:10001DESTINATION: LOCAL INSTANCEERROR_NO: 0ERROR_MESSAGE:BINLOG_FILE: master-bin.000003 -- 从节点配置参数 master_log_file
BINLOG_POSITION: 1478 -- 从节点配置参数 master_log_posGTID_EXECUTED:
1 row in set (0.01 sec)
五、常见问题处理
1、CLONE需要版本不同
问题:不同版本 CLONE 有异常,相同版本正常(都是 8.0.32 没有问题)。但是,可以正常建立主从关系。
解决方案:统一版本(不用 CLONE ,也建议主从统一版本)
示例:
master 8.0.32
slave 8.0.29
mysql> set global clone_valid_donor_list="master_ip:10001";
mysql> CLONE INSTANCE FROM 'master_user_sync'@'master_ip':10001 IDENTIFIED BY 'sync';
ERROR 3867 (HY000): Clone Donor collation: utf8mb4_nb_0900_ai_ci is unavailable in Recipient.
2、CLONE需要参数相同
问题:因为参数不同,导致 CLONE 之后服务启动报错,导致服务无法启动
解决方案:统一参数
示例:lower_case_table_names 一个节点配置为 0,另一个节点配置为 1
MySQL 启动异常信息如下
[ERROR] *** Different lower_case_table_names settings for server ('0') and data dictionary ('1')
[ERROR] *** Data Dictiongary initialization failed.s
总结
以上即为全部内容。至于测试部分,就不磨叽了,直接在主节点操作,从节点可以直观看出变化。
总体上来说,配置并不算复杂,但是需要思路比较清晰!不过故障处理起来,会稍微麻烦一点,需要注意数据一致性的问题!
相关文章:
MySQL 主从搭建
文章目录 前言一、MySQL 主从是什么?二、通过 Docker 部署三、配置主从关系四、实际情况分析&解决方案五、常见问题处理1、CLONE需要版本不同2、CLONE需要参数相同 总结 前言 MySQL 主从搭建 操作系统:CentOS Linux release 7.9.2009 (Core) 操作系…...

国内GitHub加速访问工具-Fetch GitHub Hosts
一、工具介绍 Fetch GitHub Hosts是一款开源跨平台的国内GitHub加速访问工具,主要为解决研究及学习人员访问 Github 过慢或其他问题而提供的 Github Hosts 同步工具。 项目原理:是通过部署此项目本身的服务器来获取 github.com 的 hosts,而…...

Webpack5新手入门简单配置
1.初始化项目 yarn init -y 2.安装依赖 yarn add -D webpack5.75.0 webpack-cli5.0.0 3.新建index.js 说明:写入下面的一句话 console.log("hello webpack"); 4.执行命令 说明:如果没有安装webpack脚手架就不能执行yarn webpack(…...
基于ali-oss实现不同类型文件上传不同的bucket
基于ali-oss实现不同类型文件上传不同的bucket,并根据大小选择直接上传还是分片上传 1 配置OSS2 引入依赖3 上传核心代码4 文件回显 1 配置OSS 可以看阿里云文档 ps:记得配置跨域 2 引入依赖 pnpm install ali-oss -save3 上传核心代码 import OSS from "ali-oss"…...
域名校验?反爬界的掩耳盗铃!
这一集我们讲一个比较简单的域名校验,可能你没有听过这个名字,因为这个名字是我编的,那么它究竟是什么呢?又为什么说它是掩耳盗铃呢?我们来看看下面的案例: 必应搜索页隐藏内容虎嗅新闻跳转404 import re…...

Cesium 实战教程 - 调整 3dtiles 倾斜摄影大小
Cesium 实战教程 - 调整 3dtiles 倾斜摄影大小 核心代码完整代码在线示例 之前由于误解遇到一个特殊的需求:想要把三维球上叠加倾斜摄影进行自由放大缩小,跟随地图的缩放进行缩放。 后来经过搜索、尝试,终于实现了需求。 但是,后…...

python机器学习(七)决策树(下) 特征工程、字典特征、文本特征、决策树算法API、可视化、解决回归问题
决策树算法 特征工程-特征提取 特征提取就是将任意数据转换为可用于机器学习的数字特征。计算机无法直接识别字符串,将字符串转换为机器可以读懂的数字特征,才能让计算机理解该字符串(特征)表达的意义。 主要分为:字典特征提取(特征离散化)…...

数据结构与算法中的双向链表
链表概念在现实世界中使用得很普遍。当我们使用 Spotify 播放队列中的下一首歌曲时,我们学到的单链表的概念就开始发挥作用。但是要播放队列中的上一首歌曲到底可以做什么呢? 在这篇博客中,我们将了解与数据结构相关的另一个概念,…...

数据安全治理的关键-数据分类分级工具
强大的资产发现能力 多种资产发现方式的组合应用,能够最大程度地提高资产发现能力。 灵活的敏感数据分类分级规则 内置丰富的敏感数据分类分级规则,支持正则表达式、关键词组、非结构化指纹、结构化指纹、机器聚类等多种匹配方式,并且规则…...

Spring集成Junit
目录 1、简介 2、Junit存在的问题 3、回顾Junit注解 4、集成步骤 4.1、导入坐标 4.2、Runwith 4.3、ContextConfiguration 4.4、Autowired 4.5、Test 4.6、代码 5、补充说明 5.1、Runwith 5.2、BlockJUnit4ClassRunner 5.3、没有配置Runwith ⭐作者介绍࿱…...

Java正则校验密码至少包含:字母数字特殊符号中的2种
一、语法 字符说明\将下一字符标记为特殊字符、文本、反向引用或八进制转义符。例如, n匹配字符 n。\n 匹配换行符。序列 \\\\ 匹配 \\ ,\\( 匹配 (。^匹配输入字符串开始的位置。如果设置了 RegExp 对象的 Multiline 属性,^ 还会与"\n…...

Stable Diffusion教程(6) - 扩展安装
打开stable diffusion webUI界面 加载插件列表 依次点击扩展->可用->加载自 搜索插件 首先在搜索框输入你要安装的插件,然后点击插件后面的安装按钮 如果你需要的插件这里面没有找到,可通过通网址安装的方式安装。 在git仓库网址输入框输入的你插件…...

Jenkins通过OpenSSH发布WinServer2016
上一篇文章> Jenkins集成SonarQube代码质量检测 一、实验环境 jenkins环境 jenkins入门与安装 容器为docker 主机IP系统版本jenkins10.10.10.10rhel7.5 二、OpenSSH安装 1、下载 官网地址:https://learn.microsoft.com/zh-cn/windows-server/administration/op…...
字母异位词分组 LeetCode热题100
题目 给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。 思路 将字符串按字符升序排列后作为key,原字符串作为value存储到map上。 代码 class Solution…...
使用angular和electron 构建桌面应用
使用angular和electron 构建桌面应用 初始设置 新建一个angular app npm install -g @angular/cli ng new angular-electron cd angular-electron修改src/index.html文件内容 将绝对路径改为相对路径,加个点,使electron可以访问到angular文件资源 <base href=".…...

安达发制造工业迈向智能化:APS高级计划排程助力提升生产效率
随着市场竞争的加剧,制造企业纷纷寻求提高生产效率和降低成本的方法。近年来,越来越多的制造企业开始采用APS(高级计划与排程)系统,以优化生产计划和排程,提高生产效率,并在竞争中取得优势。 现代制造业通常面临复杂的…...

Flink - sink算子
水善利万物而不争,处众人之所恶,故几于道💦 文章目录 1. Kafka_Sink 2. Kafka_Sink - 自定义序列化器 3. Redis_Sink_String 4. Redis_Sink_list 5. Redis_Sink_set 6. Redis_Sink_hash 7. 有界流数据写入到ES 8. 无界流数据写入到ES 9. 自定…...

【项目 线程2】3.5 线程的分离 3.6线程取消 3.7线程属性
3.5 线程的分离 #include <stdio.h> #include <pthread.h> #include <string.h> #include <unistd.h>void * callback(void * arg) {printf("chid thread id : %ld\n", pthread_self());return NULL; }int main() {// 创建一个子线程pthread…...

Filebeat+ELK 部署
目录 //在 Node1 节点上操作 1.安装 Filebeat 2.设置 filebeat 的主配置文件 3.在 Logstash 组件所在节点上新建一个 Logstash 配置文件 4.浏览器访问 http://192.168.193.40:5601 登录 Kibana,单击“Create In…...

el-table点击表格某一行添加到URL参数,访问带参URL加载表格内容并滚动到选中行位置 [Vue3] [Element-plus 2.3]
写在最前 需求:有个表格列出了一些行数据,每个行数据点击后会加载出对应的详细数据,想要在点击了某一行后,能够将该点击反应到URL中,这样我复制这个URL发给其他人,他们打开时也能看到同样的行数据。 url会根…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...

微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...

水泥厂自动化升级利器:Devicenet转Modbus rtu协议转换网关
在水泥厂的生产流程中,工业自动化网关起着至关重要的作用,尤其是JH-DVN-RTU疆鸿智能Devicenet转Modbus rtu协议转换网关,为水泥厂实现高效生产与精准控制提供了有力支持。 水泥厂设备众多,其中不少设备采用Devicenet协议。Devicen…...