首页 > Mysql > 放弃mysql,源码编译升级到mariadb

放弃mysql,源码编译升级到mariadb

自从mysql被收购之后LNMP构架中的Mysql开始慢慢由mariadb来代替,甚至谷歌也迁移到mariadb了。最近升级了nginx到最新稳定版,接着又是升级php7.0正式版,干脆把mysql替换为mariadb最新版^^。

可惜,阿里云的服务器内存不够啊,尝试升级了N多次都报错:

gcc: internal compiler error: Killed (program cc1)
Please submit a full bug report,
with preprocessed source if appropriate.

查资料才知道原来是内存不够,准确来说是阿里云默认没有给swap分区,为什么不给阿里云官方最清楚。还好cnblog上给出了解决方案,临时创建一个2GB的swap分区,源码编译升级后然后再移除即可。

首先我先写好mysql2mariadb.sh用于升级源码编译升级,之前在大内存机器上测的时候执行占用了1个小时。

然后,我在shell脚本的前面添加了新增swap分区的代码:

dd if=/dev/zero of=/swapfile bs=1k count=2048000

mkswap /swapfile

swapon /swapfile

紧接着在结束的时候添加移除swap分区的代码:

swapoff /swapfile

rm -rf /swapfile

执行过程中,通过监控工具可以看出编译过程中的真实内存占用忽高忽低,但也没超过50%,后期的swap占用就上来了,大概占用了7%的swap空间。这次编译再也不报错了,搞定。


至于阿里云为什么不给swap分区,估计是磁盘性能太烂,换成SSD银子又不够,凑合着用吧。

对于内存小于2GB的普通linux服务器可以建议还是创建swap分区,还是很有必要的:

1. 添加swap文件大小为2G
默认情况下, of=/swapfile 即swapfile文件创建在/var/目录下。 
若我在创建在/opt/image/目录下, 则下面所有的操作里有/swapfile的都要改为/opt/image/swap
# dd if=/dev/zero of=/swapfile bs=1k count=2048000
2. 创建SWAP文件
# mkswap /swapfile
3. 激活SWAP文件
# swapon /swapfile
4. 查看SWAP信息是否正确
# swapon -s
5. 添加到fstab文件中让系统引导时自动启动

注意, 这里是采用了swapfile文件的默认路径, 即/var/swapfile。若你上面的操作中swapfile文件不是在/var/目录下, 则下面的/var/swapfile也要相应修改为自己设写的。

# echo "/var/swapfile swap swap defaults 0 0" >> /etc/fstab
6. 用命令free检查2G交换分区生效
# free -m
或者, 检查meminfo文件
# grep SwapTotal  /proc/meminfo
7. 释放SWAP文件
# swapoff /swapfile
8. 删除SWAP文件
# rm -fr /swapfile

还有,升级PHP7.0的过程中也需要保证尽可能多的内存,否则也有可能报错哦。

本文地址:http://blog.zhengshuiguang.com/mysql/mysql-mariadb.html

转载随意,但请附上文章地址:-)

标签:mysql mariadb 交换分区 swap分区

相关文章

评论已关闭