MySQL5.7升级到8.0过程详解

Wesley13
• 阅读 992

前言:

不知不觉,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
3年前
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
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Wesley13 Wesley13
3年前
PHP连接MySQL 8.0报错的解决办法
MySQL升级到8.0之后,PHP连接报错怎么解决?作为资深的MySQL票友,最近我总在给8.0吹水,我们知数堂的MySQL课程去年也早就升级到8.0版本了。我的VPS老早就想升级了,无奈PHP版本太低,担心升级后有问题,所以一直没去折腾。这两天稍微得空,就开始折腾升级MySQL版本。为了解锁最香新功能,我直接升级到了最新的MySQL8.0.1
Wesley13 Wesley13
3年前
MySQL 8.0来了,逆之者亡...
MySQL8.0它lei了,大势浩浩荡荡,谁也挡不住MySQL被Sun收购后,搞了个过渡的6.0版本,没多久就下线了(有一次居然听说有人在线上用6.0版本,我惊得下巴都掉了)。被Oracle收购后,终于迎来了像样的5.6版本,之后就是5.7、8.0版本。这么看来,Sun的衰亡不无道理。P.S,上面说了6.0版本号已被用过,7.x系
Wesley13 Wesley13
3年前
MySQL 8.0 技术详解
MySQL8.0简介MySQL5.7到8.0,Oracle官方跳跃了MajorVersion版本号,随之而来的就是在MySQL8.0上做了许多重大更新,在往企业级数据库的路上大步前行,全新DataDictionary设计,支持AtomicDDL,全新的版本升级策略,安全和账号管理加强,InnoD
Wesley13 Wesley13
3年前
MySQL 8.0 以上版本重置 root 用户密码
MySQL8.0以上版本重置root用户密码1.在/etc/my.cnf文件末尾追加skipgranttablesroot@abdefgmysqlvim/etc/my.cnfmysql
Wesley13 Wesley13
3年前
MySQL的各种JOIN
主题:MySQL的各种JOIN大纲:1、徐老师从事多年官方MySQL工作,为众多企业提供MySQL帮助时,企业比较关心的问题是什么呢?2、随着MySQL8.0的成熟和推广,相信越来越多的公司希望升级MySQL8.0,但又会担心低版本到高版本的升级会不会有兼容问题,徐老师能否分享下相关经验?3、徐
Stella981 Stella981
3年前
Android蓝牙连接汽车OBD设备
//设备连接public class BluetoothConnect implements Runnable {    private static final UUID CONNECT_UUID  UUID.fromString("0000110100001000800000805F9B34FB");
Easter79 Easter79
3年前
The complete list of new features in MySQL 8.0
截止目前最完整的MySQL8.0新特性列表。原文出处:https://mysqlserverteam.com/thecompletelistofnewfeaturesinmysql80/Thereareover300newfeaturesinMySQL8.0.TheMySQLManualis
MySQL 执行计划详解 | 京东物流技术团队
本文从EXPLAIN分析SQL的执行计划开始,进行示例展示,并对输出结果进行解读,同时总结了EXPLAIN可产生额外的扩展信息以及EXPLAIN的估计查询性能,整篇文章基于MySQL8.0编写,理论支持MySQL5.0及更高版本。