本文共 1208 字,大约阅读时间需要 4 分钟。
Mysql接收一个查询请求后,首先会检查查询缓存。查询缓存存储了之前执行过的语句,这样可以快速返回结果,减少不必要的处理时间。如果查询未命中缓存,就进入后续处理流程。
需要注意的是,任何对表格的更新操作都会清空查询缓存。从Mysql8.0开始,查询缓存已经被移除。
在查询流程中,Mysql会依次执行以下步骤:
词法分析:解析语句的结构,识别关键字、表名、列名等。
语法分析:检查语句的语法是否正确,找出错误并提示位置。
优化器:确定最优执行方案,例如选择合适的索引和执行顺序。
执行器:实际执行SQL语句,完成数据操作。
Mysql数据库中的日志主要有以下几种:
Binlog日志:记录所有DML操作(插入、更新、删除、截断、创建),不记录SELECT语句。主要用于数据复制和恢复。
Redo Log日志:记录物理页的修改,用于事务持久化,确保数据在崩溃后能恢复到一致状态。
Undo Log日志:用于事务回滚和多版本控制(MVCC),记录操作前的数据状态,支持精确回滚。
Binlog记录了数据库表结构和数据变更,主要用于主从复制和数据恢复。企业常采用一主多从架构,通过Binlog实现数据同步。
Binlog的主要作用包括:
数据复制:从服务器与主服务器保持一致。
数据恢复:在数据库故障时,利用Binlog恢复数据。
Redo Log记录了在内存中修改的物理页信息,确保数据持久化。Mysql在内存修改数据后,先写入Redo Log,再写到磁盘。Redo Log采用顺序IO模式,写入速度快,恢复速度快。
Redo Log的主要优势包括:
保证数据持久化:防止数据库崩溃导致数据丢失。
恢复速度快:Redo Log文件体积小,恢复过程快速完成。
Binlog和Redo Log在用途和内容上有明显区别:
Binlog记录逻辑变化:记录DML操作日志,适合用于复制和恢复。
Redo Log记录物理变化:记录具体页修改内容,用于数据持久化。
二者的主要区别在于:
Binlog用于数据复制,Redo Log用于数据持久化。
Binlog在事务提交时记录,Redo Log在事务开始时记录。
两者在事务提交时需要保持一致性,MySQL通过两阶段提交保证一致性。
Undo Log用于事务回滚和MVCC,记录操作前的数据状态。它与Redo Log不同,主要用于逻辑回滚和版本控制。
Undo Log的主要作用包括:
回滚支持:允许在事务失败时精确回滚操作。
MVCC实现:通过版本控制,确保读写不阻塞。
Undo Log存储逻辑日志,与Redo Log物理日志不同,主要用于事务管理和数据恢复。
转载地址:http://ridfk.baihongyu.com/