一次MySQL内存分配失败的解决

使用WordPress搭建的个人网站,前几天访问时,页面出现错误提示:“数据库连接错误”,记录解决过程。

解决步骤
  1. 首先后台登录服务器,使用 netstat -tunpl 查看端口信息,发现mysqld使用的3306端口不在列表中,说明MySQL未启动。一开始以为是终端连接断开时mysql不能自动启动,所以尝试把mysql加入到自动启动列表;
  2. 使用命令 chkconfig --list 查看,mysql果然不在列表,所以使用 chkconfig --add mysqld 加入到启动列表,再次 chkconfig --list ,mysqld加入成功;
  3. 使用命令 service mysql start 启动MySQL,提示Failed;
  4. 使用命令 systemctl status mysqld.service 查看详细信息,提示:Failed to start LSB: start and stop MySQL,还是不知道什么原因;
  5. 决定查看MySQL日志,使用命令 cat /alidata/log/mysql/error.log,发现有如下报错信息:

171224 21:20:37 InnoDB: Initializing buffer pool, size = 128.0M
InnoDB: mmap(137363456 bytes) failed; errno 12
171224 21:20:37 InnoDB: Completed initialization of buffer pool
171224 21:20:37 InnoDB: Fatal error: cannot allocate memory for the buffer pool
171224 21:20:37 [ERROR] Plugin ‘InnoDB’ init function returned error.
171224 21:20:37 [ERROR] Plugin ‘InnoDB’ registration as a STORAGE ENGINE failed.

  1. 看来是内存分配失败,free -m 查看系统内存,发现可用内存只有60多M,因为这台服务器内存只有1G,也不想增加内存了,决定减小InnoDB的分配内存,但怎么知道MySQL使用哪个配置文件呢;
  2. 使用命令 vi /etc/init.d/mysqld 打开启动脚本,发现其中有字段:conf=/etc/my.cnf,就是它了;
  3. 使用命令 vi /etc/my.cnf 打开配置文件,找到如下字段:

# You can set …_buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
# innodb_buffer_pool_size = 16M
#innodb_additional_mem_pool_size = 2M

这些字段虽然被注释,但从前面 error.log 中可以看到,innoDB默认分配了128M内存,需要调小,因此把这行的注释打开,并修改值为32M,如下:

innodb_buffer_pool_size = 32M

保存文件退出;
9. 再次启动Mysql,使用命令 service mysql start,提示MySQL启动成功。再次查看日志, cat /alidata/log/mysql/error.log,有如下信息:

171224 21:53:31 InnoDB: Initializing buffer pool, size = 32.0M
171224 21:53:31 InnoDB: Completed initialization of buffer pool
171224 21:53:31 InnoDB: highest supported file format is Barracuda.

说明内存分配成功。
10. 最后使用命令 netstat -tunpl 确认,可以看到 3306 端口显示在列表中,此时网站访问也正常了。

注:如果服务器使用的不是阿里云,执行目录可能和本文有差异。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值