站长手记 - 站长手记
打印】【收藏此页
网站数据库从MySQL 5.0升级到5.6的记录
作者:本站:苏信东  来源:WaveCN.com 世纪音频  发布日期:2014-11-02  最后修改日期:2014-11-02  

这个网站用的MySQL一直都是CentOS 5自带的版本,一直升级下来到了5.0.95这个2012年的版本之后就再没变化。看看mysql网站上5.6都已经GA,想想也应该升级了,始终5.0.95已经严重过时。虽然CentOS本身提供了5.5.37的版本,但考虑后决定一步到位直接升级到5.6.21。觉得凭着自己多年用mysql的经验,升级过程应该很简单,其实却不然。

首先考虑安装源。可以在CentOS里面添加mysql的yum仓库源,也可以直接下载mysql的rhel5的rpm包来安装。考虑到并不是频繁升级,对数据库的版本其实也没有太特别的要求(暴露了这次的升级完全就是为了折腾...),所以直接下载rpm包来安装。下载点使用了搜狐的开源镜像:

wget http://mirrors.sohu.com/mysql/MySQL-5.6/MySQL-5.6.21-1.rhel5.x86_64.rpm-bundle.tar

然后解包:

tar xf MySQL-5.6.21-1.rhel5.x86_64.rpm-bundle.tar

卸载现行使用的版本:

service mysqld stop

rpm -ev --nodeps mysql-5.0.95-5.el5_9.i386 mysql-5.0.95-5.el5_9.x86_64 mysql-server-5.0.95-5.el5_9.x86_64

安装新版本:

rpm -ivh MySQL-client-5.6.21-1.rhel5.x86_64.rpm MySQL-server-5.6.21-1.rhel5.x86_64.rpm MySQL-shared-5.6.21-1.rhel5.x86_64.rpm

还原卸载时被改名的配置文件:

mv /etc/my.cnf.rpmsave /etc/my.cnf

以上都是轻车熟路了,然后简单地:

service mysql start

结果启动失败。于是,看日志查手册的过程开始了。最后总结如下:

1. innodb的主数据文件:ibdata1的大小,从旧版本的默认10M改为默认12M。结果,对于只有10M大小的ibdata1文件(一般地,如果数据库里面没有任何innodb表则ibdata1就是默认大小),如果配置里面没有专门说明,mysql启动时innodb engine初始化会失败,提示ibdata1大小和指定的默认大小不符。解决办法有两个方向:

1)如果要保留现有的ibdata1文件,则需要在/etc/my.cnf里面写清楚:

innodb_data_file_path=ibdata1:10M:autoextend

2)如果不保留现有的ibdata1文件,则直接删除ibdata1、ib_logfile0 和 ib_logfile1文件,让mysql根据内定的默认值自动创建。

2. 个别配置属性已经被取消,个别属性需要指定,于是修改配置文件。这个过程就不赘述了。不过,比较重要的变更是sql_mode,需要认真阅读手册。

修改完成后,启动mysql:

service mysql start

启动成功,但启动后进行mysql_upgrade操作时mysql服务一连接就崩溃。经查原因是新旧版本之间grant table差距太大导致。由于mysql_upgrade根本没机会运行,所以要在配置文件里面添加设定:

skip-grant-table

然后启动,启动后运行mysql_upgrade。当upgrade操作成功完成后,停止mysql服务,然后修改配置文件去掉skip-grant-table,再启动数据库。