inplace mysql_MySQL之Inplace Upgrade升级原理与实践

第一章 MySQL-INPLACE就地升级原理过程

INPLACE就地升级MySQL过程原理:

关闭原数据库(业务挂维护页)

备份原数据库数据

安装新版本软件

使用新版本软件挂旧版本数据启动

升级系统表

正常重启数据库

验证各项功能是否正常

恢复业务

MySQL官方升级指导

注意:MySQL升级只是升级系统表,升级时间和数据量无关。另外需要说明一点,数据库升级尽量使用Mergeing迁移升级(主从迁移、备份迁移),就地升级的风险较大,必须想好回退方案,且回退过程及其繁琐麻烦,生产中不推荐这种方式升级!

第二章 MySQL升级注意事项

升级之前,先备份,备份,备份(热冷备份都可以)

仅支持GA版本之间升级

回退方案制定好,每升级一个版本进行备份一次,特别是升级到8.0(5.7升级到8.0无法就地回退)

升级过程中尽量降低业务影响时间

业务低谷期进行升级

注意: 以上均是指MySQL的GA版本,从非GA版本到GA版本的升级并不支持,譬如5.6.9到5.6.10,因为前者并不是一个GA版本。

Upgrade is only supported between General Availability (GA) releases.

Upgrade from MySQL 5.6 to 5.7 is supported. Upgrading to the latest release is recommended before upgrading to the next version. For example, upgrade to the latest MySQL 5.6 release before upgrading to MySQL 5.7.

Upgrade that skips versions is not supported. For example, upgrading directly from MySQL 5.5 to 5.7 is not supported.

Upgrade within a release series is supported. For example, upgrading from MySQL 5.7.x to 5.7.y is supported. Skipping a release is also supported. For example, upgrading from MySQL 5.7.x to 5.7.z is supported.

第三章 实战演练环境准备

1.虚拟机环境

$ hostname -I

10.0.1.51

$ hostname

db01

$ cat /etc/redhat-release

CentOS Linux release 7.7.1908 (Core)

2.虚拟机优化

3.实战演练需求说明

将MySQL5.6.46升级到MySQL5.7.28

将MySQL5.7.28升级到MySQL8.0.18

本实验最终目的是将MySQL5.6.46升级到MySQL8.0.18。

注意: GA版本之间的升级流程

5.7 ---> 8.0

先将MySQL5.7升级到最新版本,再将5.7的最新版本升级到MySQL8.0的最新版本。

5.6 ---> 5.7

先将MySQL5.6升级至最新版,再升级到5.7指定版,一般是最新。

5.5 ---> 5.7

先将MySQL5.5升级至最新版本,再升级到5.6最新版本,最后将5.6最新版本升级5.7最新版本。

4.一台机器部署MySQL5.6、5.7和8.0三个实例

本实验需要在同一台机器上同事部署MySQL5.6、5.7以及8.0三个实例。

部署过程请参考:https://www.pingface.com/2020/04/mysqlmulti.html

第四章 实战预演MySQL-INPALCE就地升级5.6到5.7

1.停机备份MySQL5.6

优雅停库

$ echo "innodb_fast_shutdown=0 " >>/data/3316/my.cnf

$ systemctl stop mysqld3316

备份数据目录

$ cp -r /data/3316/data /data/3316/data.56

2.安装MySQL5.7和8.0

安装部署过程参考上述博客。

3.使用MySQL5.7挂5.6的数据目录并启动

修改MySQL5.6配置basedir指向MySQL5.7

# **指定basedir为MySQL5.7软件安装目录**

$ cat >/data/3316/my.cnf<

[mysqld]

user=mysql

basedir=/data/app/mysql5728

datadir=/data/3316/data

socket=/data/socket/mysql3316.sock

port=3316

server_id=16

innodb_fast_shutdown=0

EOF

安全模式启动MySQL5.7

$ --defaults-file=/data/3316/my.cnf --skip-grant-tables --skip-networking &

$ ps aux|grep mysql5728

4.升级系统表

$ /data/app/mysql5728/bin/mysql_upgrade -S /data/socket/mysql3316.sock --force

# 屏幕输出一列OK,最后两行有Upgrade process completed successfully表示升级系统表成功!

5.重启数据库到正常状态

停止MySQL5.7

$ /data/app/mysql5728/bin/mysqladmin -S /data/socket/mysql3316.sock shutdown

修改systemd启动脚本的启动目录

$ cat >/etc/systemd/system/mysqld3316.service<

[Unit]

Description=MySQL Server

Documentation=man:mysqld(8)

Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html

After=network.target

After=syslog.target

[Install]

WantedBy=multi-user.target

[Service]

User=mysql

Group=mysql

ExecStart=/data/app/mysql5728/bin/mysqld --defaults-file=/data/3316/my.cnf

LimitNOFILE = 5000

EOF

systemd启动MySQL5.7

$ systemctl start mysqld3316.service

$ netstat -lntup|grep mysql

tcp6 0 0 :::3316 :::* LISTEN 2218/mysqld

6.连接并查看

登录查看数据库

$ /data/app/mysql5728/bin/mysql -S /data/socket/mysql3316.sock

# 登录提示:Server version: 5.7.28 MySQL Community Server (GPL)

# 查看数据库

mysql> show databases;

+--------------------+

| Database |

+--------------------+

| information_schema |

| mysql |

| performance_schema |

| sys |

| test |

+--------------------+

# sys库存在则表示升级完成,mysql-5.6没有sys库

至此,MySQL5.6.46升级到MySQL5.7.28完成。

第五章 实战预演MySQL-INPALCE就地升级5.7到8.0

在上一章我们完成了MySQL5.6.46升级到5.7.28,下面将这个MySQL5.7升级到8.0,。具体步骤和上述差不多,只不过8.0启动之后就会自动升级系统表,因此不需要mysql_upgade这一步了。

1.停库备份

$ systemctl stop mysqld3316.service

$ ps aux|grep mysql

$ cp -r /data/3316/data /data/3316/data.57

2.修改配置

# 指定basedir为MySQL8.0软件安装目录

$ cat >/data/3316/my.cnf<

[mysqld]

user=mysql

basedir=/data/app/mysql8018

datadir=/data/3316/data

socket=/data/socket/mysql3316.sock

port=3316

server_id=16

innodb_fast_shutdown=0

EOF

3.安全模式启动MySQL8.18

$ /data/app/mysql8018/bin/mysqld_safe --defaults-file=/data/3316/my.cnf --skip-grant-tables --skip-networking &

$ ps aux|grep mysql8018

4.正常重启MySQL8.0

$ /data/app/mysql8018/bin/mysqladmin -S /data/socket/mysql3316.sock shutdown

$ cat >/etc/systemd/system/mysqld3316.service<

[Unit]

Description=MySQL Server

Documentation=man:mysqld(8)

Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html

After=network.target

After=syslog.target

[Install]

WantedBy=multi-user.target

[Service]

User=mysql

Group=mysql

ExecStart=/data/app/mysql8018/bin/mysqld --defaults-file=/data/3316/my.cnf

LimitNOFILE = 5000

EOF

$ systemctl start mysqld3316.service

$ netstat -lntup|grep 3316

tcp6 0 0 :::3316 :::* LISTEN 2664/mysqld

5.登录并验证

$ /data/app/mysql8018/bin/mysql -S /data/socket/mysql3316.sock

# 登录提示:Server version: 8.0.18 MySQL Community Server - GPL

# 查看数据目录,如果有如下文件则表示数据库升级成功。

$ ll /data/3316/data

-rw-rw---- 1 mysql mysql 76M 2020-04-25 01:00:05 ibdata1

-rw-r----- 1 mysql mysql 48M 2020-04-25 01:00:05 ib_logfile0

-rw-r----- 1 mysql mysql 48M 2020-04-25 00:57:01 ib_logfile1

-rw-r----- 1 mysql mysql 28M 2020-04-25 01:00:05 mysql.ibd

-rw-r----- 1 mysql mysql 12M 2020-04-25 01:00:05 undo_001

-rw-r----- 1 mysql mysql 12M 2020-04-25 01:00:05 undo_002

至此,完成MySQL5.6.46升级到最新版本的MySQL8.0.18。

第六章 MySQL5.7升级到MySQL8.0预检查

1.下载与MySQL8.0对应版本的软件

$ ll mysql-shell-8.0.18-1.el7.x86_64.rpm

-rw-r--r-- 1 root root 28M 2020-04-26 18:54:14 mysql-shell-8.0.18-1.el7.x86_64.rpm

2.安装mysql-shell

$ yum -y install mysql-shell-8.0.18-1.el7.x86_64.rpm

3.授权远程用户

mysql> grant all on *.* to root@'10.0.1.%' identified by '123';

4.执行预检查

$ mysqlsh root:123@10.0.1.51:3306 -e "util.checkForServerUpgrade()"

......

Errors: 0

Warnings: 1

Notices: 0

No fatal errors were found that would prevent an upgrade, but some potential issues were detected. Please ensure that the reported issues are not significant before upgrading.

# Errors为0表示可以升级。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值