面试题答案
一键面试1. 重做日志(Redolog)
- 关键事件记录:记录数据库物理层面的修改操作,例如某一页数据的修改。当执行
UPDATE
语句修改表中某一行数据时,重做日志会记录该数据页修改前和修改后的镜像。 - 故障排查应用:在数据库崩溃恢复(crash - recovery)场景下,MySQL会利用重做日志将未完成的事务回滚,并将已提交的事务重新应用,确保数据的一致性。例如数据库突然断电重启,MySQL会根据重做日志恢复到崩溃前已提交事务的状态。
2. 回滚日志(Undolog)
- 关键事件记录:用于记录数据修改前的版本信息,主要为事务回滚和MVCC(多版本并发控制)提供支持。比如执行
DELETE
语句删除某条记录时,回滚日志会记录被删除记录的原始内容。 - 故障排查应用:当事务需要回滚时,MySQL依据回滚日志将数据恢复到事务开始前的状态。若在事务执行过程中发现逻辑错误需要撤销操作,就可利用回滚日志实现。
3. 二进制日志(Binlog)
- 关键事件记录:记录数据库逻辑层面的修改操作,以逻辑日志的形式记录所有对数据库数据有修改的操作,例如执行
CREATE TABLE
、INSERT
等语句。INSERT
语句插入多条记录时,二进制日志会记录整个插入操作的逻辑。 - 故障排查应用:用于主从复制(replication),主库将二进制日志发送给从库,从库通过重放日志来保持与主库的数据一致性。若主从数据不一致,可通过检查二进制日志及其在从库的重放情况来排查问题,如查看从库是否正确接收并应用了主库二进制日志中的所有操作。
4. 慢查询日志(Slow Query Log)
- 关键事件记录:记录执行时间超过指定阈值(可通过参数
long_query_time
设置)的SQL语句。比如一条复杂的JOIN
查询语句,执行时间为5秒,超过了设定的2秒阈值,就会被记录到慢查询日志中。 - 故障排查应用:通过分析慢查询日志,能定位出执行效率低的SQL语句,从而针对性地进行优化,如添加合适的索引、优化查询语句结构等,提升数据库整体性能。
5. 错误日志(Error Log)
- 关键事件记录:记录MySQL服务器在启动、运行、停止过程中发生的错误信息和警告信息。例如服务器启动时因配置文件错误无法加载某个插件,错误日志会记录详细的错误原因和堆栈信息。
- 故障排查应用:当数据库出现异常行为,如无法启动、服务崩溃等情况,首先查看错误日志,根据其中记录的错误信息来定位问题根源,比如配置错误、文件损坏、资源不足等。