MySQL5.7升级到8.0过程详解

Wesley13
• 阅读 540

前言:

不知不觉,MySQL8.0已经发布好多个GA小版本了。目前互联网上也有很多关于MySQL8.0的内容了,MySQL8.0版本基本已到稳定期,相信很多小伙伴已经在接触8.0了。本篇文章主要介绍从5.7升级到8.0版本的过程及注意事项,有想做版本升级的小伙伴可以参考下。

1.升级前准备及注意事项

首先,我们要大概了解下MySQL5.7和8.0有哪些不同,参考官方文档和其他网友文章,概括总结出MySQL8.0以下几点新特性:

  • 默认字符集由latin1变为utf8mb4。

  • MyISAM系统表全部换成InnoDB表。

  • JSON特性增强。

  • 支持不可见索引,支持直方图。

  • sql_mode参数默认值变化。

  • 默认密码策略变更。

  • 新增角色管理。

  • 支持窗口函数,支持Hash join。

根据版本变化及官方升级教程,列举出以下几点注意事项:

  • 注意字符集设置。为了避免新旧对象字符集不一致的情况,可以在配置文件将字符集和校验规则设置为旧版本的字符集和比较规则。

  • 密码认证插件变更。为了避免连接问题,可以仍采用5.7的mysql_native_password认证插件。

  • sql_mode支持问题。8.0版本sql_mode不支持NO_AUTO_CREATE_USER,要避免配置的sql_mode中带有NO_AUTO_CREATE_USER。

  • 是否需要手动升级系统表。在MySQL 8.0.16版本之前,需要手动的执行mysql_upgrade来完成该步骤的升级,在MySQL 8.0.16版本及之后是由mysqld来完成该步骤的升级。

2.具体升级过程

下面以Linux系统为例,展示下具体升级过程。我的系统是CentOS7.7,原版本是MySQL5.7.23,以In-Place方式直接升级到MySQL8.0.19。

2.1 下载解压安装包

官网下载对应版本的tar包,可通过wget下载或者本地下载后上传。

下载地址:

https://downloads.mysql.com/archives/community/

选择 

mysql-8.0.19-linux-glibc2.12-x86_64.tar.xz

MySQL5.7升级到8.0过程详解

执行以下步骤解压tar包:

# 安装包上传至原安装包目录下 我的是/usr/local/

2.2 更改配置文件my.cnf

因5.7版本与8.0版本参数有所不同,为了能顺利升级,我们需要更改部分配置参数。主要注意sql_mode、basedir、密码认证插件及字符集设置,其他参数最好还是按照原5.7的来,不需要做调整。下面展示下更改后的配置文件:

# 最后几个for8.0的参数要格外注意

2.3 执行升级程序

所有前置工作准备好后就可以开始正式升级了,不过升级前还是建议先全库备份下。万事俱备后,按照如下指示进行正式升级。

# 进入原5.7 mysql命令行 正确关闭数据库

2.4 环境变量修改

因basedir由/usr/local/mysql变成了/usr/local/mysql8,故相关环境变量推荐修改下。可按照以下步骤来操作验证:

# 修改mysql服务启动项配置

总结:

至此,我们的数据库由5.7成功升级至8.0!对比MySQL安装过程及升级过程,发现二者很相似,其实升级过程并不复杂,复杂的是升级后的验证及兼容测试,特别是对于复杂的业务库,MySQL版本升级还是要小心的。真实环境建议先升级从库,验证无误后再逐步对主库进行升级。

推荐阅读

(点击标题可跳转阅读)

超实用的索引知识介绍

Linux安装MySQL教程

MySQL8.0新特性集锦

— END —

如果你喜欢我的文章

请在文末右下角点一下在看❤********

MySQL5.7升级到8.0过程详解

本文分享自微信公众号 - MySQL技术(mysqljishu)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
1年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
小森森 小森森
4个月前
校园表白墙微信小程序V1.0 SayLove -基于微信云开发-一键快速搭建,开箱即用
后续会继续更新,敬请期待2.0全新版本欢迎添加左边的微信一起探讨!项目地址:(https://www.aliyun.com/activity/daily/bestoffer?userCodesskuuw5n)\2.Bug修复更新日历2.情侣脸功能大家不要使用了,现在阿里云的接口已经要收费了(土豪请随意),\\和注意
Wesley13 Wesley13
1年前
PHP连接MySQL 8.0报错的解决办法
MySQL升级到8.0之后,PHP连接报错怎么解决?作为资深的MySQL票友,最近我总在给8.0吹水,我们知数堂的MySQL课程去年也早就升级到8.0版本了。我的VPS老早就想升级了,无奈PHP版本太低,担心升级后有问题,所以一直没去折腾。这两天稍微得空,就开始折腾升级MySQL版本。为了解锁最香新功能,我直接升级到了最新的MySQL8.0.1
Stella981 Stella981
1年前
Linux菜鸟到老鸟的那些建议
相信很多同学对Linux(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fwww.linuxprobe.com%2Fchapter00.html)的认识并不多,平常接触的也不多,对Linux的开发运维等也是一无所知。如今,如果要做一名优秀的程序猿,掌握Linux知识已经是一门必备技能了
Wesley13 Wesley13
1年前
MySQL 8.0 技术详解
MySQL8.0简介MySQL5.7到8.0,Oracle官方跳跃了MajorVersion版本号,随之而来的就是在MySQL8.0上做了许多重大更新,在往企业级数据库的路上大步前行,全新DataDictionary设计,支持AtomicDDL,全新的版本升级策略,安全和账号管理加强,InnoD
Easter79 Easter79
1年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Stella981 Stella981
1年前
Docker(三)——应用部署(MySQL部署,Nginx部署,Redis部署)
一、MySQL部署1.拉取mysql5.7镜像dockerpullmysql:5.72.创建容器,启动mysql5.7(建议别用最新版本的mysql)dockerrunidnamemysql1p3306:3306eMYSQL_ROOT_PASSWORD123456mysql:5.7
Stella981 Stella981
1年前
ASMSupport教程4.9 生成三元运算符
<p这节我们介绍如何用ASMSupport生成三元运算符(...?...:...)运算符。我们预计生成如下代码:</p<divid"scid:9D7513F9C04C4721824A2B34F0212519:935e30cc33214e0093ba9834f3a4e044"class"wlWriterEditableS
Stella981 Stella981
1年前
Android蓝牙连接汽车OBD设备
//设备连接public class BluetoothConnect implements Runnable {    private static final UUID CONNECT_UUID  UUID.fromString("0000110100001000800000805F9B34FB");
3A网络 3A网络
4个月前
理解 virt、res、shr 之间的关系(linux 系统篇)
理解virt、res、shr之间的关系(linux系统篇)前言想必在linux上写过程序的同学都有分析进程占用多少内存的经历,或者被问到这样的问题——你的程序在运行时占用了多少内存(物理内存)?通常我们可以通过t
3A网络 3A网络
4个月前
开发一个不需要重写成 Hive QL 的大数据 SQL 引擎
开发一个不需要重写成HiveQL的大数据SQL引擎学习大数据技术的核心原理,掌握一些高效的思考和思维方式,构建自己的技术知识体系。明白了原理,有时甚至不需要学习,顺着原理就可以推导出各种实现细节。各种知识表象看杂乱无章,若只是学习