测试环境服务器资源紧张:原地升级MySQL数据库(MySQL5.7的datadir目录下的数据不动):
当前数据库版本:mysql5.7-25,计划升级到mysql8.0.26
数据库软件均是从官网下载编译好的二进制文件。
测试环境升级前,根据测试环境配置,先在笔记本虚拟机上模拟测试一下:
一、需要注意事项:
1、获取非innodb的表及更改语句:
select concat(table_schema,'.',table_name) as table_name,engine,concat('alter table ',table_schema,'.',table_name,' engine=innodb;') from information_schema.tables where engine != 'innodb'and table_schema not in('mysql','sys','information_schema','performance_schema');
2、8.0版本sql_mode不支持 NO_AUTO_CREATE_USER,要避免配置的sql_mode中带有 NO_AUTO_CREATE_USER
3、mysql_native_password插件:MySQL8.0.4开始,默认身份认证开始改变。因为之前,MySQL的密码认证插件是“mysql_native_password”,而现在使用的是“caching_sha2_password”,在[mysqld]项中添加配置:default_authentication_plugin = mysql_native_password
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
4、注意字符集和校对规则:
通过在my.cnf文件中设置character-set-server和collation_server参数来实现。
default-character-set = utf8
character_set_server = utf8
collation_server = utf8_bin
5、修改密码验证插件:
可在my.cnf文件中设置default-authentication-plugin='mysql_native_password'
6、注意DB默认字符集:
默认字符集由latin1变为utf8mb4
二、解压mysqlshell工具:
下载地址: https://dev.mysql.com/downloads/shell/
tar -zxvf mysql-shell-8.3.0-linux-glibc2.17-x86-64bit.tar.gz
mv mysql-shell-8.3.0-linux-glibc2.17-x86-64bit mysqlsh
检查升级是否存在错误:
cd /data/mysqlsh/bin
./mysqlsh -uroot -p -S /tmp/mysql.sock -e "util.checkForServerUpgrade()" > util.checkForServerUpgrade.log
根据检查日志中的告警或报错,进行处置。
三、升级数据库软件:
1、断开业务连接,关闭数据库;
set global innodb_fast_shutdown=0;
shutdown;
2、把解压后的mysql-8.0.26-linux-glibc2.17-x86_64-minimal目录拷贝到/usr/local目录下,
删除mysql--mysql5.7的软连接,新建mysql软连接指向mysql8026:
cd /usr/local
rm -rf mysql
ln -s mysql-8.0.26-linux-glibc2.17-x86_64-minimal mysql
四、尝试执行数据库升级操作:
mysqld_safe --defaults-file=/data/mysql/my.cnf --user=mysql --upgrade=FORCE
监控mysql.err日志的报错情况,根据实际解决参数问题。
可能会经过多次参数修改后,才能升级成功。
MySQL8.0数据库默认是开启SSL认证的:
从代码层面,在JDBC 连接中,使用 &useSSL=false 参数,表示不使用SSL 认证。