随着互联网技术的不断发展,很多新的应用都会随着企业的需求日新月异,同样数据库服务也会不断的升级更新;
所以早期很多企业的网站架构中,所部署安装的历史版本的数据库服务程序就需要升级迭代,来满足新的场景应用需求;
但是对于数据库服务的升级不同于其他程序升级,因为数据库服务中保存着企业重要的数据信息,一旦升级失败就会造成巨大损失;
因此,数据库程序的版本升级一定要采用比较规范正确的方式升级,即保证程序升级后的应用,同时保证数据的稳定性;
一、常见的数据库服务程序升级方式¶
| 方式 | 升级说明 | 备注说明 |
|---|---|---|
单台服务器升级(Inplace-就地) |
数据库服务小版本升级 | 比如:5.7.20 ->5.7.22 |
| (风险较大) | 数据库服务大版本升级 | 比如:5.7.20 ->5.8.20 |
| 迁移服务器升级(Mergeing-迁移) | 数据库服务小版本升级 | 安装新版本数据库服务(备份迁移/主从迁移) |
| (需要迁移数据) | 数据库服务大版本升级 | 安装新版本数据库服务(备份迁移/主从迁移) |
说明:数据库服务升级时,不管哪个方式升级,都应该先做好数据备份,方便升级失败的回退。
二、数据库服务升级注意事项¶
- 数据库服务版本升级时,只支持在GA(General Availability)版本之间进行升级
- 数据库服务版本升级时,支持从数据库5.6到5.7再到8.0,跨版本升级,但是需要先将5.6升级到最新小版本,在进行跨版本升级
- 数据库服务版本升级时,需要提前考虑好版本回退的方案,最好升级前做好数据备份(特别是向8.0版本升级)
- 数据库服务版本升级时,制定的升级方案和升级步骤,需要尽可能降低数据库服务停机的时间
数据库服务官方参考资料:https://dev.mysql.com/doc/refman/8.0/en/upgrade-paths.html
三、数据库服务升级过程规划(Inplace)¶
- 数据库服务数据备份保存(可以采用热备和冷备两种方案,冷备是需要停止业务后备份,热备是无需停止业务备份)
- 数据库服务最新程序安装(最新版本数据库服务安装过程时,无需停止原有数据库旧版服务)
- 数据库服务原有程序关闭(网站显示维护页面)
- 数据库服务最新程序启动(加载原有程序数据实现挂库升级,并采用跳过授权表和跳过网络方式启动)
- 数据库服务升级数据结构(数据库服务升级程序后,还需要升级数据系统结构信息,因此升级时间和数据量无关)
- 数据库服务可以正常重启(数据库服务升级完毕后,确认数据库服务是可以正常完成重启操作)
- 数据库服务功能测试验证(反复核实验证与数据库服务相关的各项功能是否正常)
- 数据库服务升级工作完毕(取消网站维护页面,恢复正常网站线上运营业务)
四、数据库服务升级过程实战¶
4.1 企业数据库实战练习一:演示5.6.48 ->5.7.30 本地升级¶
安装5.6.48版本的Mysql
#上传数据库程序软件包
[root@master ~]# cd /usr/local
[root@master local]# rz -y
#解压数据库服务软件程序压缩包
[root@master local]# tar xf mysql-5.6.48-linux-glibc2.12-x86_64.tar.gz
#创建数据库服务程序目录的软链接
[root@master local]# ln -s mysql-5.6.48-linux-glibc2.12-x86_64 mysql56
#创建数据库服务管理用户信息
[root@master local]# useradd mysql
#创建数据库服务相关目录并进行目录信息进行授权
[root@master local]# mkdir -p /data/3356/data /data/3356/logs
[root@master local]# chown -R mysql. /data/
#数据库服务初始化
[root@master local]# /usr/local/mysql56/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql56/ --datadir=/data/3356/data
#创建数据库服务运行需要加载的my.cnf配置模板文件
[root@master local]# cat > /data/3356/data/my.cnf <<eof
[mysqld]
server_id=3356
port=3356
user=mysql
basedir=/usr/local/mysql56
datadir=/data/3356/data
socket=/tmp/mysql3356.sock
innodb_fast_shutdown=0
eof
#启动运行MySQL数据库服务脚本
[root@master local]# cat >/usr/lib/systemd/system/mysqld3356.service<<EOF
[Unit]
Description=MySQL Server
Documentation=mysqld.service
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql56/bin/mysqld --defaults-file=/data/3356/data/my.cnf
ExecStop=/usr/local/mysql56/bin/mysqladmin --defaults-file=/data/3356/data/my.cnf shutdown
ExecReload=/usr/local/mysql56/bin/mysqladmin --defaults-file=/data/3356/data/my.cnf reload
LimitNOFILE = 5000
EOF
#启动数据库服务
[root@master local]# systemctl daemon-reload
[root@master local]# systemctl start mysqld3356
#设置密码
[root@master local]# mysql -uroot -S /tmp/mysql3356.sock
mysql> set password for 'root'@'localhost'=PASSWORD('123456');
mysql> flush privileges;
#登录验证
[root@master local]# mysql -uroot -p123456 -S /tmp/mysql3356.sock
mysql>
准备测试数据
[root@master local]# mysql -uroot -p123456 -S /tmp/mysql3356.sock
mysql> create database aaa;
mysql> use aaa;
mysql> create table stu (name varchar(10),age int,gender char(1));
mysql> insert into stu values('a',20,'m');
mysql> insert into stu values('b',25,'m');
mysql> insert into stu values('c',30,'f');
mysql> select * from stu;
+------+------+--------+
| name | age | gender |
+------+------+--------+
| a | 20 | m |
| b | 25 | m |
| c | 30 | f |
+------+------+--------+
3 rows in set (0.00 sec)
数据库版本升级步骤一:数据库服务最新程序安装
1、开始部署mysql5.7,但不要启动
#上传数据库程序软件包
[root@master ~]# cd /usr/local
[root@master local]# rz -y
#解压数据库服务软件程序压缩包
[root@master local]# tar xf mysql-5.7.30-linux-glibc2.12-x86_64.tar.gz
#创建数据库服务程序目录的软链接
[root@master local]# ln -s mysql-5.7.30-linux-glibc2.12-x86_64 mysql57
#创建数据库服务相关目录并进行目录信息进行授权
[root@master local]# mkdir -p /data/3357/data /data/3357/logs
[root@master local]# chown -R mysql. /data/
#数据库服务初始化
[root@master local]# /usr/local/mysql57/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql57/ --datadir=/data/3357/data
#创建数据库服务运行需要加载的my.cnf配置模板文件
[root@master local]# cat > /data/3357/data/my.cnf <<eof
[mysqld]
port=3357
server_id=3357
user=mysql
basedir=/usr/local/mysql57
datadir=/data/3357/data
socket=/tmp/mysql3357.sock
innodb_fast_shutdown=0
eof
#启动运行MySQL数据库服务脚本
[root@master local]# cat >/usr/lib/systemd/system/mysqld3357.service<<EOF
[Unit]
Description=MySQL Server
Documentation=mysqld.service
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql57/bin/mysqld --defaults-file=/data/3357/data/my.cnf
ExecStop=/usr/local/mysql57/bin/mysqladmin --defaults-file=/data/3357/data/my.cnf shutdown
ExecReload=/usr/local/mysql57/bin/mysqladmin --defaults-file=/data/3357/data/my.cnf reload
LimitNOFILE = 5000
EOF
#启动数据库服务
[root@master local]# systemctl daemon-reload
[root@master local]# systemctl start mysqld3357
#设置密码
[root@master local]# mysql -uroot -S /tmp/mysql3357.sock
mysql> update mysql.user set authentication_string=PASSWORD('123456') where user='root' and host='localhost';
mysql> flush privileges;
#登录验证
[root@master local]# mysql -uroot -p123456 -S /tmp/mysql3357.sock
mysql>
#验证成功后关闭新版数据库
[root@master local]# systemctl stop mysqld3357
2、查看服务程序目录信息确认是否安装完毕
[root@master ~]# cd /usr/local/
[root@master local]# ll -d mysql*

3、通过服务运行端口信息,确认旧版本与新版本服务运行情况,确认只有旧版本服务在运行中,新版本服务并未运行
[root@master local]# ss -lntup | grep mysqld
tcp LISTEN 0 80 [::]:3356 [::]:* users:(("mysqld",pid=6501,fd=10))
数据库版本升级步骤二:数据库服务原有程序关闭
1、关闭原有就版本数据库服务(企业实战)
添加innodb_fast_shutdown=0此配置参数信息在配置文件中,实现优雅关闭数据库服务
[root@master local]# vim /data/3356/data/my.cnf
[mysql]
socket=/tmp/mysql57.sock
[mysqld]
server_id=3356
port=3356
user=mysql
basedir=/usr/local/mysql56
datadir=/data/3356/data
socket=/tmp/mysql3356.sock
innodb_fast_shutdown=0
配置文件加入以上参数后,此时关闭数据库服务,会采用优雅关闭服务,而不是采用快速关闭数据库服务方式
[root@master local]# systemctl stop mysqld3356
上面配置文件的方式需要重启后才能生效。当然,也可以通过以下配置立即生效(数据库里面操作)
mysql> set global innodb_fast_shutdown=0;
mysql> select @@innodb_fast_shutdown;
+------------------------+
| @@innodb_fast_shutdown |
+------------------------+
| 0 |
+------------------------+
1 row in set (0.00 sec)
2、关闭原有旧版本数据库服务(模拟操作)
[root@master local]# systemctl stop mysqld3356
说明:生产中不建议使用
3、备份原有数据
#创建备份目录
[root@master local]# mkdir /backup/
#物理备份原有数据内容
[root@master local]# cp -a /data/3356/data/ /backup/
#备份后查看备份数据
[root@master local]# ll /backup/
total 0
drwxr-xr-x 6 mysql mysql 151 Feb 11 15:35 data
数据库版本升级步骤三:数据库服务最新程序启动
1、修改旧版本数据库服务配置文件,使用新版本程序加载原有数据库中数据目录
[root@master local]# vim /data/3356/data/my.cnf
[mysql]
socket=/tmp/mysql57.sock
[mysqld]
server_id=3356
port=3356
user=mysql
basedir=/usr/local/mysql57
datadir=/data/3356/data
socket=/tmp/mysql3356.sock
innodb_fast_shutdown=0
2、安全模式启动新版本数据库程序服务
[root@master local]# /usr/local/mysql57/bin/mysqld_safe --defaults-file=/data/3356/data/my.cnf --skip-grant-tables --skip-networking &
3、查看数据库服务启动进程信息,此时数据库服务启动成功后,只会显示进程信息,不会显示网络端口信息
[root@master local]# ps -ef|grep mysqld
root 7108 1836 0 15:40 pts/0 00:00:00 /bin/sh /usr/local/mysql57/bin/mysqld_safe --defaults-file=/data/3356/data/my.cnf --skip-grant-tables --skip-networking
mysql 7289 7108 2 15:40 pts/0 00:00:00 /usr/local/mysql57/bin/mysqld --defaults-file=/data/3356/data/my.cnf --basedir=/usr/local/mysql57 --datadir=/data/3356/data --plugin-dir=/usr/local/mysql57/lib/plugin --user=mysql --skip-grant-tables --skip-networking --log-error=master.err --pid-file=master.pid --socket=/tmp/mysql3356.sock --port=3356
root 7318 1836 0 15:40 pts/0 00:00:00 grep --color=auto mysqld

数据库版本升级步骤四:数据库服务升级数据结构
1、实现对原有数据库中数据信息的挂库升级操作
#挂库升级:将数据目录和授权表进行结构调整
[root@master local]# /usr/local/mysql57/bin/mysql_upgrade -S /tmp/mysql3356.sock --force

说明:在数据库版本从5.7升级到8.0时,可以省略mysql_upgrade升级改变数据结构信息操作,因为8.0版本会自动完成此步骤
2、验证数据库中数据结构是否升级成功
[root@master local]# /usr/local/mysql57/bin/mysql -uroot -p123456 -S /tmp/mysql3356.sock
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| aaa |
| mysql |
| performance_schema |
| sys |
| test |
+--------------------+
6 rows in set (0.00 sec)| sys |
mysql> select version();
+-----------+
| version() |
+-----------+
| 5.7.30 |
+-----------+
1 row in set (0.00 sec)
mysql> select * from aaa.stu;
+------+------+--------+
| name | age | gender |
+------+------+--------+
| a | 20 | m |
| b | 25 | m |
| c | 30 | f |
+------+------+--------+
3 rows in set (0.00 sec)
说明:这里的账号和密码是之前mysql5.6版本的账号和密码,如果没有设置,直接输入mysql就可以直接进入
3、重新定义服务文件
[root@master local]# vim /usr/lib/systemd/system/mysqld3356.service
[Unit]
Description=MySQL Server
Documentation=mysqld.service
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql57/bin/mysqld --defaults-file=/data/3356/data/my.cnf
ExecStop=/usr/local/mysql57/bin/mysqladmin --defaults-file=/data/3356/data/my.cnf shutdown
ExecReload=/usr/local/mysql57/bin/mysqladmin --defaults-file=/data/3356/data/my.cnf reload
LimitNOFILE = 5000
#重启mysql服务
[root@master local]# systemctl daemon-reload
[root@master local]# systemctl restart mysqld3356
4.2 企业数据库实战练习二:演示5.7.30 ->8.0.26本地升级¶
安装5.7.30版本的Mysql
#上传数据库程序软件包
[root@master ~]# cd /usr/local
[root@master local]# rz -y
#解压数据库服务软件程序压缩包
[root@master local]# tar xf mysql-5.7.30-linux-glibc2.12-x86_64.tar.gz
#创建数据库服务程序目录的软链接
[root@master local]# ln -s mysql-5.7.30-linux-glibc2.12-x86_64 mysql57
#创建数据库服务管理用户信息
[root@master local]# useradd mysql
#创建数据库服务相关目录并进行目录信息进行授权
[root@master local]# mkdir -p /data/3357/data /data/3357/logs
[root@master local]# chown -R mysql. /data/
#数据库服务初始化
[root@master local]# /usr/local/mysql57/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql57/ --datadir=/data/3357/data
#创建数据库服务运行需要加载的my.cnf配置模板文件
[root@master local]# cat > /data/3357/data/my.cnf <<eof
[mysqld]
port=3357
server_id=3357
user=mysql
basedir=/usr/local/mysql57
datadir=/data/3357/data
socket=/tmp/mysql3357.sock
innodb_fast_shutdown=0
eof
#启动运行MySQL数据库服务脚本
[root@master local]# cat >/usr/lib/systemd/system/mysqld3357.service<<EOF
[Unit]
Description=MySQL Server
Documentation=mysqld.service
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql57/bin/mysqld --defaults-file=/data/3357/data/my.cnf
ExecStop=/usr/local/mysql57/bin/mysqladmin --defaults-file=/data/3357/data/my.cnf shutdown
ExecReload=/usr/local/mysql57/bin/mysqladmin --defaults-file=/data/3357/data/my.cnf reload
LimitNOFILE = 5000
EOF
#启动数据库服务
[root@master local]# systemctl daemon-reload
[root@master local]# systemctl start mysqld3357
#设置密码
[root@master local]# mysql -uroot -S /tmp/mysql3357.sock
mysql> update mysql.user set authentication_string=PASSWORD('123456') where user='root' and host='localhost';
mysql> flush privileges;
#登录验证
[root@master local]# mysql -uroot -p123456 -S /tmp/mysql3357.sock
mysql>
#验证成功后关闭新版数据库
[root@master local]# systemctl start mysqld3357
准备测试数据
[root@master local]# mysql -uroot -p123456
mysql> create database aaa;
mysql> use aaa;
mysql> create table stu (name varchar(10),age int,gender char(1));
mysql> insert into stu values('a',20,'m');
mysql> insert into stu values('b',25,'m');
mysql> insert into stu values('c',30,'f');
mysql> select * from stu;
+------+------+--------+
| name | age | gender |
+------+------+--------+
| a | 20 | m |
| b | 25 | m |
| c | 30 | f |
+------+------+--------+
3 rows in set (0.00 sec)
数据库版本升级步骤一:数据库服务最新程序安装
1、开始部署mysql8.0,但不要启动
#上传数据库程序软件包
[root@master ~]# cd /usr/local
[root@master local]# rz -y
#解压数据库服务软件程序压缩包
[root@master local]# tar xf mysql-8.0.26-linux-glibc2.12-x86_64.tar.xz
#创建数据库服务程序目录的软链接
[root@master local]# ln -s mysql-8.0.26-linux-glibc2.12-x86_64 mysql
#创建数据库服务相关目录并进行目录信息进行授权
[root@master local]# mkdir -p /data/3306/data /data/3306/logs
[root@master local]# chown -R mysql. /data/
#数据库服务初始化
[root@master local]# mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/3306/data
#创建数据库服务运行需要加载的my.cnf配置模板文件
[root@master local]# cat > /data/3306/data/my.cnf <<eof
[mysql]
socket=/tmp/mysql.sock
[mysqld]
user=mysql
basedir=/usr/local/mysql
datadir=/data/3306/data
socket=/tmp/mysql.sock
innodb_fast_shutdown=0
eof
#启动运行MySQL数据库服务脚本
[root@master local]# cat >/usr/lib/systemd/system/mysqld3306.service<<EOF
[Unit]
Description=MySQL Server
Documentation=mysqld.service
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/data/3306/data/my.cnf
ExecStop=/usr/local/mysql/bin/mysqladmin --defaults-file=/data/3306/data/my.cnf shutdown
ExecReload=/usr/local/mysql/bin/mysqladmin --defaults-file=/data/3306/data/my.cnf reload
LimitNOFILE = 5000
EOF
#启动数据库服务
[root@master local]# systemctl daemon-reload
[root@master local]# systemctl start mysqld3306
#设置密码
[root@master local]# mysql -uroot -S /tmp/mysql.sock
mysql> alter user root@'localhost' identified by '123456';
mysql> flush privileges;
#登录验证
[root@master local]# mysql -uroot -p123456 -S /tmp/mysql.sock
mysql>
2、查看服务程序目录信息确认是否安装完毕
[root@master ~]# cd /usr/local/
[root@master local]# ll -d mysql*

3、通过服务运行端口信息,确认旧版本与新版本服务运行情况,确认只有旧版本服务在运行中,新版本服务并未运行
[root@master local]# ss -lntp|grep mysql
LISTEN 0 80 [::]:3357 [::]:* users:(("mysqld",pid=7785,fd=20))
数据库版本升级步骤二:数据库服务原有程序关闭
1、关闭原有就版本数据库服务(企业实战)
添加innodb_fast_shutdown=0此配置参数信息在配置文件中,实现优雅关闭数据库服务
[root@master local]# vim /data/3357/data/my.cnf
[mysqld]
port=3357
server_id=3357
user=mysql
basedir=/usr/local/mysql57
datadir=/data/3357/data
socket=/tmp/mysql3357.sock
innodb_fast_shutdown=0
配置文件加入以上参数后,此时关闭数据库服务,会采用优雅关闭服务,而不是采用快速关闭数据库服务方式
[root@master local]# systemctl stop mysqld3357
上面配置文件的方式需要重启后才能生效。当然,也可以通过以下配置立即生效(数据库里面操作)
mysql> set global innodb_fast_shutdown=0;
mysql> select @@innodb_fast_shutdown;
+------------------------+
| @@innodb_fast_shutdown |
+------------------------+
| 0 |
+------------------------+
1 row in set (0.00 sec)
2、关闭原有旧版本数据库服务(模拟操作)
[root@master local]# systemctl stop mysqld3357
说明:生产中不建议使用
3、备份原有数据内容
#物理备份原有数据内容
[root@master local]# cp -a /data/3357/data/ /backup/
数据库版本升级步骤三:数据库服务最新程序启动
1、修改旧版本数据库服务配置文件,使用新版本程序加载原有数据库中数据目录
#修改basedir=/usr/local/mysql57为basedir=/usr/local/mysql
[root@master local]# vim /data/3357/data/my.cnf
[mysqld]
port=3357
server_id=3357
user=mysql
basedir=/usr/local/mysql
datadir=/data/3357/data
socket=/tmp/mysql3357.sock
innodb_fast_shutdown=0
2、利用命令脚本文件测试启动新版本数据库程序服务
[root@master local]# /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/3357/data/my.cnf --skip-grant-tables --skip-networking &
3、查看数据库服务启动进程信息,此时数据库服务启动成功后,只会显示进程信息,不会显示网络端口信息
[root@master local]# ps -ef|grep mysqld

4、验证数据库中数据结构是否升级成功
[root@master local]# /usr/local/mysql/bin/mysql -uroot -p123456 -S /tmp/mysql3357.sock
#
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| aaa |
| mysql |
| performance_schema |
| sys |
| test |
+--------------------+
6 rows in set (0.00 sec)| sys |
mysql> select * from aaa.stu;
+------+------+--------+
| name | age | gender |
+------+------+--------+
| a | 20 | m |
| b | 25 | m |
| c | 30 | f |
+------+------+--------+
3 rows in set (0.00 sec)
说明:这里的账号和密码是之前mysql5.7版本的账号和密码,如果没有设置,直接输入mysql就可以直接进入
数据库版本升级步骤四:数据库服务重启正常状态
说明:在数据库版本从5.7升级到8.0时,可以省略mysql_upgrade升级改变数据结构信息操作,因为8.0版本会自动完成此步骤
1、编写运行MySQL数据库服务脚本
[root@master local]# vim /usr/lib/systemd/system/mysqld3357.service
[Unit]
Description=MySQL Server
Documentation=mysqld.service
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/data/3357/data/my.cnf
ExecStop=/usr/local/mysql57/bin/mysqladmin --defaults-file=/data/3357/data/my.cnf shutdown
ExecReload=/usr/local/mysql57/bin/mysqladmin --defaults-file=/data/3357/data/my.cnf reload
LimitNOFILE = 5000
2、启动数据库
[root@master local]# systemctl daemon-reload
[root@master local]# systemctl start mysqld3357
3、检查核心数据库服务端口信息是否存在
[root@master local]# /usr/local/mysql/bin/mysql -uroot -p123456 -S /tmp/mysql3357.sock
#查看数据库服务版本信息
mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.26 |
+-----------+
1 row in set (0.00 sec)
#查看数据库服务密码加密插件是否变为了8.0数据库服务的默认设置
mysql> select @@default_authentication_plugin;
+---------------------------------+
| @@default_authentication_plugin |
+---------------------------------+
| caching_sha2_password |
+---------------------------------+
1 row in set (0.00 sec)
五、数据库服务升级版本确认¶
在早期升级数据服务程序时,很多企业环境升级过程,都需要有前期的模拟测试环节,并且测试环境的版本升级兼容性需要盲猜;
根本无法通过当前环境的数据库服务版本,来核实确认是否可以进行升级的兼容性版本信息,从而有效避免升级后带来的问题;
而在数据库服务8.0之后,提供了一个mysqlshell命令功能,利用命令功能中的特殊函数,可以在升级前对当前环境版本进行验证;
简而言之:就是数据库服务8.0之后,利用mysqlshell中的函数,可以实现数据库服务升级的预检查功能
检查5.7.20是否能成功升到8.0.26的具体操作命令信息:
1、在5.7.20版本的数据库中创建测试用户
mysql> create user root@'%' identified by '123456';
mysql> grant all on *.* to root@'%';
2、下载8.0.26版本数据库mysql shell功能程序
下载链接:https://downloads.mysql.com/archives/shell/
[root@master ~]# cd /usr/local/
[root@master local]# wget https://downloads.mysql.com/archives/get/p/43/file/mysql-shell-8.0.26-linux-glibc2.12-x86-64bit.tar.gz

3、上传解压8.0.26版本数据库mysql shell功能程序
[root@master local]# tar xf mysql-shell-8.0.26-linux-glibc2.12-x86-64bit.tar.gz
[root@master local]# ln -s mysql-shell-8.0.26-linux-glibc2.12-x86-64bit mysql
4、使用工具进行测试,确认当前5.7版本信息是否可以升级到相应的8.0版本
[root@master local]# cd mysqlsh/bin/
[root@master bin]# ./mysqlsh root:123456@10.0.0.51:3306 -e "util.checkForServerUpgrade()"

说明:有错误就不能升级
六、数据库服务升级回滚实践¶
6.1 企业数据库实战练习一:跨大版本回滚(8.0到5.7)¶
数据库版本回滚步骤一:数据库服务编写回滚文件
1、停止数据库服务
[root@master local]# pkill mysqld
2、恢复备份数据目录
[root@master local]# cp -a /backup/data /data/3357/
2、编写数据库服务编写回滚文件
#升级后配置文件
[root@master local]# cat /data/3357/data/my.cnf
[mysqld]
port=3357
server_id=3357
user=mysql
basedir=/usr/local/mysql
datadir=/data/3357/data
socket=/tmp/mysql3357.sock
innodb_fast_shutdown=0
#升级失败回滚配置文件,修改basedir=/usr/local/mysql为basedir=/usr/local/mysql57
[root@master local]# cat /data/3357/data/my.cnf
[mysqld]
port=3357
server_id=3357
user=mysql
basedir=/usr/local/mysql57
datadir=/data/3357/data
socket=/tmp/mysql3357.sock
innodb_fast_shutdown=0
数据库版本回滚步骤二:数据库服务重新回退启动
1、回退
[root@master local]# /usr/local/mysql57/bin/mysqld_safe --defaults-file=/data/3357/data/my.cnf &
2、数据库服务启动成功后,只会显示进程信息,不会显示网络端口信息
[root@master local]# ps -ef|grep mysqld
3、修改启动文件
#将ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/data/3357/data/my.cnf修改为ExecStart=/usr/local/mysql57/bin/mysqld --defaults-file=/data/3357/data/my.cnf
[root@master local]# vim /usr/lib/systemd/system/mysqld3357.service
[Unit]
Description=MySQL Server
Documentation=mysqld.service
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql57/bin/mysqld --defaults-file=/data/3357/data/my.cnf
ExecStop=/usr/local/mysql57/bin/mysqladmin --defaults-file=/data/3357/data/my.cnf shutdown
ExecReload=/usr/local/mysql57/bin/mysqladmin --defaults-file=/data/3357/data/my.cnf reload
LimitNOFILE = 5000
#启动数据库服务
[root@master local]# systemctl daemon-reload
[root@master local]# systemctl start mysqld3357
数据库版本回滚步骤三:数据库服务回退检查确认
1、连接进入数据库服务中,查看数据库服务版本信息
[root@master local]# mysql -uroot -p123456 -S /tmp/mysql3357.sock
mysql> select version();
6.2 企业数据库实战练习二:跨小版本回滚¶
数据库服务官方参考链接:https://dev.mysql.com/doc/refman/5.7/en/downgrading.html
说明:对于数据库8.0版本是不支持小版本间与大版本间的回滚的,只能采取恢复升级前数据方案。