测试环境:两台服务器,Mysql版本 8.0,linux版本:Ubuntu 20.04.3;

1.在两台服务器上安装MySql;

2.选一台作为主服务器,在主服务器上以root用户进入Mysql,执行以下语句:

CREATE USER 'testUser'@'%' IDENTIFIED WITH 'caching_sha2_password' BY '123456';
GRANT REPLICATION SLAVE ON *.* TO 'testUser'@'%';
FLUSH PRIVILEGES;

创建了一个testUser用户,并授予testUser用户在任意主机上作为复制从服务器的权限。

注:我使用的插件是caching_sha2_password,没有使用mysql_native_password,是因为后续我的从服务器有报错:Plugin mysql_native_password reported: ''mysql_native_password' is deprecated and will be removed in a future release. Please use caching_sha2_password instead';所以我又换成了caching_sha2_password。

3.主服务器配置:

3.1修改配置文件

编辑 MySQL 配置文件 my.cnf(路径通常为 /etc/mysql/my.cnf 或 /etc/my.cnf

添加以下内容:

[mysqld]
server-id = 1                   # 唯一标识主库(建议用 IP 末段)
log-bin = mysql-bin             # 启用二进制日志
binlog-format = ROW             # 推荐使用 ROW 格式
binlog-do-db = mydb             # 指定同步的数据库(可选,不配置则同步所有库)
expire_logs_days = 7            # 自动清理 7 天前的 binlog
gtid_mode = ON                  # 启用 GTID(可选,简化主从切换)
enforce_gtid_consistency = ON   # 强制 GTID 一致性

3.2重启mysql服务

 service mysql restart

3.3查看主库状态

SHOW MASTER STATUS;

输出示例:

4.从服务器配置

4.1修改配置my.cnf文件

[mysqld]
server-id = 2                   # 唯一标识从库
relay-log = mysql-relay-bin     # 启用中继日志
read-only = 1                   # 从库设为只读(避免误写)
log-slave-updates = ON          # 记录从库的更新(级联复制需要)
gtid_mode = ON                  # 与主库一致(如果主库启用 GTID)
enforce_gtid_consistency = ON

4.2重启mysql服务:

 service mysql restart

4.3配置主从复制链路

方式一:传统复制(基于 binlog 文件名和位置)

CHANGE MASTER TO
MASTER_HOST='主服务的IP',
MASTER_USER='testUser', --用户名
MASTER_PASSWORD='123456',--密码
get_master_public_key=1,
MASTER_LOG_FILE='mysql-bin.000001',  -- 主库 SHOW MASTER STATUS 中的 File
MASTER_LOG_POS=785;                 -- 主库 SHOW MASTER STATUS 中的 Position
方式二:GTID 复制(推荐)
CHANGE MASTER TO
MASTER_HOST='主服务器Ip',
MASTER_USER='testUser',--用户名
MASTER_PASSWORD='123456',--密码
get_master_public_key=1,
MASTER_AUTO_POSITION = 1;

4.4启动从库复制线程(执行SQL语句)

SHOW SLAVE STATUS;

关键字段说明:

  • Slave_IO_Running:必须为 Yes(表示 IO 线程正常)

  • Slave_SQL_Running:必须为 Yes(表示 SQL 线程正常)

  • Last_IO_Error 和 Last_SQL_Error:检查是否有错误信息

  • Seconds_Behind_Master:从库延迟时间(单位:秒)

如果Slave_IO_Running字段不为True,则需要检查日志排查错误:

5.常见错误排查:

5.1在从服务器上执行以下语句:

sudo tail -n 100 /var/log/mysql/error.log

5.2 错误排查

错误1:

Replica I/O for channel '': 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. Error_code: MY-013117

问题原因

  • MySQL 每个实例的 server-uuid 必须全局唯一,若主从库的 UUID 相同,复制会直接失败。

  • 此问题通常发生在以下场景:

    • 直接复制了主库的 MySQL 数据目录到从库(如克隆虚拟机镜像或备份恢复后未修改 UUID)。

    • 手动修改了 auto.cnf 文件导致主从 UUID 重复。

解决方法:

步骤 1:停止从库 MySQL 服务:

service mysql stop

步骤2:删除或修改 auto.cnf 文件

定位到 MySQL 数据目录下的 auto.cnf 文件(默认路径为 /var/lib/mysql/auto.cnf

删除该文件,重启后mysql服务后,会重新生成一个新的

步骤3:启动mysql服务,重启主从复制(执行以下SQL语句)

-- 在从库执行
STOP SLAVE;
RESET SLAVE ALL;  -- 清除旧的复制配置-- 重新配置主从复制(根据实际参数填写)
CHANGE MASTER TOMASTER_HOST='主库IP',MASTER_USER='用户名',MASTER_PASSWORD='密码',MASTER_AUTO_POSITION=1;  -- 如果使用 GTID 复制START SLAVE;

步骤4,重新检查状态(执行以下SQL语句)

SHOW SLAVE STATUS

错误2

Replica I/O for channel '': Got fatal error 1236 from source when reading data from binary log: 'Replica has more GTIDs than the source has, using the source's SERVER_UUID. This may indicate that the the last binary log file was truncated or lost, e.g., after a power failure when sync_binlog != 1. The source may have rolled back transactions that were already replicated to the replica. Replicate any transactions that source has rolled back from replica to source, and/or commit empty transactions on source to account for transactions that have been committed on source but are not included in GTID_EXECU', Error_code: MY-013114

错误原因:
       主库的 binlog 中缺少从库已接收并记录的 GTID 事务(例如主库执行了 RESET MASTER、手动删除了 binlog 文件,或主库崩溃后未正确持久化事务)

解决方法:

步骤1:

登录主库,查看当前 GTID 集合:

SHOW GLOBAL VARIABLES LIKE 'gtid_executed';
-- 示例输出:gtid_executed = 3a9d1a1a-1a1a-11eb-8a3a-000c29a3a3a3:1-100

登录从库,查看从库的 GTID 集合:

如果从库和主库的gtid_executed不一致,则可以强制从库与主库 GTID 一致:

如下:

RESET MASTER;  -- 清空从库的 GTID 执行记录
SET @@GLOBAL.gtid_purged = '主库的 gtid_executed 值';
-- 例如:
SET @@GLOBAL.gtid_purged = '3a9d1a1a-1a1a-11eb-8a3a-000c29a3a3a3:1-100';

步骤2:重启主从复制(执行以下SQL语句)的

-- 在从库执行
STOP SLAVE;
RESET SLAVE ALL;  -- 清除旧的复制配置-- 重新配置主从复制(根据实际参数填写)
CHANGE MASTER TOMASTER_HOST='主库IP',MASTER_USER='用户名',MASTER_PASSWORD='密码',MASTER_AUTO_POSITION=1;  -- 如果使用 GTID 复制START SLAVE;

这个时候,在主库上新建一个Table并插入一条数据,如果正常的话,从库上也会相应的多出一个Table和新插入的数据。

其它:主库配置优化项(可选,有些上面已经配置了)

[mysqld]
sync_binlog = 1          # 确保每次事务提交都同步 binlog 到磁盘
expire_logs_days = 7     # 保留最近 7 天的 binlog
gtid_mode = ON
enforce_gtid_consistency = ON

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

力扣1812题解

记录 2025.5.7 题目: 思路: 从左下角开始,棋盘的行数和列数(均从 1 开始计数)之和如果为奇数,则为白色格子,如果和为偶数,则为黑色格子。 代码: class Solution {pu…

适合java程序员的Kafka消息中间件实战

创作的初心: 我们在学习kafka时,都是基于大数据的开发而进行的讲解,这篇文章为java程序员为核心,助力大家掌握kafka实现。 什么是kafka: 历史: 诞生与开源(2010 - 2011 年) 2010 年&#xf…

PDF智能解析与知识挖掘:基于pdfminer.six的全栈实现

前言 在数字化信息爆炸的时代,PDF(便携式文档格式)作为一种通用的电子文档标准,承载着海量的结构化与非结构化知识。然而,PDF格式的设计初衷是用于展示而非数据提取,这使得从PDF中挖掘有价值的信息成为数据…

Python爬虫+代理IP+Header伪装:高效采集亚马逊数据

1. 引言 在当今大数据时代,电商平台(如亚马逊)的数据采集对于市场分析、竞品监控和价格追踪至关重要。然而,亚马逊具有严格的反爬虫机制,包括IP封禁、Header检测、验证码挑战等。 为了高效且稳定地采集亚马逊数据&am…

架构思维:探讨架构师的本质使命

文章目录 软件工程1. 软件工程的定义与核心目标2. 软件工程 vs. 软件项目管理3. 软件工程的两大特性4. 软件工程的关键活动与方法论5. 架构师在软件工程中的职责架构师的职责和思维架构师心性修炼三大核心能力架构设计的基本准则 团队共识“设计文档”的统一结构框架阅读他人代…

QT设计权限管理系统

Qt能够简单实现系统的权限设计 首先我们需要一个登陆界面 例如这样 然后一级权限,可以看到所有的内容,不设置菜单栏的隐藏。 然后其他权限,根据登陆者的身份进行菜单栏不同的展示。 菜单栏的隐藏代码如下: ui->actionuser-…

Debezium 架构详解与实战示例

Debezium 架构详解与实战示例 1. 整体架构图 #mermaid-svg-tkAquOxA2pylXzON {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-tkAquOxA2pylXzON .error-icon{fill:#552222;}#mermaid-svg-tkAquOxA2pylXzON .error-t…

Qt天气预报系统更新UI界面

Qt天气预报系统更新UI界面 1、创建各个小部分列表2、定义一个更新UI函数2.1 实现更新UI界面函数 1、创建各个小部分列表 QList<QLabel *> weekList; //星期 QList<QLabel *> dateList; //日期QList<QLabel *> weatherL…

AWS MCP Servers

文章目录 一、关于 AWS MCP Servers什么是模型上下文协议&#xff08;MCP&#xff09;以及它是如何与AWS MCP服务器协同工作的&#xff1f;为什么选择MCP服务器&#xff1f; 二、可用 Servers核心MCP服务器AWS 文档服务器亚马逊 Bedrock 知识库检索 MCP 服务器AWS CDK MCP 服务…

python如何把pdf转word

在Python中将PDF转换为Word文档&#xff08;.docx&#xff09;比反向转换&#xff08;Word转PDF&#xff09;更具挑战性&#xff0c;因为PDF是固定格式&#xff0c;而Word是可编辑格式。以下是几种可行的方法及详细步骤&#xff1a; 方法1&#xff1a;使用 pdf2docx 库 pdf2do…

NLP 和大模型技术路线

transformers快速入门 NLP 和大模型技术路线 在自然语言处理&#xff08;NLP&#xff09;和大模型领域&#xff0c;技术路线的学习应该从基础开始&#xff0c;逐步深入到更高阶的应用和优化技术。本文将详细介绍相关技术点的学习顺序&#xff0c;以及每个技术点的关键学习内容…

WordPress个人博客搭建(二):在 Ubuntu 22.04 x64 系统中使用1Panel 部署 WordPress

前言 在之前的安装1Panel面板的文章中&#xff0c;我们已经成功将1Panel面板安装到了2核4G配置的非凡云云服务器上。1Panel作为一款现代化的服务器管理面板&#xff0c;极大简化了网站部署流程。本文将详细介绍如何使用1Panel面板在云服务器上安装部署WordPress&#xff0c;帮…

面试高频算法:最长回文子串

题目&#xff1a;5. 最长回文子串 给你一个字符串 s&#xff0c;找到 s 中最长的回文子串。 回文&#xff1a;如果字符串向前和向后读都相同&#xff0c;则它满足回文性&#xff1b;子串&#xff1a;子字符串 是字符串中连续的非空字符序列。 示例 1&#xff1a; 输入&…

全文索引数据库Elasticsearch底层Lucene

Lucene 全文检索的心&#xff0c;天才的想法。 一个高效的&#xff0c;可扩展的&#xff0c;全文检索库。全部用 Java 实现&#xff0c;无须配置。仅支持纯文本文件的索引(Indexing)和搜索(Search)。不负责由其他格式的文件抽取纯文本文件&#xff0c;或从网络中抓取文件的过程…

JVM——Java内存模型

Java内存模型 在Java多线程编程中&#xff0c;Java内存模型&#xff08;Java Memory Model, JMM&#xff09;是理解程序执行行为和实现线程安全的关键。下面我们深入探讨Java内存模型的内容。 Java内存模型概述 Java内存模型定义了Java程序中变量的内存操作规则&#xff0c;…

nRF Connect SDK system off模式介绍

目录 概述 1. 软硬件环境 1.1 软件开发环境 1.2 硬件环境 2 System Off 模式 2.1 模式介绍 2.2 注意事项 3 功能实现 3.1 框架结构介绍 3.2 代码介绍 4 功能验证 4.1 编译和下载代码 4.2 测试 4.3 使能CONFIG_APP_USE_RETAINED_MEM的测试 5 main.c的源代码文件…

白杨SEO:如何查看百度、抖音、微信、微博、小红书、知乎、B站、视频号、快手等7天内最热门话题及流量关键词有哪些?使用方法和免费工具推荐以及注意事项【干货】

大家好&#xff0c;我是白杨SEO&#xff0c;专注SEO十年以上&#xff0c;全网SEO流量实战派&#xff0c;AI搜索优化研究者。 &#xff08;温馨提醒&#xff1a;本文有点长&#xff0c;看不完建议先收藏或星标&#xff0c;后面慢慢看哈&#xff09; 最近&#xff0c;不管是在白…

2025 Mac常用软件安装配置

1、homebrew 2、jdk 1、使用brew安装jdk&#xff1a; brew install adoptopenjdk/openjdk/adoptopenjdk8 jdk默认安装位置在 /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home 目录。 2、配置环境变量&#xff1a; vim ~/.zshrc# Jdk export JAVA_HOM…

Linux 内核学习(6) --- Linux 内核基础知识

目录 Linux 内核基础知识进程调度内存管理虚拟文件系统和网络接口进程间通信Linux 内核编译Makefile 和 Kconfig内核Makefile内核Kconfig 配置项标识的写法depend 关键字select 关键字表达式逻辑关系Kconfig 其他语法 配置文件的编译Linux 内核引导方法Booloader 定义Linux 内核…

常见汇编代码及其指令

1. 数据传输指令 1.1. mov 作用&#xff1a;将数据从源操作数复制到目标操作数。语法&#xff1a;mov dest, src mov eax, 10 ; 将立即数 10 存入 eax 寄存器 mov ebx, eax ; 将 eax 的值复制到 ebx mov [ecx], eax ; 将 eax 的值写入 ecx 指向的内存地址 1.2. …