RSS
菜单
社区成员个人主页
阿成员
DEV CN / 成员主页

阿青 · 社区话题账号

查看阿青 · 社区话题账号发布的技术文章、关注圈子与公开讨论。

0技术文章4关注圈子462圈内发布1关注者
COMMUNITY POSTS

交流圈发布内容

作者在不同技术圈子中的观点与讨论

1
# MySQL

MySQL 主从复制延迟怎么解决?

延迟原因:① 从库 SQL 线程单线程重放(写量大、大事务、DDL);② 主库并发写 vs 从库串行;③ 从库硬件/网络弱;④ 长事务、无主键表更新慢。解决:① 并行复制:replica_parallel_workers(MTS,按库/按事务/按行并行,5.7+);② 优化大事务:拆分批量提交;③ 提升从库硬件(IO/磁盘,用 SSD);④ 读写分离策略:强一致读走主库、延迟敏感业务读主;⑤ 监控秒级延迟(Seconds_Behind_…

2
# MySQL

MySQL 主从复制的原理是什么?

主从复制流程:① 主库写 binlog(提交时);② 从库 IO 线程连接主库请求 binlog,主库 dump 线程发送;③ 从库 IO 线程把 binlog 写入中继日志 relay log;④ 从库 SQL 线程读取 relay log 并重放,更新从库数据。三个线程:主库 dump 线程、从库 IO 线程、从库 SQL 线程。类型:异步复制(默认,主库不等待从库)、半同步复制(semisync:至少一个从库 ack 才提交,5.…

3
# MySQL

MySQL binlog 的三种格式:statement、row、mixed 有什么区别?

① STATEMENT:记录原始 SQL——日志小、可读性好,但结果不确定(NOW()、UUID()、存储过程)导致主从数据不一致;② ROW:记录每行变更(行前/后镜像)——最准确、主从一致,但日志量大(批量更新每条都记);③ MIXED:默认——大部分用 statement,不安全的语句自动切 row。8.0 默认 ROW(binlog_format=ROW),配合 binlog_row_image 控制镜像;row 格式支持闪回(…

4
# MySQL

MySQL redo log 为什么是物理日志?WAL 机制是什么?

redo log 记录页的物理修改(如页号 + 偏移 + 新值),因为崩溃恢复需要精确重放页变更(不依赖 SQL 重跑,幂等高效)。WAL(Write-Ahead Logging,先写日志再改数据):事务提交时先把 redo log 刷盘,数据页修改可留在 Buffer Pool 由后台异步落盘——即使数据页没刷盘崩溃,重启后重放 redo 即可恢复,保证持久性且性能高(顺序写日志 vs 随机写数据页)。刷盘策略:innodb_flus…

5
# MySQL

MySQL 的 binlog、redo log、undo log 有什么区别?

① redo log(重做日志,InnoDB 引擎层):记录物理页修改,循环写(ib_logfile),WAL 机制,用于崩溃恢复保证持久性(已提交事务不丢);② binlog(二进制日志,Server 层):记录逻辑 SQL/行变更,追加写,用于主从复制与时间点恢复;③ undo log(回滚日志,InnoDB 层):记录修改前的值,用于事务回滚与 MVCC 版本链,purge 线程清理。区分:redo 是物理(页)、InnoDB 特…

6
# MySQL

MySQL 有哪些存储引擎?怎么选择?

常用引擎:① InnoDB(8.0 默认):事务、行锁、外键、崩溃恢复(redo log)、MVCC——OLTP 首选,几乎所有业务场景;② MyISAM:无事务、表锁,仅历史/只读归档场景;③ MEMORY:数据在内存、极快但重启丢失,适合临时表/缓存型小表;④ Archive:只支持 INSERT 与 SELECT、高压缩——日志归档;⑤ CSV:明文 CSV 存储、可被外部工具读取——数据交换;⑥ Blackhole:写入即丢,用…

7
# MySQL

MySQL InnoDB 的 Change Buffer 是什么?

Change Buffer(5.5 前叫插入缓冲 Insert Buffer):缓存对二级索引页的 DML 修改(插入/更新/删除)——当目标二级索引页不在 Buffer Pool 时,不立即读入并修改,而是记录变更(内存或磁盘),等页被读到或后台 merge 时批量应用。收益:① 减少随机 IO(不立即读索引页);② 写放大降低,批量合并。代价:异常崩溃恢复更复杂、change buffer 占内存(innodb_change_buf…

8
# MySQL

MySQL InnoDB 的自适应哈希索引(AHI)是什么?

自适应哈希索引(Adaptive Hash Index):InnoDB 自动为频繁访问的索引页建立哈希索引(基于 B+ 树页的 key 前缀),将 O(log n) 的 B+ 树查找降为 O(1) 哈希查找——无需人工创建、不可控制(由 workload 自动触发,innodb_adaptive_hash_index 开关)。适合:等值查询频繁、索引页访问集中的场景;代价:维护哈希表有开销、占用 Buffer Pool、可能加剧锁竞争(…

9
# MySQL

MySQL InnoDB 的 Buffer Pool 是什么?

Buffer Pool 是 InnoDB 的内存缓冲池(默认 128MB,生产一般设为物理内存 60-80%),缓存:① 数据页(表数据、索引页)——避免每次读磁盘;② 索引页;③ undo 页、插入缓冲等。机制:① LRU 淘汰(改良版:分 young/old 区防大查询污染缓存);② 脏页:修改先落内存页,由后台线程异步刷盘(redo log 保证崩溃不丢);③ 预读(顺序扫描提前加载);④ 命中率监控(Innodb_buffer_…

10
# MySQL

MySQL Memory 引擎和临时表是什么?

MEMORY(HEAP)引擎:数据全存内存、极快,但:① 重启/崩溃数据丢失(仅临时用);② 表锁、不支持事务/外键;③ 行长度限制(变长类型用 varchar 有问题)、max_heap_table_size 限制容量。适用:缓存型小表、会话状态、临时汇总。临时表:CREATE TEMPORARY TABLE(会话级,自动销毁)、SQL 内部生成的临时表(GROUP BY/ORDER BY 大结果,磁盘临时表用 tmpdir);监控…