继我把PHP的版本升级之后,我把目光转向MySQL的版本。本站由于搭建时间也算比较久了,并且OS没有升级到7,因此用的MySQL还是5.1的版本 – 一个已经不被支持的版本。
于是乎我打算将MySQL也升级到最新 – 8.0。
其实第一次尝试已经是几天前了 – 我把事情想得太简单,以为升级MySQL和升级PHP一样,只需要定向到一个新的Yum Repo,然后执行yum install就好了。结果是在升级后,MySQL不能启动,一直在报数据库格式不正确。
翻阅文档后才发现,原来不同版本的MySQL不能直接升级,需要对数据库的结构或者内容进行相应的改变才能在更高级别的MySQL下运行。像我这样直接将MySQL版本升级到最高,但是数据库结构和内容还是以前的样子,就有兼容性问题而无法启动。
这里陷入了一个死循环 – 服务无法启动因为数据库内容格式不正确,要改数据库内容就要启动MySQL服务……这下子没辙了。由于特别自信,因此在升级MySQL之前没有做备份(其实是做了,但是备份错了文件夹,结果只备份了一个link……)。Google了很多方法,最终也无法再讲现有版本回退到之前的版本。
万幸的是,我曾经为了尝试升级OS的时候,给我的两块磁盘都执行了一次快照!检查了一下日期:4月10日!那就说明如果回退的话,丢失的数据只是4月10日到5月1日的内容!这真的算是不幸中的万幸了!另一方面,我不想丢失这阵子对博客进行的所有改动,因此我赶紧备份了博客的文件夹,以及数据库的文件夹。
当所有备份准备妥当,我执行了快照回滚,非常快,所有的一切都回到4月10日。
将博客和数据库的备份覆盖回来,启动各个服务,网站重新上线!内容没有任何丢失。
更好的是,由于之前写过那篇文章,因此我只需要将里面提到的步骤一步一步再执行一遍,PHP也就又回到7.1的版本了。
Okay,开始今天的正题,升级MySQL。
人不能掉进同一条河里两次。这次我做了充分的准备。MySQL的版本升级上,有其自己的限制。5.1的版本想升到5.7(先不要想8.0了),首先要在5.5的版本过度一下。在5.5的版本下对数据库表结构进行升级,然后升级到5.7,再对表结构进行一次升级。
在Google的过程中,我发现很多人都提到了MariaDB。经过一番了解,MariaDB相当于MySQL的一个分支,但是开源了,于是发现得特别迅速。性能上也会高过MySQL 3到5个百分点。于是我想不如直接升级到MariaDB好了。
MariaDB目前的stable版本是10.2。
(关于MySQL和MariaDB的对比,请参照这两篇文章《MariaDB vs MySQL: In-Depth Comparison》和《10 reasons to migrate to MariaDB (if still using MySQL)》)
我参照了这个Guide – 《Upgrading MySQL 5.1 to MariaDB 10.0 on CentOS 6》。基本上一步一步照着执行就好了,但是中间还是出了一些错误。我还是把自己的步骤记录下来吧:
- mysqldump -u root -p –all-databases > /tmp/backup.sql //备份,加-p参数是因为数据库访问需要密码
- cp /etc/my.cnf /etc/my.cnf.bak
- service mysqld stop //MySQL默认的服务是mysqld,升级后的默认服务变成mysql,少了个d
- cp -R /<path>/mysql /tmp/mysql_backup //注意备份完后的folder权限是root:root,如果以后真的要使用的话,要改成mysql:mysql
- Download repository (5.5) from MariaDB – https://downloads.mariadb.org/mariadb/repositories/#mirror=nodesdirect&distro=CentOS&distro_release=centos6-amd64–centos6&version=5.5 //注意MariaDB也是要用5.5过渡一下的
- yum clean all
- yum remove mysql-server //remove 5.1
- yum install mysql-server //5.5
- service mysql start //这里我遇到一个错误,启动失败,原因是log文件丢失。之前的log文件被改名了,解决办法是手工生成一个log文件(或者拷回来),并将权限改成mysql
- mysql_upgrade -u root -p //升级表结构
- yum remove mysql-server mysql-client // remove 5.5
- Disable repository Maria 5.5
- Download repository (10.2) from MariaDB – https://downloads.mariadb.org/mariadb/repositories/#mirror=nodesdirect&distro=CentOS&distro_release=centos6-amd64–centos6&version=10.2
- yum clean all
- service mysql stop
- yum install mysql-server mysql-client //10.2
- service mysql start
- mysql_upgrade -u root -p
- mysql –version
至此,数据库成功从MySQL 5.1升级到MariaDB 10.2。
Cheers!
