1
头图

对从事互联网 IT 技术岗位的来说,数据库也是我们日常必备的技能之一,而 MySQL 数据库更是常见、常用的数据库之一。

图片

根据 DB-Engines 的数据显示,MySQL 是全球最流行的开源数据库,并且在过去十多年中一直排名第二。图片数据来源:DB-Engines 官方网站截图,详细数据:https://db-engines.com/en/ranking

MySQL 的发展史

MySQL 的历史可以追溯到1979年,它的创始人叫作Michael Widenius,他在开发一个报表工具的时候,设计了一套API,后来他的客户要求他的API支持sql语句,他直接借助于 mSQL 的代码,将它集成到自己的存储引擎中。但是他总是感觉不满意,故萌生了要自己做一套数据库的想法。图片1996 年 MySQL 1.0发布,同年 10 月 MySQL 3.11.1 发布了 Solaris 的版本,一个月后,Linux 版本发布,从那时候开始,MySQL 慢慢的被大众所接受。

1999 年,Michael Widenius 成立了 MySQL AB 公司,MySQL 由个人开发转变为团队开发,2000 年使用 GPL 协议开源。

2010 年 12 月,MySQL 5.5 发布,Oracle 也把 InnoDB 做成了 MySQL 默认的存储引擎,MySQL 从此进入了辉煌发展的时期。

2015年10月,MySQL 5.7 版本发布,它带来很多新的特性,比如:默认引擎改成了InnoDB,更新了安全策略,性能方面的提升,新增JSON数据类型,增强了sql模式及用户权限等等强大的功能。因此,这个版本自从发布之后一直受到业界的欢迎,也成为了众多开发者的首选数据库版本。

2018年4月,MySQL 8.0 正式发布。

下面我们一同回顾一下各大版本的生命周期,重温一下这些经典的版本。

MySQL 大版本生命周期

下面是各个版本的生命周期时间范围:

Release        Release Date            End of life  MySQL 8.0      April 19, 2018       MySQL 5.7      October 21, 2015       October 21, 2023  MySQL 5.6      February 5, 2013       February 5, 2021  MySQL 5.5      December 3, 2010       December 3, 2018  MySQL 5.1      November 14, 2008      December 31, 2013 MySQL 5.0                             January 9, 2012

下面是来自官方给出的一份生命周期数据:图片在 2023 年 10 月 21 日,MySQL 5.7 将达到其生命周期的终点(EOL,End of Life)。这意味着 Oracle 将不再为 MySQL 5.7 提供官方更新、错误修复或安全补丁。

因此,随着 MySQL 5.7 EOL 到来,我们升级到一个更高的新版本,这样便于得到官方更好的更新支持,应该来说是一个最简单、最直接的方案。

但是,我们是否有其他选择呢?可以寻找一个更加完美的替代方案呢?我想,还是需要去实际的生产需求出发,对于数据库来说,安全是第一要务。不能因为迁移导致数据安全事故,这就得不偿失了。

MySQL 各个版本使用占比

图片

想学习更多的MySQL数据库的知识体系可以来专栏:MySQL 打怪升级进阶成神之路(2023 最新版)!从第一篇文章开始,我们逐步详细介绍了 MySQL 数据库的基础知识,如:数据类型、存储引擎、性能优化(软、硬及sql语句),MySQL 数据库的高可用架构的部分,如:主从同步、读写分离的原理与实践、跨城容灾、数据的备份与恢复等,然后介绍了 MySQL 的管理命令、数据库语言的命令、库与表的管理工具、性能分析与工具的使用、MySQL 数据库服务器的硬件选型、性能监控、开发设计规范等知识。

升级 Or 迁移?

升级到8.0版本

上面也提到了,这是最直接、最安全、最方便的一种方案。升级之前想要了解8.0版本特性的可以参阅:MySQL 8.0 的 5 个新特性,太实用了!MySQL 从版本 5.7 开始提供了 NoSQL 存储的功能,在 8.0 中这部分功能也得到了一些改进(MySQL 5.7 vs 8.0,哪个性能更牛?)。

升级过程大概如下:

下载安装包

下载地址:https://downloads.mysql.com/archives/community/,注:如果是集群高可用架构,先升级从库。

备份数据

这是必须要做的,一定要备份数据,备份完成后一定要检查数据的完整性。

升级

建议先在测试环境进行升级版本测试,测试完成之后再进行生产环境的版本升级操作。

#下载安装包
[root@localhost] wget https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.30-1.el7.x86_64.rpm-bundle.tar
 
#解压文件
[root@localhost] tar zxvf mysql-8.0.30-el7-x86_64.tar.gz -C /usr/local/mysql8.0/
 
#更改目录属性
[root@localhost] chown -R mysql.mysql /usr/local/mysql8.0/

修改配置文件

# 编辑配置文件
[root@localhost] vim /etc/my.cnf
 
[client]
port=3306
socket=/tmp/mysql.sock
 
[mysqld]
log-bin=mysql-bin
server-id=100
character_set_server=utf8
init_connect='SET NAMES utf8'
socket=/tmp/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/run/mysqld/mysqld.pid
#不区分大小写
lower_case_table_names =1
 
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
 
max_connections=5000
default-time_zone = '+8:00'
max_allowed_packet = 32M
 
#mysql8.0
collation-server=utf8_general_ci
basedir=/usr/local/mysql8.0
datadir=/usr/local/mysql/data
skip_ssl
default_authentication_plugin=mysql_native_password

升级

#登录旧版本的数据库
[root@localhost] mysql -uroot -p'123456'
 
#查看mysql版本
mysql> select version();
+------------+
| version()  |
+------------+
| 5.7.23-log |
+------------+
1 row in set (0.00 sec)
 
mysql> show variables like 'innodb_fast_shutdown';
+----------------------+-------+
| Variable_name        | Value |
+----------------------+-------+
| innodb_fast_shutdown | 1     |
+----------------------+-------+
1 row in set (0.00 sec)
 
#确保数据都刷到硬盘上,更改成0
mysql> set global innodb_fast_shutdown=0;
Query OK, 0 rows affected (0.00 sec)
 
mysql> shutdown;
Query OK, 0 rows affected (0.00 sec)
mysql> exit;
Bye

使用安全模式启动MySQL 8.0

#启动新版本数据库
[root@localhost] /usr/local/mysql8/bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mysql &
 
#登录新版本数据库
[root@localhost] mysql -uroot -p'123456'
mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.33    |
+-----------+
1 row in set (0.00 sec)
 
mysql> exit;
Bye

配置环境变量

[root@localhost] vim /etc/profile
#增加下面的内写export PATH=$PATH:/usr/local/mysql8/bin
[root@localhost] source /etc/profile

查看客户端版本

[root@localhost] which mysql
/usr/local/mysql8/bin/mysql
[root@localhost] mysql -V
mysql  Ver 8.0.33 for Linux on x86_64 (MySQL Community Server - GPL)

升级过程中肯定会出现一些错误,遇到错误就根据提示来解决就可以。每一次的安装、升级都是一个学习进步的过程。升级完成之后,导入数据,记得修改数据库的密码。

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH MYSQL_NATIVE_PASSWORD BY 'xxxxx';

迁移

近此年来,越来越多的开发人员倾向于为他们正在开发的应用程序选择 PostgreSQL。从相关的数据来看,PostgreSQL 从 2014 年开始进入高速增长状态,而 MySQL 自 2016 年以来开始缓慢下降。

目前 PostgreSQL 可以运行在所有主流操作系统上,包括 Linux、Unix 和 Windows。所以,有不少企业会选择将 MySQL 迁移到 PostgreSQL 。

相较于 MySQL,PostgreSQL 还有一些明显的特点,比如,支持更广泛的高级数据类型,更精细的索引系统,支持用各种语言编写的存储过程,也确实能够满足绝大多数企业级应用的需求。

MySQL 与 PostgreSQL 比较,哪个更好、我们该选用哪个?可以参阅这篇之前推送过的文章。同样 PostgreSQ 也有它不适用的场景,所以,是否能够满足你的迁移需求,不能一概而论,而是要从实际的业务场景出发。

更多关于 PostgreSQL 系列的学习文章,请参阅:PostgreSQL 数据库 这个专栏。官网地址: https://www.postgresql.org

无论你最终是选择升级版本,还是寻求替代方案,我不得不再次提醒你,MySQL5.7 在 2023 年 10 月将结束支持,之后官方将不会提供任何补丁更新,为了数据安全与数据库的稳定,请提前做好预备方案。

我们也是时候和 MySQL 5.7 说再见了!!!!


民工哥
26.4k 声望56.7k 粉丝

10多年IT职场老司机的经验分享,坚持自学一路从技术小白成长为互联网企业信息技术部门的负责人。2019/2020/2021年度 思否Top Writer