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会根…...
UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...
OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
实战三:开发网页端界面完成黑白视频转为彩色视频
一、需求描述 设计一个简单的视频上色应用,用户可以通过网页界面上传黑白视频,系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观,不需要了解技术细节。 效果图 二、实现思路 总体思路: 用户通过Gradio界面上…...
