前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一个MySQL实例启动问题

一个MySQL实例启动问题

作者头像
AsiaYe
发布2020-03-12 16:11:28
6250
发布2020-03-12 16:11:28
举报
文章被收录于专栏:DBA随笔
下午在启动一个线上MySQL服务的时候,遇到了一个问题,简单整理一下过程。

问题描述:

之前用kill的方法杀掉了一个MySQL的进程,今天想要重启这个进程,启动的过程中,发现

代码语言:javascript
复制
--T19::35.443445+:  [Note] InnoDB: Number of pools: 
--T19::35.443578+:  [Note] InnoDB: Using CPU crc32 instructions
--T19::35.446085+:  [Note] InnoDB: Initializing buffer pool, total size = M, instances = , chunk size = M
--T19::35.463097+:  [Note] InnoDB: Completed initialization of buffer pool
--T19::35.466798+:  [Note] InnoDB: If the mysqld execution user is authorized, page cleaner thread priority can be changed. See the man page of setpriority().
--T19::35.476864+:  [ERROR] InnoDB: The Auto-extending innodb_system data file '/data/mysql_4306/data/ibdata1' is of a different size  pages (rounded down to MB) than specified in the .cnf file: initial  pages, max  (relevant if non-zero) pages!
--T19::35.476894+:  [ERROR] InnoDB: Plugin initialization aborted with error Generic error
--T19::36.077732+:  [ERROR] Plugin 'InnoDB' init function returned error.
2020-03-06T19::36.077818+:  [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
--T19::36.077842+:  [ERROR] Failed to initialize builtin plugins.
--T19::36.077860+:  [ERROR] Aborting

从errlog的信息可以推断,是ibdata1的文件大小和配置文件.cnf的大小不一致导致的,这里需要留意这两个数字,一个是64000,另外一个是65536,但是这个计算的是pages为单位的。

我们看看我们在配置文件my.cnf中设定的文件大小:

innodb_data_file_path = ibdata1:1024M;ibdata2:1G:autoextend

这里写的是ibdata1:1024MB

根据报错信息,说我们数据文件中的内容是65536 pages

也就是说:1024MB=65536 pages 的容量

很容易计算,每64个pages就是1M

这里有必要引入之前的一篇文章:

InnoDB表空间介绍(2)

在这篇文章中我们说过innodb中的区的概念,连续的64个数据页成为一个区,这个概念在下面的解释中会有用。

在Innodb中,我们知道默认的数据页大小是16KB,当数据量小的时候,我们用默认数据页大小来分配存储空间没有问题,但是在表中数据量大的时候,为某个索引分配空间的时候就不再按照页为单位分配了,而是按照为单位分配,甚至在表中的数据十分非常特别多的时候,可以一次性分配多个连续的区。虽然可能造成一点点空间的浪费(数据不足填充满整个区),但是从性能角度看,可以消除很多的随机IO操作,如果我们用数据页为最小单位进行存储分配,那么分配的频率会比较高,而且分配的数据页之间可能物理空间位置很远。这样Innodb的性能会急剧下降。

我们通过简单的计算,一个数据页是16K,64个数据页为一个区,那么一个区就是1MB的空间,而我们上面的出错信息中的pages也就是数据页,恰好对应起来。

那么报错信息中心提示当前的ibdata1文件和my.cnf中配置的大小不一样,我们看看当前的ibdata大小:

1000M ibdata1 1.1G ibdata2

也就是说,实际的ibdata大小为1000M,而我们的配置文件的大小是1024M,这就产生了问题,那么解决方案就比较容易了,就是把my.cnf中的配置改为:

ibdata1:1024M;ibdata2:1G:autoextend即可。

由于ibdata2是autoextend的,所以,大小超过1G也是可以理解的。

这样,重新启动mysql,问题得到解决。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DBA随笔 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档