mysql 8.0.21 升级 mysql 8.0.45(经过生产环境验证)

一、mysql升级

mysql 8.0.21 ----> mysql 8.0.45

二、环境准备

1 、下载安装包

mysql45

https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.45-linux-glibc2.17-x86_64.tar

MySQLshell

https://downloads.mysql.com/archives/get/p/43/file/mysql-shell-8.0.45-linux-glibc2.17-x86-64bit.tar.gz

2、解压方案

复制代码
初始化8.0的包
tar xf mysql-8.0.45-linux-glibc2.17-x86_64.tar
tar xf mysql-8.0.45-linux-glibc2.17-x86_64.tar.xz
mv  mysql-8.0.45-linux-glibc2.17-x86_64  /usr/local/

下载mysqlshell
tar xf mysql-shell-8.0.45-linux-glibc2.17-x86-64bit.tar.gz
mv mysql-shell-8.0.45-linux-glibc2.17-x86-64bit /usr/local/mysql80sh

处理
vim  /etc/profile
export PATH=/usr/local/mysql80sh/bin:$PATH

source /etc/profile

3、升级前的mysqlsh检查

复制代码
mysqlsh
util.checkForServerUpgrade('root@localhost:3306',{"targetVersion":"8.0.45"})

4、备份MySQL8.0.21,并做准备工作

复制代码
1)	检查磁盘空间是否足够
df -h

2)	创建备份文件
mkdir /tmp/mysqlbak/

3)	备份参数
mysql -uxxx -pxxx -Ne 'select * from performance_schema.global_variables;' >/tmp/mysqlbak/mysql8.0.21_sql_conf

4)	全备物理参数
cp /etc/my.cnf  /tmp/mysqlbak/my8.0.21_sql_conf

5)	检查并备份错误日志
cp   /data/mysql/mysqld.log   /tmp/mysqlbak/my_bak_error.log

三、开始升级

1、检查并备份老版本数据

复制代码
1) 设置只读
set global read_only=on;
set global super_read_only=on;

2)停止业务并备份位点信息
show  master status\G
vim /tmp/mysqlbak/master_gtid.txt

3) 数据写入磁盘
set global innodb_fast_shutdown=0;

4)	关闭数据库并检查
systemctl  stop mysql
ps -ef|grep mysqld_safe |grep -v grep
netstat -lntup  |grep  mysqld

5)	备份数据文件(使用客户的快照备份方案)
tar -czf  /tmp/mysqlbak/mysql8.0.21_data.tar.gz   /data/mysql/data

2、用MySQL8.0.45程序启动数据库

复制代码
1)	修改软连接
ln -s /usr/local/mysql-8.0.45-linux-glibc2.17-x86_64 mysql80
source /etc/profile

2)使用systemctl启动
vim /etc/systemd/system/mysqld.service
[Unit]
Description=MySQL Server
After=network.target

[Service]
Type=simple
User=mysql
Group=mysql
ExecStart=/usr/local/mysql80/bin/mysqld_safe --defaults-file=/etc/my.cnf
Restart=on-failure
RestartSec=10
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target

2)生效
systemctl daemon-reload

4)	修改参数
vim /etc/my.cnf 
basedir=/usr/local/mysql80

5)MySQL8.0.45程序启动数据库
systemctl status  mysqld
systemctl start  mysqld

6)	检查是否启动
ps aux |grep mysqld_safe |grep -v grep
netstat -lntup  |grep  mysqld
mysql -uroot -p -e "show processlist;"

四、升级回退方案

注:此恢复方案仅限目标库还没有业务写入的时候用。

复制代码
1)	关闭数据库
systemctl stop  mysqld
ps aux |grep mysqld_safe |grep -v grep
netstat -lntup  |grep  mysqld

2)	备份错误日志
cp  /data/错误日志   /tmp/mysqlbak/

3)	恢复历史备份文件
rm -rf /data/
tar xf  /tmp/mysqlbak/mysql8.0.21_data.tar.gz  -C /data/
chown -R  mysql:mysql   /data/

2)	修改软连接
ln -s mysql-8.0.21-linux-glibc2.12-x86_64 mysql80
source /etc/profile

3)修改参数
vim /etc/my.cnf 
basedir=/usr/local/mysql

4)	修改systemctl
vim /etc/systemd/system/mysqld.service
ExecStart=/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf

5)	生效
systemctl daemon-reload

6)	启动数据库
systemctl start mysqld
7)	检查是否启动
ps -ef |grep mysqld_safe |grep -v grep
netstat -lntup  |grep  mysqld
mysql -uroot -p -e "show processlist
相关推荐
东风破_1 小时前
从 0 设计一个博客数据库:用户、头像与文章表应该怎么建?
后端·mysql
大模型码小白3 小时前
Spring AI Tool 实现自然语言操作 MySQL 数据库详解
服务器·开发语言·数据库·人工智能·python·mysql·spring
云计算DevOps-韩老师4 小时前
【MySQL运维DBA】【SQL基础系列002篇】
运维·mysql·dba
放风铃的兔子5 小时前
15 年 DBA 经验:MySQL 迁移到 KES,哪些东西真的不用改?
mysql
虎王物联5 小时前
PHP实现MQTT消息处理:物联网设备数据接收与指令下发
android·物联网·php
我命由我123455 小时前
Android 开发 - 获取当前设备屏幕的旋转角度
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
动力 continue7 小时前
MySQL 基础篇 · SELECT 查询大
数据库·sql·mysql·select
程序员-Benothing7 小时前
MySQL 索引下推是什么?——深入理解 ICP 原理与实践
android·数据库·mysql