MariaDB 在低配主机崩溃问题

最近我遇到了一个奇怪的问题,我的MariaDB 数据库时不时会崩溃。因为考虑只作博客用途,我选用了1G内存的低配主机,然而遇到MariaDB 出现内存不足问题,导致最后数据库进程崩溃了。

如果你遇到了这个问题,可以检查下 MariaDB 的log

tail -n 100 /var/log/mariadb/mariadb.log

找到了类似如下的报错:

180208 12:08:05 [Note] InnoDB: Initializing buffer pool, size = 128.0M
InnoDB: mmap(137363456 bytes) failed; errno 12
180208 12:08:05 [ERROR] InnoDB: Cannot allocate memory for the buffer pool
180208 12:08:05 [ERROR] mysqld: Out of memory (Needed 128917504 bytes)
180208 12:08:05 [ERROR] Unknown/unsupported storage engine: InnoDB

最初,我在网上搜索了这个问题,按其他人讲的,增加了虚拟内存(swapfile),可是完全不奏效,还是一样会崩溃。

在查阅了MariaDB 官方资料,我找到了解决方案:

 MariaDB – Starting MySQL On Low Memory Virtual Machines

大致意思是,MariaDB 启用了性能模式,启动时就会申请大量内存来执行性能模式,默认就使用400M的内存了。当然,这还不包括数据库本身需要的内存。

方法就是修改配置 /etc/my.cnf, 在 [mysqld] 项中,增加一行配置:

performance_schema = off

然后,重启下 MariaDB。至此,问题已解决。

 

下面借此文章,再讨论两个问题:

1、配置虚拟内存(swapfile),可改善低配主机的内存使用

2、MariaDB 更改为 MySQL,数据库文件可兼容,无须迁移

 

配置虚拟内存(swapfile)

如果是创建2G的虚拟内存,命令为:

sudo swapoff /var/swapfile
sudo dd if=/dev/zero of=/var/swapfile bs=1M count=2048
sudo mkswap /var/swapfile
sudo swapon /var/swapfile

然后,修改/etc/fstab , 添加一行配置,以便系统重启时自动生效。

/var/swapfile swap swap defaults 0 0

启用虚拟内存后,可以通过 cat /proc/swaps 或 free -m 查看 swapfile 的使用情况

 

MariaDB 更改为 MySQL

MariaDB和MySQL虽然是不同的产品,但主要的作者都是同一个人,在MySQL被收购后,他便推出替代MySQL的产品MariaDB。两者除了新特性的区别,其他几乎是一样的,配置文件可能有些小差异。

这里以CentOS 7做讨论,其他系统没试过,可参照操作,在操作前备份下数据库。

1.下载mysql的repo源
$ wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
2.安装rpm包
$ sudo rpm -ivh mysql57-community-release-el7-11.noarch.rpm

注:MySQL rpm 包可以在 https://dev.mysql.com/downloads/repo/yum/ 找到,安装后,系统会生成两个用于安装mysql的yum 源:/etc/yum.repos.d/mysql-community.repo 和 /etc/yum.repos.d/mysql-community-source.repo

3.安装mysql
$ sudo yum install mysql-server
根据提示安装就可以了,不过安装完成后没有密码,需要重置密码

4.重启mysql服务
$ service mysqld restart

搞定!

发表评论

电子邮件地址不会被公开。 必填项已用*标注