centos mysql 升级_centos6.X中使用yum源将mysql5.1升级到mysql5.7

在本博客中,"mysql"是一个系列文章,这些文章主要对mysql/mariadb的常用知识点进行了总结,每一篇博客总结的知识点有所不同,具体内容可参考mysql文章列表。

mysql文章列表直达链接:mysql知识点总结

7128b893d4372469ae0882ad6f10cae0.gif

centos6.x中,如果通过yum安装mysql,mysql的版本默认应该是5.1,如果在使用了一段时间以后,想要通过yum升级到5.7版本,可以参考如下操作。

首先,当前版本的mysql为5.1.73

7128b893d4372469ae0882ad6f10cae0.gif

此处,我们将5.1升级为5.7

注意:在开始操作之前,请完全备份当前数据库,以防升级时出现问题,此处已备份数据库与mysql数据库对应的配置文件,数据库较小可使用mysqldump备份,数据库较大推荐使用xtrabackup备份。

备份完成后,我们开始准备mysql5.7社区版本的yum源。

访问mysql官网下载页面

我的操作系统为centos6,所以此处选择的操作系统为redhat

7128b893d4372469ae0882ad6f10cae0.gif

我们其实也可以直接下载对应rpm包升级mysql,但是此处使用yum源进行升级,点击下图中的"Download Now"连接,跳转到yum源安装包界面。

7128b893d4372469ae0882ad6f10cae0.gif

在yum源安装包界面,根据自己的版本,选择对应的yum源安装包,点击对应的下载按钮。

7128b893d4372469ae0882ad6f10cae0.gif

之后会提示登录对应的oracle账户,使用免费注册的oracle账户登录即可下载。

7128b893d4372469ae0882ad6f10cae0.gif

将下载后的rpm包上传到服务器。

7128b893d4372469ae0882ad6f10cae0.gif

安装此rpm包即可自动安装mysql5.7的yum源。

# yum install mysql57-community-release-el6-11.noarch.rpm

5.7版本的yum源配置完成后,即可进行升级操作,升级前请再次确定已经备份了数据库与对应的配置文件。

7128b893d4372469ae0882ad6f10cae0.gif

不用卸载原来的mysql,使用"yum update"命令进行升级即可。

7128b893d4372469ae0882ad6f10cae0.gif

升级过程中,可能会的看到一些提示,比如新生成的配置文件被更名为了/etc/my.cnf.rpmnew,这是因为之前的版本使用的配置文件为/etc/my.cnf,所以升级时,并没有覆盖原来的配置文件,而是将新的默认生成的配置文件重命名了。

7128b893d4372469ae0882ad6f10cae0.gif

升级完成后,发现无法无法启动mysql。

7128b893d4372469ae0882ad6f10cae0.gif

查看日志,发现如下错误。

7128b893d4372469ae0882ad6f10cae0.gif

错误提示:

[ERROR] Fatal error: mysql.user table is damaged. Please run mysql_upgrade.

提示我们mysql.user表被损坏了,请执行 mysql_upgrade命令,可是我们并没有做其他操作,只是升级了mysql的版本,为什么mysql.user表会被损坏呢?

其实我们并没有损坏mysql.user表,而是因为在mysql5.7的版本中,默认数据库mysql库中的user表的密码字段发生了变化。

在之前的版本中,我们可以通过修改mysql.user表中的password字段设置数据库用户的密码,但是在mysql5.7中,"password"字段被改为了"authentication_string"字段,由于我们只是升级了mysql程序的版本,原来的数据库文件并没有进行修改,所以,当我们启动mysql5.7时,mysql5.7会对原来的数据库表进行校验,而原来的mysql.user表中使用password字段保存用户的密码,所以,我们需要执行 mysql_upgrade命令,对原来的表结构进行升级,但是,mysql_upgrade命令又必须在数据库启动的情况下才能使用,而启动mysql时又会报这个错误,我们似乎陷入了死循环,我们该怎么办呢?没错,我们需要跳过密码验证的步骤,这样mysql就不会去校验用户的密码了,也就可以在不报上述错误的情况下启动mysql了,所以,我们需要使用跳过密码验证的方式启动mysql,操作如下

我们有如下两种方式,可以跳过密码登录。

1、可以在mysql配置文件中的[mysqld]配置区域加入如下配置

skip_grant-tables

2、也可以直接在启动时,加入上述参数,示例如下。

mysqld_safe --skip-grant-tables &

我们使用上述第二种方法,尝试启动mysql

7128b893d4372469ae0882ad6f10cae0.gif

启动完成后,端口已经给监听,我们可以尝试登录数据库了。

7128b893d4372469ae0882ad6f10cae0.gif

无需密码,直接登录mysql数据库,可以发现,版本已经升级到5.7.19,这时我们已经可以查看到之前的数据库了,查看之前的数据库,看到mysql.user表中的表结构并没有发生变化。

7128b893d4372469ae0882ad6f10cae0.gif

退出mysql客户端,我们即可执行"mysql_upgrade"命令了,示例如下

7128b893d4372469ae0882ad6f10cae0.gif

执行"mysql_upgrade"命令成功后,即可重启mysqld服务了,由于刚才示例中跳过密码验证的启动方式并没有修改配置文件,所以可以直接重启mysql服务。

7128b893d4372469ae0882ad6f10cae0.gif

使用升级之前数据库的用户密码,即可正常登录数据库了。

7128b893d4372469ae0882ad6f10cae0.gif

你可能感兴趣的:(centos,mysql,升级)