一、环境说明
1. 已安装 MySQL 5.6.27
2. datadir = /usr/local/mysql/data
#如果datadir指定的单独的目录,即数据和程序不在同一个目录下,例如datadir=/data,程序安装在/usr/local/mysql,则以下升级步骤中的第5步就不用做。
3. root密码已设置:123
4. 操作目的:将MySQL 5.6.27升级到MySQL 5.7.39说明:一般说来,MySQL数据库的二进制数据文件,也就是my.cnf中的配置项datadir所在的位置,和MySQL应用程序安装的位置是分开的,
仅通过配置项告诉MySQL数据库的数据存在datadir这个目录下。当程序和数据分离以后,方便我们对数据库应用程序做版本的升级或者回退。
二、执行升级
注意:先停掉mysql服务
1. 将MySQL 5.7.39的tar包解压到/usr/local目录
[root@Study opt]# tar -zxf mysql-5.7.39-linux-glibc2.12-x86_64.tar.gz -C /usr/local
2. 安全的停掉当前运行的 MySQL 5.6.27
[root@Study ~]# service mysql.server stop
3. 取消原有MySQL 5.6.27的软链接
[root@Study ~]# cd /usr/local
[root@Study local]# unlink mysql
4. 重新建立新版本的软链接(注意修改所有者和所属组为mysql)
[root@Study local]# ln -s mysql-5.7.39-linux-glibc2.12-x86_64 mysql
5. 从旧版mysql目录中拷贝data目录到新版mysql的软链接目录中(注意data目录的所有者和所属组均为mysql)
[root@Study local]# cp -a mysql-5.6.27-linux-glibc2.5-x86_64/data mysql-----------------------------------------------------------------
【版本回退】
1. 备份MySQL 5.6.27版本的系统表到opt目录
[root@Study local]# cp -a /usr/local/mysql/data/mysql /opt/
2. 软链接重做,拷贝data目录到旧版本,拷贝备份的系统表到旧版本
3. 启动即可
-----------------------------------------------------------------
# 此时,MySQL应用程序版本已升级完成,可直接启动mysql服务。
# 且可以使用 mysql -uroot -p(原密码)进入数据库。
# 执行show databases;看到存在test表,但没有sys表(数据的二进制文件兼容)
# 此时去看error.log会发现有很多的WARNNING,所以这个时候我们需要使用 mysql_upgrade 去升级。
6. 使用mysql_upgrade更新系统表(mysql8.0.16及以后的版本不需要执行此步)
[root@Study local]# mysql_upgrade -s -p
# 参数-s一定要加,表示只更新系统表(-s 即upgrade-system-tables,系统表指的是../data/mysql),如果不加-s则会把所有库的表以5.7.39的方式重建,生产库千万别这样!
# 当一些老的版本的存储格式需要新的特性来提升性能时,可不加-s参数。
# 参数-p是输入密码,若旧版本未设置密码,则-p参数不用加。
7. 此时连接mysql,执行show databases;可以看到存在test表和sys表,表示已全部升级完毕。