同事问起线上的"诡异"现象:已经在使用ib_logfile2,但ib_logfile0的更新时间也在改变,不是说是顺序更新的?
1、 ib_logfiles文件及作用
大家都知道这个是InnoDB的redolog。关于redolog的写入策略部分,可以看我之前的这个文章(链接)。
这个系列文件个数由参数innodb_log_files_in_group控制,若设置为4,则命名为ib_logfile0~3。
很多文章都指出这些文件的写入是顺序、循环写的,logfile0写完从logfile1继续,logfile3写完则logfile0继续。
ib_logfiles的作用,主要是在系统崩溃重启时,作事务重做的。而在系统正常时,每次checkpoint时间点,会将之前写入的事务应用到数据文件中。因此有一个问题:系统重启之后,怎么知道checkpoint做到哪儿了?
2、 Ib_logfile的checkpoint field
实际上不仅要记录checkpoint做到哪儿(LOG_CHECKPOINT_LSN),还要记录用到了哪个位置(LOG_CHECKPOINT_OFFSET)等其他信息。所以在ib_logfile0的头部预留了空间,用于记录这些信息。
因此即使使用后面的logfile,每次checkpoint完成后,ib_logfile0都是要更新的。同时你会发现所谓的顺序写盘,也并不是绝对的:)
3、 相关的一些数字
a) InnoDB留了两个checkpoint filed,按照注释的解释,目的是为了能够“write alternately”
b) 每个checkpint field需要的大小空间为304字节。(相关定义在log0log.h)
c) 第一个checkpoint的起始位置在ib_logfile0的第512字节(OS_FILE_LOG_BLOCK_SIZE)处;
d) 第二个在1536 (3 * OS_FILE_LOG_BLOCK_SIZE)字节处。
分享到:
相关推荐
当遇到"InnoDB: Error: log file ./ib_logfile0 is of different size 0 5242880 bytes"这样的错误时,通常意味着InnoDB的日志文件大小与MySQL配置文件中设置的大小不匹配。 InnoDB的日志文件通常以`ib_logfile0`和...
当遇到"InnoDB Error ib_logfile0 of different size"错误时,意味着MySQL在启动时检测到当前的InnoDB日志文件(ib_logfile0和ib_logfile1)的大小与配置文件(my.cnf)中指定的大小不匹配,这可能导致数据库无法...
首先,`innodb_flush_log_at_trx_commit` 参数是 InnoDB 存储引擎特有的,它控制着事务日志(redo log 和 undo log)何时以及如何被刷新到磁盘上的 ib_logfile 文件。此参数有三个可选值: 1. 当设置为 0 时,...
不推荐的方法是直接将`ibdata1`的大小改为1GB,这通常需要删除现有的`ibdata1`以及日志文件(如`ib_logfile0`和`ib_logfile1`),然后重启服务。这种方法存在风险,因为可能会丢失数据,而且在启动时可能会遇到其他...
5. **InnoDB日志文件问题**:InnoDB使用重做日志文件(`ib_logfile0`和`ib_logfile1`)进行事务持久化。如果这些文件损坏或无法访问,也可能导致启动失败。检查日志文件的状态。 6. **数据文件损坏**:`ibdata1`...
2. **删除用户数据库文件和日志文件**:进入datadir目录,找到并删除所有用户数据库文件(通常是`.frm`、`.MYD`和`.MYI`文件)以及InnoDB的日志文件`ib_logfile0`和`ib_logfile1`。这些文件可能已经损坏,删除它们...
5. **日志分析**:分析InnoDB的日志文件(ib_logfile*),可能有更多关于异常关闭的记录。 6. **重新创建表空间**:在极端情况下,如果上述方法都无效,可能需要删除并重新创建InnoDB表空间,但这会丢失所有InnoDB...
同时,InnoDB存储引擎还依赖于ib_logfile0、ib_logfile1和ibdata1三个文件,这三个文件的错误都会导致ERROR 1146错误的出现。 ERROR 1146错误的解决方法 解决ERROR 1146错误的方法是首先将skip-innodb注释掉,然后...
近日更换服务器,要做数据库迁移,将数据库内的数据从服务器A迁移到服务器B。...结果启动失败,报出 “无法启动MySQL服务”异常,查看错误日志,发现问题描述如下:InnoDB: Error: log file ./ib_logfile
首先,MySQL的文件系统包含多种类型的文件,如数据文件(*.frm, *.ibd)、数据字典(ibdata1, ibdata2)、事务日志(ib_logfile0, ib_logfile1)、回滚日志、归档日志(binlog)和中继日志(relaylog),以及各种...
3. 删除InnoDB相关的所有数据文件,包括ibdata1(系统表空间文件)和ib_logfile*(重做日志文件)。 4. 重启MySQL服务,系统会自动重建这些必要的文件。 5. 最后,导入之前备份的数据库文件,恢复数据。 具体的命令...
通常,InnoDB的数据文件位于MySQL的data目录下,包括ibdata1和一系列的ib_logfile*文件。 4. **修改MySQL配置**: 配置文件my.cnf或my.ini(取决于你的操作系统)控制MySQL服务器的行为。在配置文件中,确保`...
G一下后,解决如下: /var/lib/mysql目录下,删除ibdata1、ib_logfile1、 ib_logfile0,然后重启MySql让其重建以上文件: mysqladmin -uroot -p shutdown sudo mysqld_safe & 搞定! 下面是网络上的其它文章。大家也...
这个引擎的使用跟mysql/data/目录下的ibdata1, ib_logfile0, ib_logfile1有关连, 这三个文件加起来有40Mb, xampps总不可能把它打包进去吧. 当数据库有innodb的引擎表时, 删除掉[ibdata1, ib_logfile0, ib_logfile1]...
InnoDB存储引擎的日志文件(`ib_logfile0`和`ib_logfile1`)的大小由`innodb_log_file_size`参数控制。在迁移过程中,如果忽视了这个参数,就会导致服务启动失败。 解决这个问题的步骤是: 1. 查看错误日志,找出...
例如,在MySQL的安装目录下的Data文件夹中找到并删除ib_logfile0和ib_logfile1两个文件,然后重启MySQL服务。 2. **修改配置文件** - **解决方案**:检查my.ini配置文件中的InnoDB日志文件设置是否正确。通常情况下...
- `ib_logfile0`和`ib_logfile1`:这些是InnoDB事务日志文件,记录了未提交的事务信息,用于在系统崩溃时进行恢复。 MySQL的文件布局可以根据实际需求进行调整,例如,为了优化性能或提高数据安全性,可以将数据...