因为收到安全管理部门的消息,凡是Oracle MySQL Server <=8.0.35 Oracle MySQL Server <=8.2.0 有多个高危漏洞,而现在生产的系统数据库是8.0.29版本,因此想着直接升级到最新版本8.0.36修复漏洞。从网上和官网看了一些教程,因为不涉及大版本更新,所以直接采用替换文件夹的升级方式。这种升级方式有个前提是我的数据文件、日志文件 都不在mysql里边。如果数据文件和日志文件都在mysql里边可以采用覆盖老版本文件的方式进行升级。
升级前的准备
1、全量备份数据文件,万一直接替换升级失败,采用备份文件的方式进行升级。
使用mysqldump 备份整个数据库
2、下载mysql压缩包。根据自己的系统选择。直接在官网下载的 地址 MySQL :: Download MySQL Community Server
开始升级
1、上传文件到服务器,解压文件
tar -xvf mysql-8.0.36-linux-glibc2.28-x86_64.tar.xz
2、设置mysql的关闭模式(我就因为没有执行这个语句导致 升级时出现错误)
SET GLOBAL innodb_fast_shutdown = 1; -- fast shutdown
SET GLOBAL innodb_fast_shutdown = 0; -- slow shutdown
设置成1 或者 0都可以 ,我的就是因为没有设置,默认是2,导致关闭的时候存在中间日志文件,启动报错。
3、关闭数据服务
这个有多种方法关闭,我的因为是mysql8.0 我直接用root用户登录mysql 服务器,使用 shutdown; 命令关闭。 大家也可以用 service mysqld stop 等命令关闭。
4、复制新的mysql文件夹,修改权限
sudo cp -r mysql-8.0.36-linux-glibc2.28-x86_64 /usr/local/
sudo mv /usr/local/mysql-8.0.36-linux-glibc2.28-x86_64 /usr/local/mysql8_0.36
加了sudo是因为我的主机没有root账号,使用sudo提升权限,改下文件名,注意标注上版本。还有一个新的数据库组和用户权限要和以前的一致,大家根据查询进行修改 chown -R xxx:xxx mysql8_0.36
5、修改配置文件
找到老版本数据库my.cnf文件,并修改其中的basedir地址为新的地址
basedir=/usr/local/mysql8_0.36
如果大家的数据文件和其他信息都在mysql目录里,在第4步执行复制的时候先把老版本的mysql文件夹全量备份一下,然后直接复制本新版本覆盖老版本文件夹
6、启动数据库
/usr/local/mysql8_0.36/bin/mysqld --defaults-file=xxx/xxx/my.cnf --socket=xxx/xxx/mysql.sock --user=root &
xxx替换成目录文件就可以 正常情况下可以成功启动
升级时遇到的问题:
1、因为mysql关闭时采用的冷关闭,导致启动时报错提示
[ERROR] [MY-012526] [InnoDB] Upgrade is not supported after a crash or shutdown with innodb_fast_shutdown = 2. This redo log was created with MySQL 8.0.29, and it appears logically non empty. Please follow the instructions at http://dev.mysql.com/doc/refman/8.0/en/upgrading.html
[ERROR] [MY-012930] [InnoDB] Plugin initialization aborted with error Generic error.
[ERROR] [MY-010334] [Server] Failed to initialize DD Storage Engine
[ERROR] [MY-010020] [Server] Data Dictionary initialization failed.
简单来说就是关闭时冷关闭 数据文件里有部分中间log数据文件是老版本的,新版本启动时读取直接报错,处理方法就是找到datadir 数据库数文件里的ib_logfile0,ib_logfile1 等文件rm ib_logfile*
然后再启动数据库就可以