MySQL5.6升级MySQL5.7

升级方式介绍

08 数据库服务版本升级方法

5.6 -- 5.7 -- 8.0

数据库版本升级方法:

Inplace-本地升级

  • 步骤一:在同一台服务器中,需要部署高版本数据库服务实例
  • 步骤二:低版本数据库中的数据进行备份迁移,迁移到高版本服务中 (物理备份方式-停止服务)
  • 步骤三:运行启动高版本数据库服务实例,进行测试
  • 步骤四:停止低版本数据库服务,将业务迁移到新版数据库

Mergeing-迁移

步骤一:在不同服务器中,可以部署高版本数据库服务实例

步骤二:低版本数据库中的数据进行备份迁移,迁移到高版本服务中 (逻辑备份方式/主从同步)

步骤三:运行启动高版本数据库服务实例,进行测试

步骤四:停止低版本数据库服务,将业务迁移到新版数据库

升级时,数据内容不变,数据结构变

  • 查看8.0和5.7的区别
sh 复制代码
[root@db01~]# ll /data/3306/data/
总用量 191000
-rw-r----- 1 mysql mysql       56 6月  15 12:32 auto.cnf
-rw-r----- 1 mysql mysql     1428 6月  15 14:24 binlog.000001
-rw-r----- 1 mysql mysql      179 6月  15 14:49 binlog.000002
-rw-r----- 1 mysql mysql      462 6月  15 14:51 binlog.000003
-rw-r----- 1 mysql mysql     4937 6月  15 18:09 binlog.000004
-rw-r----- 1 mysql mysql      179 6月  15 19:17 binlog.000005
-rw-r----- 1 mysql mysql     1002 6月  15 20:48 binlog.000006
-rw-r----- 1 mysql mysql      179 6月  15 21:47 binlog.000007
-rw-r----- 1 mysql mysql      179 6月  15 21:48 binlog.000008
-rw-r----- 1 mysql mysql      179 6月  15 21:56 binlog.000009
-rw-r----- 1 mysql mysql      179 6月  15 22:10 binlog.000010
-rw-r----- 1 mysql mysql      179 6月  17 08:47 binlog.000011
-rw-r----- 1 mysql mysql     1610 6月  17 14:38 binlog.000012
-rw-r----- 1 mysql mysql      179 6月  17 15:40 binlog.000013
-rw-r----- 1 mysql mysql      179 6月  17 15:40 binlog.000014
-rw-r----- 1 mysql mysql      179 6月  17 15:44 binlog.000015
-rw-r----- 1 mysql mysql      578 6月  17 16:37 binlog.000016
-rw-r----- 1 mysql mysql      179 6月  17 17:34 binlog.000017
-rw-r----- 1 mysql mysql     6323 6月  17 21:39 binlog.000018
-rw-r----- 1 mysql mysql     1623 6月  17 21:57 binlog.000019
-rw-r----- 1 mysql mysql      304 6月  17 21:39 binlog.index
-rw------- 1 mysql mysql     1676 6月  15 12:32 ca-key.pem
-rw-r--r-- 1 mysql mysql     1112 6月  15 12:32 ca.pem
-rw-r--r-- 1 mysql mysql     1112 6月  15 12:32 client-cert.pem
-rw------- 1 mysql mysql     1680 6月  15 12:32 client-key.pem
-rw-r----- 1 mysql mysql     7442 6月  17 17:34 db01.err
-rw-r----- 1 mysql mysql        6 6月  17 21:39 db01.pid
-rw-r----- 1 mysql mysql   196608 6月  17 21:57 #ib_16384_0.dblwr
-rw-r----- 1 mysql mysql  8585216 6月  15 12:32 #ib_16384_1.dblwr
-rw-r----- 1 mysql mysql     3527 6月  17 21:39 ib_buffer_pool
-rw-r----- 1 mysql mysql 12582912 6月  17 21:57 ibdata1
-rw-r----- 1 mysql mysql 50331648 6月  17 21:57 ib_logfile0
-rw-r----- 1 mysql mysql 50331648 6月  15 12:32 ib_logfile1
-rw-r----- 1 mysql mysql 12582912 6月  17 21:39 ibtmp1
drwxr-x--- 2 mysql mysql      187 6月  17 21:39 #innodb_temp
drwxr-x--- 2 mysql mysql      143 6月  15 12:32 mysql
-rw-r----- 1 mysql mysql 27262976 6月  17 21:57 mysql.ibd
drwxr-x--- 2 mysql mysql     8192 6月  15 12:32 performance_schema
-rw------- 1 mysql mysql     1680 6月  15 12:32 private_key.pem
-rw-r--r-- 1 mysql mysql      452 6月  15 12:32 public_key.pem
-rw-r--r-- 1 mysql mysql     1112 6月  15 12:32 server-cert.pem
-rw------- 1 mysql mysql     1680 6月  15 12:32 server-key.pem
drwxr-x--- 2 mysql mysql       28 6月  15 12:32 sys
-rw-r----- 1 mysql mysql 16777216 6月  17 21:57 undo_001
-rw-r----- 1 mysql mysql 16777216 6月  17 21:51 undo_002
drwxr-x--- 2 mysql mysql       20 6月  17 21:08 wzy
[root@db01~]# ll /data/3357/data/
总用量 110660
-rw-r----- 1 mysql mysql       56 6月  15 22:44 auto.cnf
-rw------- 1 mysql mysql     1676 6月  15 22:44 ca-key.pem
-rw-r--r-- 1 mysql mysql     1112 6月  15 22:44 ca.pem
-rw-r--r-- 1 mysql mysql     1112 6月  15 22:44 client-cert.pem
-rw------- 1 mysql mysql     1680 6月  15 22:44 client-key.pem
-rw-r----- 1 mysql mysql      351 6月  17 08:49 ib_buffer_pool
-rw-r----- 1 mysql mysql 12582912 6月  17 08:49 ibdata1
-rw-r----- 1 mysql mysql 50331648 6月  17 08:49 ib_logfile0
-rw-r----- 1 mysql mysql 50331648 6月  15 22:44 ib_logfile1
drwxr-x--- 2 mysql mysql     4096 6月  15 22:44 mysql
drwxr-x--- 2 mysql mysql     8192 6月  15 22:44 performance_schema
-rw------- 1 mysql mysql     1680 6月  15 22:44 private_key.pem
-rw-r--r-- 1 mysql mysql      452 6月  15 22:44 public_key.pem
-rw-r--r-- 1 mysql mysql     1112 6月  15 22:44 server-cert.pem
-rw------- 1 mysql mysql     1680 6月  15 22:44 server-key.pem
drwxr-x--- 2 mysql mysql     8192 6月  15 22:44 sys

升级注意事项

数据库版本升级规则:官方参考链接

  • 数据库服务版本升级时,只支持在GA(General Availability)版本之间进行升级

  • 数据库服务版本升级时,支持从数据库5.6到5.7再到8.0,跨版本升级,但是建议先将5.6升级到最新版本,在进行跨版本升级。避免跨越的版本过多而导致的升级失败

  • 数据库服务版本升级时,需要提前考虑好版本回退的方案,最好升级前做好数据备份(特别是向8.0版本升级)

  • 数据库服务版本升级时,制定的升级方案和升级步骤,需要尽可能降低数据库服务停机的时间

    下图为非GA版本

升级流程

数据库版本升级流程:

  • 数据库服务数据备份保存(可以采用热备和冷备两种方案,冷备是需要停止业务后备份,热备是无需停止业务备份)
  • 数据库服务最新程序安装(最新版本数据库服务安装过程时,无需停止原有数据库旧版服务)
  • 数据库服务原有程序关闭(网站显示维护页面)
  • 数据库服务最新程序启动(加载原有程序数据实现挂库升级,并采用跳过授权表和跳过网络方式启动)
  • 数据库服务升级数据结构(数据库服务升级程序后,还需要升级数据系统结构信息,因此升级时间和数据量无关)
  • 数据库服务可以正常重启(数据库服务升级完毕后,确认数据库服务是可以正常完成重启操作)
  • 数据库服务功能测试验证(反复核实验证与数据库服务相关的各项功能是否正常)
  • 数据库服务升级工作完毕(取消网站维护页面,恢复正常网站线上运营业务)

5.6本地升级5.7案例

MySQL5.6部署

下载地址:https://downloads.mysql.com/archives/get/p/23/file/mysql-5.6.48-linux-glibc2.12-x86_64.tar.gz

准备相关目录,略。

注意不要有/etc/my.cnf,否则影响初始化

1.MySQL5.6初始化安装命令如下:

bash 复制代码
/usr/local/mysql3356/scripts/mysql_install_db \
--user=mysql \
--basedir=/usr/local/mysql3356 \
--datadir=/data/3356/data

2.准备启动文件

bash 复制代码
cat > /data/3356/my.cnf <<eof
[mysqld]
user=mysql
port=3356
basedir=/usr/local/mysql56
datadir=/data/3356/data
socket=/tmp/mysql3356.sock
eof
sh 复制代码
cat >/etc/systemd/system/mysqld3356.service <<eof
[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
[Instal1]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql3356/bin/mysqld --defaults-file=/data/3356/my.cnf
LimitNOFILE=65535
eof

3.启动数据库并连接测试。可以发现为无密码登录

bash 复制代码
[root@db51~]# systemctl daemon-reload
[root@db51~]# systemctl start mysqld3356
[root@db51~]# mysql -S /tmp/mysql3356.sock -uroot
-bash: mysql: command not found
[root@db51~]# /usr/local/mysql/bin/mysql -S /tmp/mysql3356.sock -uroot
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.6.48 MySQL Community Server (GPL)

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.00 sec)

mysql>

MySQL5.7部署

下载软件程序: https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.40-linux-glibc2.12-x86_64.tar.gz

准备相关目录略

1.初始化:

bash 复制代码
/usr/local/mysql3357/bin/mysqld \
--initialize-insecure \
--user=mysql  \
--basedir=/usr/local/mysql57 \
--datadir=/data/3357/data

2.书写数据库配置

sh 复制代码
cat > /data/3357/my.cnf <<eof
[mysqld]
user=mysql
port=3357
basedir=/usr/local/mysql3357
datadir=/data/3357/data
socket=/tmp/mysql3357.sock
eof

systemctl管理文件

sh 复制代码
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/mysql3357/bin/mysqld --defaults-file=/data/3357/my.cnf
LimitNOFILE = 35535
EOF

使用systemctl启动后,查看端口

sh 复制代码
[root@db01local]# ss -antl|grep 335
LISTEN     0      80        [::]:3356                  [::]:*                  
LISTEN     0      80        [::]:3357                  [::]:* 

登录

sh 复制代码
[root@db01local]# /usr/local/mysql57/bin/mysql -S /tmp/mysql3357.sock -P 3357
Server version: 5.7.30 MySQL Community Server (GPL)
mysql> 

创建测试用的表

mysql 复制代码
create database xiaoA;
use xiaoA;
create table t1 (id int,name char(10),age int);
insert into t1 values (1,'wenzy',20),(2,'girl',21),(3,'baby',22);
create database xiaoB;

然后停止MySQL5.6版本的数据库

MySQL5.6升级到5.7

5.6 -- 5.7

步骤一:进行数据库服务备份操作

物理备份 逻辑备份-mysqldump 主从同步

步骤二:将原有数据信息导入到新版数据库服务

迁移恢复数据

步骤三:进行前期新版数据库功能测试

web服务器(程序代码)--- 5.7数据库服务(业务数据) -- 浏览器访问测试

步骤四:停止旧版数据库服务 (网站维护页通知)

systemctl stop mysqld3356.service

步骤五:备份原有数据信息

物理备份:cp -ar /data/3356/data/ /backup/mysql3356/

步骤六:实现数据挂库升级

更改mysql56的配置文件,basedir。

为什么:不把mysql3357的配置文件改为datadir=/data/3356/data

答:应用程序需要连接数据库,这样改变了端口,变动较大。不稳定

1.修改MySQL5.6的程序目录为新版MySQL5.7

sh 复制代码
[root@db01~]# vim /data/3356/my.cnf 
[mysqld]
server_id=3356
port=3356
user=mysql
basedir=/usr/local/mysql57
datadir=/data/3356/data
socket=/tmp/mysql3356.sock

2.启动新数据库

bash 复制代码
/usr/local/mysql3357/bin/mysqld_safe \
--defaults-file=/data/3356/my.cnf \
--skip-grant-tables \
--skip-networking &

3.连接新数据库,可以发现成了5.7版本。授权信息但是没有

bash 复制代码
[root@db51~]# mysql -S /tmp/mysql3356.sock -uroot
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.30 MySQL Community Server (GPL)

Copyright (c) 2000, 2021, Oracle and/or its affiliates.


mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
| xiaoA              |
| xiaoB              |
+--------------------+

# 这是 MySQL5.6的授权表信息
mysql> select * from mysql.user \G

*************************** 2. row ***************************
                  Host: db51
                  User: root
              Password: 
           Select_priv: Y
           Insert_priv: Y
           Update_priv: Y
           Delete_priv: Y
           Create_priv: Y
             Drop_priv: Y
           Reload_priv: Y
         Shutdown_priv: Y
          Process_priv: Y
             File_priv: Y

4.修改授权表结构

bash 复制代码
/usr/local/mysql3357/bin/mysql_upgrade -S /tmp/mysql3356.sock --force	

5.在此查看授权表信息

bash 复制代码
# 升级后的密码信息
account_locked: N
*************************** 7. row ***************************
                  Host: localhost
                  User: mysql.session
           Select_priv: N
           Insert_priv: N
           Update_priv: N
           Delete_priv: N
           Create_priv: N
             Drop_priv: N
           Reload_priv: N
         Shutdown_priv: N
          Process_priv: N

5.修改数据库启动配置,然后正常启动新版数据库服务

bash 复制代码
pkill -9 mysql

cat > /etc/systemd/system/mysqld3356.service <<'EOF'
[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
[Instal1]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql3357/bin/mysqld --defaults-file=/data/3356/my.cnf
LimitNOFILE=65535
EOF

systemctl daemon-reload 
systemctl start mysqld3356

6.验证新版数据库MySQL5.7权限信息正确

bash 复制代码
[root@db51~]# mysql -S /tmp/mysql3356.sock 
Welcome to the MySQL monitor.  Commands end with ; or \g.


mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test               |
| xiaoA              |
| xiaoB              |
+--------------------+
7 rows in set (0.00 sec)

mysql> create database wenzy;
Query OK, 1 row affected (0.00 sec)
sql -S /tmp/mysql3356.sock 
Welcome to the MySQL monitor.  Commands end with ; or \g.


mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test               |
| xiaoA              |
| xiaoB              |
+--------------------+
7 rows in set (0.00 sec)

mysql> create database wenzy;
Query OK, 1 row affected (0.00 sec)
相关推荐
Yake196511 分钟前
正则表达式中^的用法
数据库·mysql·正则表达式
龙少954320 分钟前
【linux下mysql主从复制操作流程】
linux·mysql·adb
筒栗子40 分钟前
复习打卡MySQL篇03
android·数据库·mysql
shaoweijava1 小时前
企业车辆管理系统(源码+数据库+报告)
java·数据库·spring boot·mysql
Java&Develop1 小时前
ShardingSphere-多表关联
java·数据库
吴冰_hogan1 小时前
MySQL 中的 MVCC:实现高效并发控制
数据库·mysql
KevinAha2 小时前
MacOS 上以源码形式安装 MySQL 5.7
mysql·macos
小码ssim2 小时前
docker搭建Redis集群及哨兵(windows10环境,OSS Cluster)
数据库·redis·缓存
YashanDB3 小时前
【YashanDB知识库】oracle与yashanDB的jdbc返回常量列“0.00“的精度和刻度不一致
数据库·oracle·yashandb·崖山数据库
PingCAP3 小时前
知乎 PB 级别 TiDB 数据库集群管控实践
数据库·tidb