Ⅰ mysql日志文件详解
MySQL数据库的日志文件主要分为三种类型:binlog日志、redo日志和undo日志。
1. binlog日志 作用:binlog日志是MySQL上层产生的逻辑日志,记录了所有对MySQL数据库执行更改的操作,主要适用于数据恢复、复制和审计。 配置参数: max_binlog_size:规定了单个日志文件的最大值,达到后会生成新文件。 binlog_cache_size:二进制缓冲大小,影响性能。 sync_binlog:控制写入磁盘的频率。 binlog_format:决定日志格式。
2. redo日志 作用:redo日志以物理格式记录对每个页的修改,实现事务的持久性。包含内存中的重做日志缓冲和重做日志文件。 参数:innodb_flush_log_at_trx_commit控制日志刷新策略,包括不刷新、事务提交时刷新和在文件系统缓存中刷新。 结构:redo日志以512字节为单位,组成重做日志块和重做日志组。LSN表示日志总量、checkpoint位置和页版本。InnoDB在启动时会尝试恢复LSN在checkpoint之后的数据。
3. undo日志 作用:undo日志用于恢复事务和实现MVCC,存储在数据库共享表空间中。 结构:每个回滚段记录1024个undo log segment,由rollback segment文件、个数和文件数量构成。 事务处理:事务提交后,undo log会被放入链表等待purge操作最终删除。redo日志和undo日志在事务过程中会产生,需要持久性保护。InnoDB在事务提交时会将undo log放入链表,并判断undo页是否可以重用,以供下个事务使用。purge线程最终完成update和delete操作。
这些日志文件在MySQL数据库的运行、备份、恢复、复制以及审计等方面扮演着关键角色,合理配置和管理这些日志文件对于确保数据库的稳定性和性能至关重要。