随着互联网技术的不断发展,很多新的应用都会随着企业的需求日新月异,同样数据库服务也会不断的升级更新;

所以早期很多企业的网站架构中,所部署安装的历史版本的数据库服务程序就需要升级迭代,来满足新的场景应用需求;

但是对于数据库服务的升级不同于其他程序升级,因为数据库服务中保存着企业重要的数据信息,一旦升级失败就会造成巨大损失;

因此,数据库程序的版本升级一定要采用比较规范正确的方式升级,即保证程序升级后的应用,同时保证数据的稳定性;

一、常见的数据库服务程序升级方式

方式 升级说明 备注说明
单台服务器升级(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*

Day002-数据库服务基础配置管理-图1

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

Day002-数据库服务基础配置管理-图2

数据库版本升级步骤四:数据库服务升级数据结构

1、实现对原有数据库中数据信息的挂库升级操作

#挂库升级:将数据目录和授权表进行结构调整
[root@master local]# /usr/local/mysql57/bin/mysql_upgrade -S /tmp/mysql3356.sock --force

image-20250211154241466

说明:在数据库版本从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*

Day002-数据库服务基础配置管理-图4

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

Day002-数据库服务基础配置管理-图5

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

Day002-数据库服务基础配置管理-图6

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()"

Day002-数据库服务基础配置管理-图7

说明:有错误就不能升级

六、数据库服务升级回滚实践

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版本是不支持小版本间与大版本间的回滚的,只能采取恢复升级前数据方案。