记一次关于innodb_data_file_path设置导致启动Mysql时报错

概述

innodb_data_file_path用来指定innodb tablespace文件,如果我们不在my.cnf文件中指定innodb_data_home_dir和innodb_data_file_path那么默认会在datadir目录下创建ibdata1 作为innodb tablespace。5.6.6之后 两个参数的默认值如下:

show variables like 'innodb_data%';

记一次关于innodb_data_file_path设置导致启动Mysql时报错


场景:

在测试环境下没有设置过多的详细参数就初始化并启动了服务,后期优化的过程中发现innodb_data_file_path设置过小并改正。


问题发现过程:

一般my.cnf文件中,默认配置为表空间有四个文件组成:ibdata1、ibdata2、ibdata3、ibdata4,每个文件的大小为10M,当每个文件都满了的时候,ibdata4会自动扩展。

innodb_data_file_path = ibdata1:10M:autoextend

发现该文件已经扩大到了76M:

root@iZmfgnjkehk13uZ:/usr/local/mysql/data# du -sh ibdata1 
76M ibdata1

修改my.cnf为

innodb_data_file_path=ibdata1:12M;ibdata2:512M:autoextend

重启mysql报错,无法启动,查看日志

cat iZmfgnjkehk13uZ.err

报错如下:

记一次关于innodb_data_file_path设置导致启动Mysql时报错


解决:

从日志可以看到./ibdata1' is of a different size 4864 pages代表mysql文件page大小为4864(64pages相当于1M)

计算实际大小:

4864/64=76M

修改/etc/my.cnf配置为

innodb_data_file_path=ibdata1:76M;ibdata2:512M:autoextend

记一次关于innodb_data_file_path设置导致启动Mysql时报错

启动mysql,成功!

记一次关于innodb_data_file_path设置导致启动Mysql时报错


上面讲的是之前工作中不小心设置错innodb_data_file_path的值导致数据库启动不来,通过报错日志中pages的大小来计算并设置innodb_data_file_path合适的大小。

后面小编会分享更多工作中碰到的问题,感兴趣的朋友走一波关注哩~

记一次关于innodb_data_file_path设置导致启动Mysql时报错

相关推荐