关于[InnoDB] Unsupported redo log format (0). The redo log was created before MySQL 5.7.9的解决办法

本文介绍在CentOS7系统中遇到的MySQL慢关机问题及解决步骤。通过查找并删除ib_logfile0和ib_logfile1文件,备份my.cnf配置,以及重新启动MySQL服务,最终解决了初始化指定但数据目录已有文件的问题。

google上查到的

关闭slow shutdown,我在centos7 上输入代码

slow shutdown

发现没作用,也无效
然后,使用cd 进入 /var/lib/mysql/文件夹,

cd /var/lib/mysql

其实不用进入,我直接查找的ib_logfile0 和ib_logfile1

find / -name ib_logfile0
find / -name ib_logfile1

利用mkdir和cp命令进行备份,

mkdir backup
cp /var/lib/mysql/ib_logfile0 /backup
cp /var/lib/mysql/ib_logfile1 /backup

然后删除备份前的这两个文件,

rm /var/lib/mysql/ib_logfile0
rm /var/lib/mysql/ib_logfile0

重新运行

service mysqld start
service mysqld status -l

成功运行

之后备份了my.cnf配置,并删除

rm /etc/my.cnf

删除 /var/lib/mysql解决

[ERROR] [MY-010457] [Server] --initialize specified but the data directory has files in it. Aborting.

的提示
rm -rf /var/lib/mysql
重新运行

service mysqld start
service mysqld status -l

无警告和报错

google原文

If you have already installed MySQL and did not perform a slow shutdown using the

innodb_fast_shutdown

Flag, simply go to your MySQL directory

/var/lib/mysql/

And remove the log files (Do not do this if you need the table data in your database until you have backed up your database):

ib_logfile0 ib_logfile1

Back them up before if you need them again.

参考链接:
1
2

<think> 嗯,用户这次提出了一个关于MySQL redo log逻辑上非空的具体问题。从引用内容看,用户似乎已经研究过redo log的基本原理和bin log的区别,还涉及主从复制配置。用户特别强调是MySQL 5.7.27版本的问题,说明可能遇到了特定版本的行为。 用户提到的“逻辑上非空”这个表述很专业,可能是指虽然磁盘文件存在,但实际没有有效数据的状态。结合MySQL机制,redo log文件在创建时确实会预分配空间(默认每个128MB),但初始状态可能填充0x00字节。用户可能误以为这种预分配状态属于异常。 需要重点考虑的几个技术点: 1. InnoDB启动时会初始化redo log文件组,新创建的文件会写入文件头(包含LOG_HEADER_FORMAT字段) 2. 检查方法除了文件大小,更应该通过SHOW ENGINE INNODB STATUS的Log sequence number值判断 3. 特别要注意5.7版本在崩溃恢复时对未使用redo log的处理逻辑 用户上次对话涉及系统级指令,这次却提出具体技术问题,可能是DBA角色。回复时要避免基础概念解释,直接切入解决方案。考虑到用户研究过主从复制,可以适当关联bin log机制,但核心要解决redo log的疑惑。 最关键的澄清点在于:新建redo log的“逻辑空”状态实际是MySQL的正常行为,只要LSN值正常增长就表示工作正常。需要引导用户从LSN角度验证而非文件内容。 </think> 解决MySQL 5.7.27redo log逻辑非空的问题,需结合InnoDB存储引擎机制和文件管理策略,按以下步骤操作: ### 一、问题本质分析 1. **redo log预分配机制** MySQL初始化时会创建`ib_logfile0`和`ib_logfile1`(默认各48MB),文件虽已分配磁盘空间,但初始内容为**预格式化空数据**(填充0x00),导致"逻辑非空"的假象[^1]。 2. **写入触发条件** 首次数据修改时才会写入有效日志,在此之前通过`hexdump`查看将显示全零内容。 ### 二、解决方案 #### 方法1:等待事务触发(推荐) ```sql -- 执行任意数据修改操作 UPDATE mysql.user SET password_last_changed=NOW() LIMIT 1; FLUSH PRIVILEGES; ``` - **效果**:触发redo log写入,文件头部将出现有效日志标识(如`0x494e4e4f`即"INNO"的ASCII) - **验证**:`sudo hexdump -C /var/lib/mysql/ib_logfile0 | head -n 5` #### 方法2:调整日志参数(需重启) ```ini # my.cnf 配置 [mysqld] innodb_log_file_size = 128M # 增大日志文件大小 innodb_log_files_in_group = 3 # 增加日志文件数量 ``` 1. 停止MySQL服务 `sudo systemctl stop mysql` 2. 备份并删除原日志文件 ```bash sudo mv /var/lib/mysql/ib_logfile* /backup/ ``` 3. 修改配置后重启 `sudo systemctl start mysql` #### 方法3:强制初始化(高风险) ```sql SET GLOBAL innodb_fast_shutdown = 0; -- 完全清理模式 SHUTDOWN; -- 关闭实例 ``` - **注意**:此操作会清空所有未提交事务,仅限测试环境使用 ### 三、验证逻辑状态 通过InnoDB状态检查实际使用量: ```sql SHOW ENGINE INNODB STATUS\G ``` 检查输出中: ``` --- LOG Log sequence number 12451798 # 当前LSN(日志序列号) Log flushed up to 12451798 Pages flushed up to 12451798 ... ``` - **关键指标**:若`Log sequence number > 0`即表示日志已激活使用 ### 四、附加建议 1. **监控策略** ```sql SELECT ROUND(lsn_now/innodb_log_size) AS log_usage_percent FROM (SELECT VARIABLE_VALUE AS lsn_now FROM information_schema.GLOBAL_STATUS WHERE VARIABLE_NAME = &#39;Innodb_os_log_written&#39;) a, (SELECT @@innodb_log_file_size * @@innodb_log_files_in_group AS innodb_log_size) b; ``` 2. **空间回收** 当日志文件物理大小超过`innodb_log_file_size`定义值时,MySQL会自动回收旧空间[^1] > **重要提示**:新部署的MySQL实例中redo log初始显示"非空"属于正常预分配行为,只要确认事务写入后LSN增长即无需干预。强行清空文件可能导致崩溃恢复失效[^1]。 --- ###
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值