一、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
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