DAY07 - MySQL事务与锁

基础章节-01-MySQL数据库服务中级课程 1.00 课程知识章节说明 目前在互联网的实际应用中,各个企业都会比较关注自身网站的数据信息,既要保证数据信息的安全性,同时也要保证数据存储读取效率 并且在特殊的场景下,还要对存储的数据信息进行检索和分析;因此数据库服务业务已经在各行各业应用非常的广泛 对于互联网领域的技术人员,对于数据库服务知识的掌握,也将是在求职时必备的技能,有些时候还会绝对入职的定级和薪资水平。 1.11 数据库服务日志管理 1.11.1 数据库服务日志概述介绍 任何一种数据库中,都会有各种各样的日志,记录这数据库工作的方方面面,以帮助数据库管理员追踪数据库曾经发生过的各种事件; 主要是针对数据库server层产生的数据信息,主要用于记录和数据库服务运行本身有关的日志、以及SQL语句操作执行相关的日志; 1.11.2 数据库服务日志常用分类 在MySQL数据库服务中,有4种不同的日志是最常用的日志类型,这些日志记录这数据库在不同方面的踪迹; 日志信息查看方法: 1 2 3 4 5 6 7 8 9 10 11 12 13 mysql> show variables like '%log%'; +------------------------------------------------+---------------------------------------------+ | Variable_name | Value | +------------------------------------------------+---------------------------------------------+ | general_log | OFF | | general_log_file | /data/3306/data/xiaoQ-01.log | | log_error | ./xiaoQ-01.edu.err | | log_bin | ON | | log_bin_basename | /data/3306/data/binlog | | log_bin_index | /data/3306/data/binlog.index | | slow_query_log | OFF | | slow_query_log_file | /data/3306/data/xiaoQ-01-slow.log | +------------------------------------------------+---------------------------------------------+ 常用日志信息介绍: ...

2026年1月7日 · 30 分钟 · DBA Student

MySQL 内部两阶段提交机制深度解析

一、为什么需要两阶段提交 1.1 核心问题 MySQL 需要保证两个日志的一致性: redo log (InnoDB 引擎层) binlog (MySQL Server 层) 如果不使用两阶段提交,会导致主从数据不一致。 1.2 两个日志的作用 日志 层级 作用 格式 redo log InnoDB 引擎 崩溃恢复,保证持久性 物理日志(页修改) binlog MySQL Server 主从复制,数据备份 逻辑日志(SQL语句) 为什么不能只用一个日志? redo log 是 InnoDB 特有,其他引擎(MyISAM)没有 binlog 是 Server 层,所有引擎共享 历史原因: binlog 先存在,redo log 后加入 1.3 不用两阶段提交的后果 场景1: 先写 redo log,后写 binlog 1 UPDATE users SET balance = 900 WHERE id = 1; 执行流程: 1. 写 redo log ✅ 2. 【此时崩溃】 3. binlog 未写入 ❌ 后果: ...

2026年3月31日 · 5 分钟 · DBA Student

MySQL 内部两阶段提交(2PC)深度解析

MySQL 内部两阶段提交(2PC)深度解析 一、背景与问题起源 MySQL 的存储架构分为两层: Server 层:负责 SQL 解析、优化、执行,以及 binlog 的写入 引擎层(InnoDB):负责数据的实际存储,以及 redo log 的写入 这两层各自维护一套日志体系,当一个事务提交时,需要同时保证两套日志的一致性。若没有协调机制,极易造成数据不一致。 为什么两个日志会不一致? 假设没有 2PC,先写 redo log,再写 binlog: [事务 T1 执行 UPDATE] → 写入 redo log(状态:commit) → MySQL 崩溃 💥 → binlog 未写入 恢复后: InnoDB 重放 redo log,T1 数据存在 从库通过 binlog 同步,T1 不存在 主从数据不一致! 假设没有 2PC,先写 binlog,再写 redo log: [事务 T1 执行 UPDATE] → 写入 binlog → MySQL 崩溃 💥 → redo log 未写入 恢复后: InnoDB 没有 redo log,T1 回滚(数据不存在) 从库通过 binlog 同步,T1 被执行 主从数据不一致! 正是因为这两种情况都会造成主从不一致,MySQL 引入了内部两阶段提交(Internal 2PC)。 ...

2026年3月18日 · 3 分钟 · DBA Student