从低版本MySQL升级到高版本

?荣誉认证:51CTO博客专家博主、TOP红人、明日之星;阿里云开发者社区专家博主、技术博主、星级博主。

?技能证书:阿里云ACP。

?微信公众号:微笑的段嘉许

?本文由微笑的段嘉许原创!

?欢迎关注?点赞?收藏⭐留言?

?51CTO首发时间:?2023年3月19日?

✉️坚持和努力一定能换来诗与远方!

?作者水平很有限,如果发现错误,一定要及时告知作者哦!感谢感谢!

不要偷走我小火车哦~ ~ ~

?导航小助手?


本文介绍

本篇文章主要介绍MySQL的两种升级方式,本地升级和备份升级。


?理论讲解:

什么是MySQL

  • 数据库:MySQL是一种关系型数据库管理系统,它可以存储和管理大量结构化数据。数据库是由一个或多个表组成的,每个表包含多个行和列,用户可以通过SQL语言进行增删改查等操作。
  • 数据类型:MySQL支持各种数据类型,包括整型、浮点型、日期时间型、字符串型等。不同的数据类型具有不同的存储大小和精度,用户需要根据实际需求选择合适的数据类型。
  • 索引:MySQL支持各种类型的索引,包括B树索引、哈希索引、全文索引等。索引可以提高查询效率,但也会增加数据修改的开销,用户需要根据实际情况进行选择。
  • 事务:MySQL支持ACID事务,即原子性、一致性、隔离性和持久性。事务可以保证数据的完整性和一致性,用户可以通过事务控制语句进行事务管理。
  • 视图:MySQL支持视图,即基于一个或多个表的虚拟表。视图可以简化查询操作,用户可以通过视图进行数据查询和修改等操作。
  • 存储引擎:MySQL支持多种存储引擎,包括InnoDB、MyISAM、Memory等。不同的存储引擎具有不同的优缺点,用户需要根据实际需求进行选择。
  • 安全性:MySQL支持各种安全措施,包括用户认证、权限管理、SSL加密等。用户需要根据实际情况进行安全配置,以保证数据库的安全性。

MySQL是一种功能强大的关系型数据库管理系统,用户需要掌握其各种理论知识,才能更好地进行数据库管理和应用开发。

MySQL升级涉及到的理论知识点包括

  1. MySQL的版本号:MySQL的版本号由三个数字组成,分别是主版本号、次版本号和修订版本号。例如,MySQL 5.7.30的主版本号为5,次版本号为7,修订版本号为30。
  2. MySQL的发行周期:MySQL的发行周期一般为一年左右,每个版本都会有一些新的功能和改进。
  3. MySQL的兼容性:在升级MySQL时,需要考虑新版本是否与现有应用程序和数据库兼容。如果不兼容,可能需要修改应用程序或数据库结构。
  4. MySQL的备份和恢复:在升级MySQL之前,需要对现有的数据库进行备份。如果升级失败,可以通过备份文件进行恢复。
  5. MySQL的升级方法:MySQL的升级方法包括在线升级和离线升级。在线升级可以在不停机的情况下进行,但可能会导致一些性能问题。离线升级需要停机,但可以更好地控制升级过程。
  6. MySQL的升级步骤:MySQL的升级步骤包括准备工作、升级前的检查、备份数据库、升级MySQL软件、升级数据库结构、测试和验证升级结果等。

image-20230319155347437

什么情况下需要将老版本的MySQL升级到高版本

  • 安全漏洞:老版本的MySQL可能存在安全漏洞,升级到高版本可以提高数据库的安全性。
  • 性能问题:老版本的MySQL可能存在性能问题,升级到高版本可以提高数据库的性能。
  • 新功能需求:新版本的MySQL可能会有一些新的功能和改进,升级到高版本可以满足新的需求。
  • 支持新的操作系统:新版本的MySQL可能会支持新的操作系统,升级到高版本可以在新的操作系统上运行。
  • 应用程序兼容性:一些应用程序需要特定版本的MySQL,当应用程序需要升级时,可能需要将MySQL升级到与应用程序兼容的版本。

总之,当老版本的MySQL无法满足当前需求时,需要将其升级到高版本。


?实验配置与实现:

推荐步骤

  • 在Centos04上安装MySQL5.6版本的MySQL数据库,启动服务设置密码,登录MySQL数据库创建duanjiaxu数据库,表名为djx,设置两列数据分别使用name和id列,id列为主键,表中插入数据记录。
  • 在Centos04上安装MySQL 5.7版本数据库,将 5.6版本升级到 5.7版本
  • 在Centos04上安装MySQL 8.0版本数据库,将 5.7版本升级到 8.0版本数据库。

一、在Centos04安装MySQL 5.6版本的MySQL数据库,启动服务设置登录密码,登录MySQL数据库创建duanjiaxu数据库,表名为djx,设置两列数据分别使用name和id列,id列为主键,表中插入数据记录

1.1、在Centos04安装MySQL 5.8版本,启动服务设置登录面。

1)使用winSCP上传MySQL 5.6、5.7、8.0版本程序包

image-20230319160830434

2)安装 5.6版本MySQL

[root@centos04 ~]# groupadd mysql			//创建MySQL管理组
[root@centos04 ~]# useradd -M -s /sbin/nologin -g mysql mysql			//创建MySQL管理用户
[root@centos04 ~]# tar zxf ./mysql-5.6.46-linux-glibc2.12-x86_64.tar.gz -C /usr/src/			//解压MySQL程序包
[root@centos04 ~]# mv /usr/src/mysql-5.6.46-linux-glibc2.12-x86_64/ /usr/local/mysql			//剪切到/usr/local/mysql
[root@centos04 ~]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld			//生成服务配置文件
[root@centos04 ~]# chmod +x /etc/init.d/mysqld			//添加执行权限
[root@centos04 ~]# chkconfig --add mysqld			//启动服务
[root@centos04 ~]# chkconfig --level 35 mysqld on			//设置开机自启

1.2、修改服务配置文件

1)修改配置文件

[root@centos04 ~]# vim /etc/my.cnf			//进入配置文件
---
  1 [mysqld]
  2 user=mysql
  3 basedir=/usr/local/mysql/
  4 datadir=/usr/local/mysql/data
  5 socket=/tmp/mysql.sock
  6 port=3306
  7 [mysql]
  8 socket=/tmp/mysql.sock

1.3、修改MySQL数据库所有者,优化命令、初始化数据库启动服务

1)修改MySQL数据库所有者

[root@centos04 ~]# chown mysql:mysql /etc/my.cnf		//修改MySQL所有者
[root@centos04 ~]# chown -R mysql:mysql /usr/local/mysql/			//修改目录所有者
[root@centos04 ~]# echo "PATH=$PATH:/usr/local/mysql/bin/" >> /etc/profile			//优化命令
[root@centos04 ~]# source /etc/profile

2)初始化MySQL数据库,启动服务

[root@centos04 ~]# /usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/			//初始化数据库
[root@centos04 ~]# systemctl start mysqld			//启动服务
[root@centos04 ~]# netstat -anptu | grep mysqld			//监听网卡
tcp6       0      0 :::3306                 :::*                    LISTEN      41079/mysqld 

3)设置MySQL数据库登录密码,登录数据库

[root@centos04 ~]# mysqladmin -uroot password			//设置密码
New password: 			//输入密码
Confirm new password: 			//确定密码
[root@centos04 ~]# mysql -uroot -ppwd@123			//登录MySQL数据库
Warning: Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.6.46 MySQL Community Server (GPL)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

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> 

1.4、创建duanjiaxu数据库,表名为djx,设置两列数据分别使用name和id列,id列为主键,表中插入数据记录

1)创建名为duanjiau库

mysql> create database duanjiaxu;			//创建数据库
Query OK, 1 row affected (0.00 sec)

mysql> show databases;			//查询创建的数据库
+--------------------+
| Database           |
+--------------------+
| information_schema |
| duanjiaxu          |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.00 sec)

image-20230319161258515

2)设计表结构分别使用name和id列,id列为主键

mysql> create table duanjiaxu.djx (name char(6),id char(18),primary key(id));			//设计表结构
Query OK, 0 rows affected (0.00 sec)
mysql> desc duanjiaxu.djx;			//查看表结构
+-------+----------+------+-----+---------+-------+
| Field | Type     | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| name  | char(6)  | YES  |     | NULL    |       |
| id    | char(18) | NO   | PRI |         |       |
+-------+----------+------+-----+---------+-------+
2 rows in set (0.00 sec)

3)插入数据

mysql> insert into duanjiaxu.djx values ('djx','1111111111111111');			//插入数据
Query OK, 1 row affected (0.00 sec)

mysql> select * from duanjiaxu.djx;			//查询插入的数据
+------+------------------+
| name | id               |
+------+------------------+
| djx  | 1111111111111111 |
+------+------------------+
1 row in set (0.00 sec)

二、在Centos04安装MySQL 5.7把呢不能数据库,将 5.6升级到 5.7版本

2.1、停止MySQL 5.6版本服务,备份 5.6数据库数据、修改MySQL主配置文件

1)解压MySQL 5.7版本程序包

[root@centos04 ~]# tar zxf ./mysql-5.7.30-linux-glibc2.12-x86_64.tar.gz -C /usr/src/			//解压程序包
[root@centos04 ~]# mv /usr/src/mysql-5.7.30-linux-glibc2.12-x86_64/ /usr/local/mysql5.7			//剪切到/usr/local/mysql5.7目录

2)停止MySQL 5.6版本服务

[root@centos04 ~]# /usr/local/mysql/bin/mysqladmin -uroot -ppwd@123 -S /tmp/mysql.sock shutdown			//停止MySQL服务
Warning: Using a password on the command line interface can be insecure.
[root@centos04 ~]# cp -r /usr/local/mysql/data/ /usr/local/mysql_back			//备份数据库数据 
[root@centos04 ~]# ls /usr/local/mysql_back/			//查看是否备份成功
auto.cnf      duanjiaxu  ib_logfile0  mysql               test
centos04.err  ibdata1    ib_logfile1  performance_schema

3)修改MySQL主配置文件、修改用户所有者

[root@centos04 ~]# vim /etc/my.cnf
  1 [mysqld]
  2 user=mysql
  3 basedir=/usr/local/mysql5.7/
  4 datadir=/usr/local/mysql/data
  5 socket=/tmp/mysql3307.sock
  6 port=3307
  7 [mysql]
  8 socket=/tmp/mysql3307.sock

image-20230319161633332

2.2、从MySQL 5.6版本升级到MySQL 5.7版本

1)修改用户所有者、配置高版本数据库挂载低版本数据

[root@centos04 ~]# chown -R mysql:mysql /usr/local/mysql5.7/			//修改用户所有者
[root@centos04 ~]# /usr/local/mysql5.7/bin/mysqld_safe --defaults-file=/etc/my.cnf --skip-grant-tables --skip-networking &			//配置高版本数据库挂载低版本数据

2)低版本MySQL升级到高本版MySQL、登录高版本MySQL查看数据

[root@centos04 ~]# /usr/local/mysql5.7/bin/mysql_upgrade -uroot -ppwd@123 -S /tmp/mysql3307.sock --force			//低版本升级到高版本
[root@centos04 ~]# /usr/local/mysql5.7/bin/mysql -uroot -ppwd@123 -S /tmp/mysql3307.sock 			//登录到5.7版本数据库

image-20230319161859653

3)查看数据

mysql> show databases;			//查看数据库
+--------------------+
| Database           |
+--------------------+
| information_schema |
| duanjiaxu          |
| mysql              |
| performance_schema |
| sys                |
| test               |
+--------------------+
6 rows in set (0.00 sec)

mysql> select * from duanjiaxu.djx;			//查看表中数据
+------+------------------+
| name | id               |
+------+------------------+
| djx  | 1111111111111111 |
+------+------------------+
1 row in set (0.00 sec)

三、在Centos01安装MySQL 8.0版本数据库,将 5.7版本升级到 8.0版本数据库

3.1、安装MySQL 8.0版本

1)挂载系统光盘,安装依赖

[root@centos04 ~]# mount /dev/cdrom /mnt/			//挂载系统光盘
mount: /dev/sr0 写保护,将以只读方式挂载
[root@centos04 ~]# ls /mnt/			//查看系统光盘是否挂载成功
CentOS_BuildTag  GPL       LiveOS    RPM-GPG-KEY-CentOS-7
EFI              images    Packages  RPM-GPG-KEY-CentOS-Testing-7
EULA             isolinux  repodata  TRANS.TBL
[root@centos04 ~]# rm -rf /etc/yum.repos.d/CentOS-*			//删除系统自带的yum源
[root@centos04 ~]# cat /etc/yum.repos.d/local.repo 			//查看创建的本地yum源
[local]
name=centos
baseurl=file:///mnt
enabled=1
gpgcheck=0

[root@centos04 ~]# yum -y install libyaml			//安装依赖

image-20230319162243754

2)使用winSCP工具上传环境检查工具

image-20230319162305143

3)安装环境检查工具

警告:./mysql-shell-8.0.32-1.el7.x86_64.rpm: 头V4 RSA/SHA256 Signature, 密钥 ID 3a79bd29: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...
   1:mysql-shell-8.0.32-1.el7         ################################# [100%]

4)停止MySQL 5.7服务

[root@centos04 ~]# /usr/local/mysql5.7/bin/mysql -uroot -ppwd@123 -S /tmp/mysql3307.sock 			//登录5.7版本MySQL数据库
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 5.7.30 MySQL Community Server (GPL)

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

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> set global innodb_fast_shutdown=0;			
Query OK, 0 rows affected (0.00 sec)

mysql> select @@innodb_fast_shutdown;
+------------------------+
| @@innodb_fast_shutdown |
+------------------------+
|                      0 |
+------------------------+
1 row in set (0.00 sec)

mysql> shutdown;			//停止服务
Query OK, 0 rows affected (0.00 sec)

3.2、修改MySQL主配置文件、加载 5.7版本数据、重写启动服务

1)修改mysql主配置文件

[root@centos04 ~]# vim /etc/my.cnf			//修改配置文件
  1 [mysqld]
  2 user=mysql
  3 basedir=/usr/local/mysql8.0/
  4 datadir=/usr/local/mysql/data
  5 socket=/tmp/mysql3308.sock
  6 port=3308
  7 [mysql]
  8 socket=/tmp/mysql3308.sock

image-20230319162440388

2)解压MySQL 8.0程序包

[root@centos04 ~]# tar zxf ./mysql-8.0.32-el7-x86_64.tar.gz -C /usr/src/			//解压MySQL程序包
[root@centos04 ~]# mv /usr/src/mysql-8.0.32-el7-x86_64/ /usr/local/mysql8.0			//剪切到/usr/local/mysql8.0目录
[root@centos04 ~]# chown -R mysql:mysql /usr/local/mysql8.0/			//修改目录所有者

3)加载 5.7版本数据,重新启动服务

[root@centos04 ~]# /usr/local/mysql8.0/bin/mysqld_safe --defaults-file=/etc/my.cnf --skip-grant-tables --skip-networking &			//加载老版本数据
[root@centos04 ~]# /usr/local/mysql8.0/support-files/mysql.server restart			//重新启动服务
Shutting down MySQL..2023-03-14T16:35:43.080990Z mysqld_safe mysqld from pid file /usr/local/mysql/data/centos04.pid ended
 SUCCESS! 
Starting MySQL. SUCCESS! 
[1]+  完成                  /usr/local/mysql8.0/bin/mysqld_safe --defaults-file=/etc/my.cnf --skip-grant-tables --skip-networking
[root@centos04 ~]# netstat -anptu | grep mysqld			//监听端口
tcp6       0      0 :::3308                 :::*                    LISTEN      45211/mysqld        
tcp6       0      0 :::33060                :::*                    LISTEN      45211/mysqld        

4)登录MySQL数据库、查询数据

[root@centos04 ~]# /usr/local/mysql8.0/bin/mysql -uroot -ppwd@123 -S /tmp/mysql3308.sock			//登录MySQL数据库
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.32 MySQL Community Server - GPL

Copyright (c) 2000, 2023, 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           |
+--------------------+
| duanjiaxu          |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test               |
+--------------------+
6 rows in set (0.00 sec)

mysql> select * from duanjiaxu.djx;			//查询duanjiaxu库中的djx表数据
+------+------------------+
| name | id               |
+------+------------------+
| djx  | 1111111111111111 |
+------+------------------+
1 row in set (0.00 sec)

?作者水平很有限,如果发现错误,一定要及时告知作者哦!感谢感谢!

img


版权声明:本文为weixin_72651014原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。