0、下载MySQL5.7.36二进制安装包并上传到服务器
1、正常停止数据库
(1)XA事务检查
mysql> XA RECOVER;
若有值,则需要 COMMIT 或 ROLLBACK xid
mysql> XA COMMIT xid;
或
mysql> XA ROLLBACK xid;
配置MySQL执行慢关机,InnoDB在关闭之前执行完全清除和更改缓冲区合并
mysql -S /data/mysql/mysql.sock -uroot -p --execute="SET GLOBAL innodb_fast_shutdown=0";
配了服务的可以使用:systemctl stop mysql
没有配服务的使用mysqladmin停止:
/opt/mysql-5.6.44/bin/mysqladmin --user=root -p --socket=/opt/mysql-5.6.44/tmp/mysql.sock shutdown
2、备份数据文件
cd cd /opt/mysql-5.6.44/
cp -r data /home/bak/data_bak
3、解压MySQL5.7.36安装包
cd /opt/
tar -zxvf mysql-5.7.36-linux-glibc2.12-x86_64.tar.gz
4、更名
mv mysql-5.7.36-linux-glibc2.12-x86_64 mysql-5.7.36
5、将MySQL5.6的数据目录复制到5.7目录下
cp -r /opt/mysql-5.6.44/data /opt/mysql-5.7.36/
cp -r /opt/mysql-5.6.44/tmp /opt/mysql-5.7.36/
6、将my.cnf配置文件复制一份到5.7目录下
cp /opt/mysql-5.6.44/my.cnf /opt/mysql-5.7.36/
7、修改5.7目录下的my.cnf配置信息
去掉一些废弃的参数、更改数据目录
8、更改目录权限
chown -R mysql:mysql /opt/mysql-5.7.36
9、启动数据库
/opt/mysql-5.7.36/bin/mysqld_safe --defaults-file=/opt/mysql-5.7.36/my.cnf --user=mysql&
10、升级系统表
/opt/mysql-5.7.36/bin/mysql_upgrade -s -p -S /opt/mysql-5.7.36/tmp/mysql.sock
/opt/mysql-5.7.36/bin/mysql_upgrade -p -S /opt/mysql-5.7.36/tmp/mysql.sock
备注:不加-s会升级用户创建的数据
11、版本验证
/opt/mysql-5.7.36/bin/mysql -uemp -p -S /opt/mysql-5.7.36/tmp/mysql.sock
12、修改开机启动项以及系统配置(环境变量)
cp /opt/mysql-5.7.36/support-files/mysql.server /etc/init.d/mysql
chkconfig --add mysql
chkconfig --list
13、其它测试(略)
14、其它说明:
(1)不指定--deafaults-file,my.cnf默认一般会读/etc/下的文件
(2)--socket(-S)默认下socket文件会自动创建在/tmp/目录下,如果在my.cnf没有指定这项,无需在登录mysql的时候指定socket,如果有且不一致,需要指定,远程登录不影响
(3)了解已废弃功能与参数
在测试环境查看参数列表
升级前 mysql -uroot -p -e"show variables;" > /opt/mysql5644.txt
升级后 mysql -uroot -p -e"show variables;" > /opt/mysql5736.txt
升级之后,程序连接出现报错:
ERROR 1682 (HY000): Native table 'performance_schema'.'session_variables' has the wrong structure
--从mysql5.7.6开始information_schema.global_status已经开始被舍弃,为了兼容性,此时需要打开 show_compatibility_56
set @@global.show_compatibility_56=ON;
或者在my.cnf中加上该参数:show_compatibility_56=on
或者有没有可能是因为升级程序执行的时候加上了-s,导致没有升级相关数据??
重启即可。
/opt/mysql-5.7.36/bin/mysql_upgrade -p -S /opt/mysql-5.7.36/tmp/mysql.sock --force