主从复制SQL线程中断——字符集砸出的坑

容器化MySQL主从复制故障排查与优化指南 MySQL主从复制是实现数据库高可用的核心技术,其原理是通过二进制日志(binlog)实现数据变更的同步。在容器化部署场景下,网络隔离、持久化存储等特性会引入新的挑战。本文针对容器环境中常见的复制中断问题,从网络连通性检查、复制账号配置、binlog位置同步等维度,提供系统化的诊断方法和解决方案。通过分析Slave_IO_Running等关键状态指标,结合Docker网络配置优化和GTID复制等高级特性,可有效提升数据库集群的稳定性。这些实践对Kubernetes等云原生环境下的MySQL部署具有重要参考价 阅读详情

## 一、问题现场:SQL 线程中断,但表结构一致

告警响起:异步复制的 slave 端 SQL 线程中断了。查询表 `replication_applier_status_by_worker`检查报错信息:

```SQL
GreatSQL > SELECT * FROM performance_schema.replication_applier_status_by_worker\G;
*************************** 1. row ***************************
                                      SERVICE_STATE: OFF
                                  LAST_ERROR_NUMBER: 13146
                                 LAST_ERROR_MESSAGE: Worker 1 failed executing transaction
 'f08e63fb-3b91-11f0-af59-5254d9b382e7:66192867' at master log binlog.000423, end_log_pos 115725003;
 Column 1 of table 'gsqldb_xxx.dynamic_yyy_log' cannot be converted
 from type 'varchar(128(bytes))' to type 'varchar(96(bytes) utf8mb3)'
 ...
```

报错很直白:事务66192867在回放时,列类型"转换失败"。

核对主从表结构:

```SQL
GreatSQL > SHOW CREATE TABLE gsqldb_xxx.dynamic_yyy_log\G;
CREATE TABLE `dynamic_yyy_log` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增ID',
  `business_id` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '业务主键',
  `serial` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '设备唯一编号',
  `push_time` datetime DEFAULT NULL COMMENT '上传时间',
  `remark` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '备注',
  `sort` int DEFAULT '0' COMMENT '排序',
  `create_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '创建人',
  `edit_by` varchar(64) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '最后编辑人',
  `time_created` datetime NOT NULL COMMENT '记录创建时间',
  `time_modified` datetime NOT NULL COMMENT '记录修改时间',
  `status` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '状态',
  `operation` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '操作',
  `version` int DEFAULT '0' COMMENT '乐观锁',
  `deleted` int DEFAULT '0' COMMENT '逻辑删除',
  PRIMARY KEY (`id`) USING BTREE,
  KEY `business_id` (`business_id`) USING BTREE,
  KEY `comp_business_id` (`serial`) USING BTREE,
  KEY `sort` (`sort`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1083580 DEFAULT CHARSET=utf8mb3 ROW_FORMAT=DYNAMIC;
```

让人困惑的是:主从两端的表结构完全一致,`business_id `都是 `varchar(32) utf8mb3`。那么,SQL 线程到底在抗议什么?

---

## 二、细看报错信息:LAST\_ERROR\_MESSAGE 透露了什么

把报错拆开看,能看出两层关键信息:

1. **问题出在哪一列**:报错说 `Column 1`。注意这里的列号从 0 开始编号,所以 Column 1 对应的是表里的第二列——`business_id`。
2. **直接原因是什么**:`cannot be converted from type 'varchar(128(bytes))' to type 'varchar(96(bytes) utf8mb3)'`。也就是 slave 在回放时,发现 binlog 里记录的列长度(128 字节)和本地表定义(96 字节)对不上,拒绝转换。

到这里,矛盾点已经浮现:本地表定义里 `business_id` 是 `varchar(32) utf8mb3`,怎么会转换 `varchar(128(bytes))`呢?

---

## 三、大胆假设:做了什么操作

- slave 端是 `varchar(32) utf8mb3`。utf8mb3 每个字符最多占 3 字节,32 个字符对应 96 字节——正好对应报错里的 `varchar(96(bytes) utf8mb3)`。
- 但 master 端在 binlog (slave 的 relaylog)中记录的是 `varchar(128(bytes))`。128 不能被 3 整除,却能被 4 整除,商是32,正好和varchar\(32\)对应。如果字符集是utf8mb4,一个字符最多占 4 字节,`varchar(32) utf8mb4`就是`varchar(128(bytes))`。

由此可以合理推测 master 上发生过的操作:

master 端在 `sql_log_bin=off` 的情况下,把 `business_id` 改成了 `utf8mb4` ,执行了insert操作,binlog中记录了`varchar(128(bytes))`;随后\(或许是发现了 slave 的SQL线程中断后\),又在 `sql_log_bin=off` 下把 `business_id` 改回了 `utf8mb3`,使表的结构在主从两端重新"看起来"一致了。

---

## 四、实验验证

大胆的假设有了,现在需要小心求证。

## 4\.1 实验设计

1. 搭建异步复制环境,在 master 建表 `dynamic_yyy_log` 并插入数据,确认复制正常。
2. master 在 `sql_log_bin=off` 下把 `business_id` 改成 `utf8mb4`,再插入一条数据,观察 slave 是否中断及报错。
3. 观察 slave 的 `SHOW SLAVE STATUS` 与 `replication_applier_status_by_worker`。

## 4\.2 实验步骤

**步骤 1:建表并验证复制**

```SQL
INSERT INTO dynamic_yyy_log(id,business_id,serial,time_created,time_modified)
VALUES(1,'11111','11111',NOW(),NOW());
```

**步骤 2:关键操作——关 binlog 改字符集,插数据****,关binlog改回字符集**

```SQL
-- 将列business_id有utf8mb3改为utf8mb4
SET sql_log_bin=off;
ALTER TABLE dynamic_yyy_log MODIFY COLUMN `business_id`
  varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '业务主键';
SET sql_log_bin=on;

-- 在utfmb4下执行insert
INSERT INTO dynamic_yyy_log(id,business_id,serial,time_created,time_modified)
VALUES(2,'22222','22222',NOW(),NOW());

-- 将列business_id有utf8mb4改为utf8mb3
SET sql_log_bin=off;
ALTER TABLE dynamic_yyy_log MODIFY COLUMN `business_id`
  varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '业务主键';
SET sql_log_bin=on;
```

**步骤 3:观察 slave**

```SQL
GreatSQL > SHOW SLAVE STATUS\G
...
             Slave_IO_Running: Yes
            Slave_SQL_Running: No
                   Last_Errno: 13146
                   Last_Error: Coordinator stopped because there were error(s) in the worker(s).
 The most recent failure being: Worker 1 failed executing transaction
 '0ecdbd10-21e1-11f1-ae16-00163e892deb:415' at master log binlog.000001, end_log_pos 190926334.
 ...
```

再看 worker 明细:

```SQL
GreatSQL > SELECT * FROM performance_schema.replication_applier_status_by_worker LIMIT 1\G;
                                      SERVICE_STATE: OFF
                                  LAST_ERROR_NUMBER: 13146
                                 LAST_ERROR_MESSAGE: Worker 1 failed executing transaction
 '0ecdbd10-21e1-11f1-ae16-00163e892deb:415' at master log binlog.000001, end_log_pos 190926334;
 Column 1 of table 'testdb.dynamic_yyy_log' cannot be converted
 from type 'varchar(128(bytes))' to type 'varchar(96(bytes) utf8mb3)'
 ...
```

报错与现场问题完全一致,此时查询表的结构信息,列business\_id都是utf8mb3。 问题发生的假设得到验证。

## 五、延伸问题

## 5\.1 binlog 里记录了列的类型、长度、字符集吗?

`mysqlbinlog -v`解析事务 0ecdbd10\-21e1\-11f1\-ae16\-00163e892deb:415 的 binlog,关键片段如下:

```Plaintext
### INSERT INTO `testdb`.`dynamic_yyy_log`
### SET
###   @1=2                          /* LONGINT meta=0   */
###   @2='22222'                    /* VARSTRING(128) meta=128 nullable=0 */
###   @3='22222'                    /* VARSTRING(765) meta=765 nullable=0 */
###   @9='2026-03-18 09:43:37'      /* DATETIME(0)     */
...
```

结论很明确:

- **binlog 记录了列的类型与字节长度**。`@2` 列(即 `business_id`)被记为 `VARSTRING(128)`,128 正是该列在 `utf8mb4` 下的字节数。
- **binlog 没有记录列的字符集**。binlog中只记录了列"占多少字节",并未记录列的字符集。

## 5\.2 出了事,怎么救?

既然根因是 slave 本地列"长度"和 binlog 不一致,解法就是让 slave 对齐 master 写 binlog 时的状态——把 `business_id` 也改成 `utf8mb4`:

```SQL
SET sql_log_bin=off;
ALTER TABLE dynamic_yyy_log MODIFY COLUMN `business_id`
  varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '业务主键';
SET sql_log_bin=on;
```

改完后 `START SLAVE`这个事务可以继续回放。但主从字符集不一致(主utf8mb3,从utf8mb4),那么,什么时候还需要再改一次字符集?

## 5\.3 有没有"容忍"类型或长度变化的开关?

GreatSQL 提供了系统变量来控制主从之间的类型转换容忍度`replica_type_conversions`。

- **默认值(空字符串)**:禁止任何属性提升或降级,主从对应列的长度和类型必须完全一致。本次问题中该变量正是空值,所以一遇到 128 vs 96 就直接报错。
- **ALL\_LOSSY** 允许会造成信息丢失的转换。
- **ALL\_NON\_LOSSY** 允许不需要截断、无需特殊处理原始值的转换;即目标类型的取值范围能覆盖源类型。
- **ALL\_LOSSY,ALL\_NON\_LOSSY** 开启后,所有支持的类型转换都允许,无论是否有损。
- **ALL\_SIGNED** 属性提升后的整数视为有符号类型(默认行为)。
- **ALL\_UNSIGNED** 属性提升后的整数视为无符号类型。
- **ALL\_SIGNED,ALL\_UNSIGNED** 优先将提升后的整数按有符号处理;无法容纳时,则按无符号处理。两个配置的书写顺序无影响。

---

## 结语

这次中断的表象是"表结构不一致",真相却是"结构一致、历史 binlog 不一致"。字符集这种看似无害的字段属性,一旦在 `sql_log_bin=off` 下被悄悄改动,DML操作就会在 binlog 里留下历史痕迹,等 slave 回放时就可能跳出来叫停SQL线程。

对于DBA的启示:

- 但凡涉及到“主从复制类型转换失败”情况的,基本上都可以第一时间往字符集不一致方向去排查。
- 日常巡检时,对比主从两端数据列的长度、字符集、排序规则是否一致。
- 不要在 `sql_log_bin=off` 下改列定义,列的字符集/长度变更要走正常 DDL 流程,让变更进入 binlog,保证主从同步演进。

## 老叶有话说

GreatSQL 社区现已上线“**AI助手**”功能,我试着把这个问题丢给它,互动结果如下。

问:

> GreatSQL主从复制结构中,从服务器上报告错误:Column 1 of table 'zhgd_screen.dynamic_device_status_log' cannot be converted
> from type 'varchar(128(bytes))' to type 'varchar(96(bytes) utf8mb3)' 这种情况下一般是什么原因导致,如何分析排查

AI助手回答:

先说明一下:我检索了官方手册,**未查到针对这条报错文案的专项条目**,下面基于 MySQL/GreatSQL 行复制(ROW format)的通用机制给您分析,具体细节请以官方手册为准。

## 一、这个报错的本质

这是典型的 **RBR(行复制)列类型不匹配**错误(对应 MySQL 错误码 1677 `ER_SLAVE_CONVERSION_FAILED`):

- 主库以 ROW 格式记录 binlog,里面带有**主库表的列元数据**;
- 从库回放 `TABLE_MAP` / 行事件时,会把主库列定义和**本地表的列定义**逐列比对,只有"可安全转换"才放行;
- 报错说明第 1 列两边定义不一致,无法转换。

报错里的字节数很关键:

- 主库侧:`varchar(128(bytes))` —— 列最大容量 128 字节;
- 从库侧:`varchar(96(bytes) utf8mb3)` —— 96 字节且字符集是 utf8mb3。

一个很典型的对应关系是:**主库 `VARCHAR(32) utf8mb4`(32×4=128 bytes),从库 `VARCHAR(32) utf8mb3`(32×3=96 bytes)**——字符数相同,但两边建表时的**默认字符集不同**,导致表结构"漂移"了。GreatSQL 8.0 起默认字符集为 utf8mb4,而 utf8 是 utf8mb3,若从库是老版本迁移过来或建库时未显式指定字符集,就很容易出现这种差异 GreatSQL 官方手册 - 字符集 & 校验集↗。

## 二、常见成因(按概率排序)

1. **两边默认字符集不一致时各自建表**:主库 `character_set_server=utf8mb4`,从库还是旧的 utf8mb3/latin1,表不是通过复制建的,而是各自初始化或分别导入的。
2. **单边 DDL 导致结构漂移**:
   - DBA 在从库上直接 `ALTER` 做验证,主库没执行;
   - 主库 `ALTER` 后,从库执行失败被跳过(检查是否配置了 `replica_skip_errors` / `slave_skip_errors` 跳过了 1xxx DDL 错误);
   - 复制过滤规则(`Replicate_Do_DB` / `Replicate_Ignore_DB` 等)把这条 DDL 过滤掉了。
3. **从库表被外部任务覆盖**:备份恢复、数据导入脚本、初始化任务在从库上重建了这张表,用的是不同 `--default-character-set` 的 dump。
4. **历史架构调整**:从库曾是别的主库的从库,或做过切换后表结构没对齐。

## 三、排查步骤

**1. 看复制状态,拿到出错时间线**

```sql
SHOW REPLICA STATUS\G
-- 关注 Replica_SQL_Running、Last_SQL_Error、Last_SQL_Error_Timestamp
-- 旧语法 SHOW SLAVE STATUS 也可用,GreatSQL 新旧两套语法并行兼容
```

GreatSQL 官方手册 - 恢复部分主从复制兼容接口↗

**2. 两边对比表结构(核心步骤)**

分别在主库和从库执行:

```sql
SHOW CREATE TABLE zhgd_screen.dynamic_device_status_log\G

SELECT COLUMN_NAME, ORDINAL_POSITION, COLUMN_TYPE,
       CHARACTER_SET_NAME, COLLATION_NAME
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA='zhgd_screen'
  AND TABLE_NAME='dynamic_device_status_log';
```

把两边结果逐列 diff,重点看第 1 列的 `COLUMN_TYPE` 和 `CHARACTER_SET_NAME`。

**3. 检查环境差异**

```sql
SHOW VARIABLES LIKE 'character_set_server';
SHOW VARIABLES LIKE 'collation_server';
SHOW VARIABLES LIKE 'binlog_format';          -- 主库应为 ROW
SHOW REPLICA STATUS;                          -- 看 Replicate_* 过滤规则
SHOW VARIABLES LIKE '%skip_errors%';          -- 是否配置了跳错
```

**4. 追溯 DDL 历史**:用 `mysqlbinlog` 在主库 binlog 中搜该表名,看这张表的 `ALTER/CREATE` 记录是否都到达了从库;结合 `Last_SQL_Error_Timestamp` 缩小时间窗。

**5. 数据层校验**:结构对齐后,建议用 `pt-table-checksum` 校验主从数据是否还有其他隐性差异。

## 四、修复建议

- **以主库为准修正从库结构**(执行前先 `STOP REPLICA`):

```sql
STOP REPLICA;
ALTER TABLE zhgd_screen.dynamic_device_status_log
  MODIFY 第1列列名 <与主库完全一致的定义>;
START REPLICA;
```

- ⚠️ 如果从库该列比主库**窄**且已有存量数据,`MODIFY` 时可能因数据超出长度/字符集表示不了而失败;这种情况下更稳妥的做法是在从库重建表(`CREATE TABLE ... LIKE` 主库表结构)再回填数据。
- ❌ **不建议**用 `replica_skip_errors=1677` 直接跳过——事件是跳过去了,但主从数据从此不一致,后患更大。只有在明确接受数据差异、紧急恢复复制时才考虑跳过单个事件。
- **预防**:两边统一 `character_set_server`/`collation_server`;建库建表显式写 `CHARACTER SET utf8mb4`;DDL 统一走变更流程、严禁在从库单边执行;定期用 `pt-table-checksum` 巡检。

如果您把主库和从库两边 `SHOW CREATE TABLE` 的结果贴出来,我可以帮您精确定位是哪一列、哪种差异导致的。也可以到技术论坛发帖讨论:[技术论坛](https://greatsql.cn/forum.php)
 

Python连接MySQL生产实战:连接池、字符集、事务与批量插入避坑指南 Python连接MySQL是Web开发和数据工程的基础能力,但真实生产环境远非‘pip install + 三行代码’所能覆盖。其核心涉及数据库连接管理、字符编码统一、事务一致性控制、时区处理及批量操作性能优化等关键环节。尤其在高并发、长周期服务(如Django/Flask后端、Celery任务)中,PyMySQL与mysql-connector-python的选型差异、连接池参数误配、utf8mb4未全链路生效、datetime时区错位等问题极易引发凌晨告警、数据乱码或事务丢失。本文基于金融、电商等高可用 阅读详情

相关推荐

把MySQL电子书当工程做:从建库到主从复制的落地实操

数据库学习不能只停留在概念,尤其对MySQL这类工程属性极强的系统,更需要把中文电子书中的理论章节转成可运行的SQL和配置文件。从最基础的建库建表、字符集选择,到索引验证、事务隔离级别与锁等待排查,再到binlog原理和主从复制配置,每一步都直接影响生产环境的稳定性。针对连接报错、SQL模式变更、配置不生效等高频踩坑问题,本文结合常见场景给出排查思路,帮助读者真正掌握从单机到分布式的高可用数据同步技能,让电子书里的知识变成能落地的工程能力。

weixin_34033624的博客 378

mysql主从中断原因_mysql主从复制异常中断分析处理

概述现今大部分MySQL集群都是以主从复制为基础,如MHA、MGR、第三方中间件等,一旦主从复制出现异常,整体集群都会受到影响,主从复制出现异常分为两类:IO线程异常与SQL线程异常。IO线程异常,常见有:复制用户或密码错误网络不稳定复制心跳时间大于slave_net_timeout参数,IO线程空闲被终断SQL线程异常,常见有:复制点指定错误主键或唯一键冲突记录不存在表结构不一致今天所讲案例便是...

weixin_39604139的博客 881

STM32进入HardFault_Handler时,如何找到问题所在?

当STM32进入HardFault_Handler时,定位问题发生的点

m0_60831979的博客 2150

mysql 主从_mysql主从复制异常中断分析处理

概述现今大部分MySQL集群都是以主从复制为基础,如MHA、MGR、第三方中间件等,一旦主从复制出现异常,整体集群都会受到影响,主从复制出现异常分为两类:IO线程异常与SQL线程异常。IO线程异常,常见有:复制用户或密码错误网络不稳定复制心跳时间大于slave_net_timeout参数,IO线程空闲被终断SQL线程异常,常见有:复制点指定错误主键或唯一键冲突记录不存在表结构不一致今天所...

weixin_39634438的博客 477

了解你的GPU:深入探讨AMD SMI

2024年9月17日 作者:Matt Elliott对于使用AMD硬件的系统管理员和高级用户来说,性能优化和高效的资源监控至关重要。AMD系统管理界面命令行工具`amd-smi`正是为了解决这些需求而设计的。amd-smi是一个多功能的命令行工具,专门用于管理和监控AMD硬件,主要侧重于GPU。作为未来取代`rocm-smi`的工具,`amd-smi`有望成为跨广泛设备的AMD硬件管理的主要工具。

数字人生 4523

ADS2020与SystemVue2020Update1.0同机安装避坑指南:解决License冲突,实现EVM联合仿真

本文详细介绍了ADS2020与SystemVue2020 Update1.0同机安装的完整解决方案,重点解决License冲突问题,实现EVM联合仿真。通过合理的安装顺序、路径规划和License服务配置,确保两款EDA工具和谐共存,为射频与微波电路设计提供高效仿真环境。

weixin_30271335的博客 348

mysql线程中断_MySQL 案例:同步中断与SQL线程类型转换

问题描述MySQL 同步时遇到 SQL 线程,显示的错误信息类似于:Column 0 of table 'test.char_utf8mb4' cannot be converted from type 'varchar(64(bytes))' to type 'varchar(48(bytes) utf8)'解决方案最稳妥的方案是通过备份恢复重新建立从库;当然,修改slave_type_conv...

weixin_42464697的博客 257

避坑指南:Vue调用摄像头常见6大报错解决方案(navigator.mediaDevices全兼容方案)

本文深入剖析了在Vue应用中调用摄像头时常见的六大报错,如权限拒绝、设备未找到等,并提供了基于navigator.mediaDevices的全兼容解决方案。内容涵盖从HTTPS环境配置、浏览器兼容性处理到摄像头资源管理与高级错误处理,旨在帮助开发者构建稳定可靠的企业级摄像头应用。

Black的专栏 339

vfp复制表结构_mysql主从复制异常中断分析处理

概述现今大部分MySQL集群都是以主从复制为基础,如MHA、MGR、第三方中间件等,一旦主从复制出现异常,整体集群都会受到影响,主从复制出现异常分为两类:IO线程异常与SQL线程异常。IO线程异常,常见有:复制用户或密码错误网络不稳定复制心跳时间大于slave_net_timeout参数,IO线程空闲被终断SQL线程异常,常见有:复制点指定错误主键或唯一键冲突记录不存在表结构不一致今天所...

weixin_42523670的博客 186

TJA1445/TJA1465 CAN收发器硬件设计与软件配置实战指南

控制器局域网(CAN)总线是汽车电子和工业控制领域实现电子控制单元(ECU)间可靠通信的核心技术。其工作原理是将数字信号转换为差分信号进行抗干扰传输,技术价值在于构建稳定、高效的分布式实时控制系统。随着汽车电子架构向域集中式演进,对CAN总线的通信速率、网络复杂度和静态功耗提出了更高要求,这催生了支持CAN FD协议和智能电源管理的新一代高速CAN收发器。在车载网关、域控制器及工业网络节点等应用场景中,NXP的TJA1445和TJA1465系列收发器凭借其部分组网(Partial Networking)和选

weixin_29655587的博客 409

【电机驱动与运动控制】期末重点问题集合

问题1 梯形曲线和S形曲线各自的特点和区别,比较梯形和S形曲线位置、速度、加速度、加加速度的区别。 问题2 总惯量的计算包含哪几个部分? 哪几个部分需要进行折算? 在齿轮箱的输出侧(2号轴)总惯量需要折算到齿轮箱的输入侧(1号轴) 为什么需要折算? 齿轮箱比的存在使2号轴的转速和电机的转速不同 问题3 指出每个部分的名称。 每个部分的功能。 主磁极的励磁绕组:绝大部分直流电机都是由励磁绕组通以直流电建立主磁场; - 电枢铁心:在两个主磁极内表面之间,由硅钢片叠成的圆

【人工智障 | 计算鸡视觉 | 机器孩】 5703

sql 数据类型转换_MySQL 案例:同步中断与SQL线程类型转换

问题描述MySQL 同步时遇到 SQL 线程,显示的错误信息类似于:Column 0 of table 'test.char_utf8mb4' cannot be converted from type 'varchar(64(bytes))' to type 'varchar(48(bytes) utf8)'解决方案最稳妥的方案是通过备份恢复重新建立从库;当然,修改slave_type_conv...

weixin_39634878的博客 372

jieba分词

jieba

sikh_0529的博客 1万+

MySql8 主从复制这篇就够了

本篇介绍了MySQL主从复制的工作流程,以Docker的MySQL8镜像,搭建了MySQL的主从复制环境,并分享了主从复制涉及的文件、状态的查看。

JingAi_jia917的博客 1697

Spring AI Alibaba实战训练营-05模型输出质量评估

本文介绍了使用Spring AI Alibaba库评估AI模型输出质量的方案。项目通过5种评估器实现自动化评估:相关性评估、事实准确性评估、答案相关性评分、答案正确性评估和忠实度评估。开发步骤包括环境准备(Java 17、Maven、API Key获取)、创建Maven项目、配置Spring AI(通过环境变量安全设置API Key)以及实现RAG流程。重点强调了通过评估器自动检测AI输出的质量指标,帮助开发者优化AI应用性能。

program哲学 217

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

MySQL主从复制报错自动修复:错误分类、策略与脚本实战

MySQL主从复制是保障数据一致性和高可用架构的基础,一旦从库的SQL线程或IO线程因错误码中断,复制链路便会陷入停滞,引发读请求异常、报表延迟乃至灾备切换失败。理解复制链路的双线程机制,识别1062、1032、1236等高频错误码背后的数据或链路问题,是自动化修复的前提。通过将错误分类、修复策略与熔断机制串成脚本,可让大部分复制中断在几分钟内自行恢复,并配合校验工具兜底数据一致性。本文以工程实践视角,介绍了主从复制报错的分类思路、GTID下的跳过策略,以及一套可直接落地的自动修复脚本,帮助运维人员从容应对

weixin_33508411的博客 274

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

[小技巧48]MySQL 8.0 主从复制常见问题全解析:从原理到排障实战

MySQL 8.0 主从复制常见问题全解析:从原理到排障实战

分享工作中解决的问题,希望能帮到你 1060

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

深入浅出MySQL主从复制与读写分离原理及其实践

在大型互联网应用中,数据库作为核心组件,其稳定性和性能直接影响着整个系统的健壮性。MySQL作为广泛应用的关系型数据库管理系统,提供了强大的主从复制与读写分离功能,帮助企业搭建高性能、高可用的数据库架构。本文将详细介绍MySQL主从复制与读写分离的原理,并探讨其在实际应用中的实践。

hy199707的博客 1336

MySQL 运维高频 6 坑:字符集、超时、SQL_MODE、隐式转换、Online DDL、主从延迟

本文梳理 MySQL 运维六大高频坑:字符集需改用 utf8mb4 解决 emoji 乱码;wait_timeout 超时引发连接池异常;ONLY_FULL_GROUP_BY 导致 GROUP‑BY 报错;隐式类型转换造成索引失效;Online DDL 存在 MDL 锁阻塞风险;大事务引发主从延迟。给出排查命令与规避方案,提醒规范 SQL、大表变更使用专用工具,便于故障快速排查。

hdhdhdk的博客 355

MySQL数据不一致根源全解析:主从复制、事务隔离与排查实战

在数据库运维与开发中,数据一致性是保障业务可靠性的基石。MySQL作为广泛应用的关系型数据库,其数据不一致问题往往源于多个层面:主从复制链路中的binlog格式选择、半同步机制失效、复制中断,以及事务隔离级别与MVCC并发控制下的脏读、幻读和丢失更新,都可能让业务数据对不上。此外,字符集隐式转换、时区配置、存储引擎混用等环境因素也会埋下隐蔽的坑。理解Buffer Pool、Redo Log与崩溃恢复的原理,有助于区分真不一致与“假”故障。掌握pt-table-checksum等校验工具与系统化排查思路,能帮

weixin_29913663的博客 250

主从复制、读写分离、分库分表的可能错误原因

MySQL 主从复制失败的原因可归为。

m0_57611641的博客 1254

MySQL主从复制实战:从Binlog原理到GTID模式与运维避坑指南

在业务并发量增长、数据库压力逼近瓶颈时,读写分离与容灾能力成为架构演进的关键诉求。主从复制正是基于MySQL Binlog实现数据多副本同步的核心机制,它通过主库记录二进制日志、从库拉取并重放日志的方式,让多台实例的数据保持一致,从而支撑水平读扩展、故障快速切换与离线分析等典型场景。理解Binlog的格式差异、位点复制与GTID自动定位的原理,是高效搭建和维护高可用架构的基础。本文从Binlog工作机制出发,系统梳理主从复制的完整搭建流程、核心参数配置及常见故障排查方法,帮助读者快速构建稳定、可运维的MyS

weixin_33585822的博客 293

Mysql 主从复制

数据备份:为避免单点故障。增加从一台服务器,用来复制主服务器上的数据。分担负载,将写操作在主上做,查询操作在从上做。什么是GTIDGTID:是对于一个已经提交事务的编号,并且是一个全局唯一的编号,GTID实际上是通过UUID和TID组成,保存在Mysql数据目录下的auto.cnf文件里。TID代表了该实例上已经提交的事务数量,并且随着事务提交单调递增,下面是一个GTID递增:扩展:Mysql事务Mysql事务主要用于处理操作量大,复杂度高的数据。

qq_57165715的博客 1113

Windows下MySQL双机热备实战:从主从复制到故障切换

在数据库高可用架构中,主从复制与双机热备是两个经常被混淆的概念。前者通过binlog同步实现数据冗余,后者则强调主库故障时备库能否快速接管业务。理解这一边界,是设计可靠容灾方案的前提。在实际工程中,尤其是Windows Server环境,借助GTID、二进制日志和复制线程的协同,可以构建一套数据同步、状态监控与手工切换相结合的热备体系。其技术价值在于缩短RTO、保障业务连续性,并通过演练验证切换流程的可行性。对于不依赖容器化编排的中小型团队,基于MySQL原生复制与PowerShell脚本的轻量方案,是平衡

weixin_42526015的博客 248

MySQL主从复制与读写分离实战:从原理到生产环境落地

在业务量快速增长的过程中,单库MySQL实例的CPU、磁盘IO与连接数往往率先成为瓶颈,如何在不无限堆硬件的前提下提升数据库吞吐能力成为架构设计的关键话题。读写分离作为数据库扩展的重要策略,其实现基础是主从复制技术:通过binlog将主库的变更同步至从库,再按读写指令将流量分发至不同节点。基于GTID的复制模式进一步简化了主从链路维护,使故障恢复和主从切换更加可靠。该方案适合读多写少的典型业务场景,能显著降低主库负载、提升系统并发能力,同时为高可用架构留出扩展空间。围绕主从复制原理、搭建步骤、读写分离落地方

weixin_33326218的博客 204

MySQL数据不一致的五大根源:从主从复制到事务隔离的全链路排查指南

在数据库系统中,数据一致性是可靠性设计的核心命题。无论是日常开发还是分布式架构演进,MySQL作为主流关系型数据库,其数据一致性保障依赖于事务、锁、日志与复制机制的协同工作。主从复制通过binlog同步增量变更,事务隔离级别则控制并发读写下的可见性,而InnoDB存储引擎的MVCC与崩溃恢复机制进一步平衡了性能与安全。当线上出现数据对不上、主从延迟、查询结果漂移等问题时,往往不是单一原因导致,而是复制链路、事务隔离、存储引擎、配置参数与应用逻辑综合作用的结果。本文从基础概念出发,系统梳理数据不一致的典型表现

weixin_31960565的博客 266
上一篇: 少敲一个字母,GreatSQL 对所有查询“已读不回”
下一篇: 非常罕见的主从复制唯一索引列数据重复冲突案例
GreatSQL社区
博客等级 码龄5年 1210粉丝 390原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值