MySQL8.0版本升级建议及各类场景的操作方法

本文提供了MySQL8.0版本升级的原则和建议,包括仅支持GA版本间的升级,不支持跨大版本升级,以及升级前应先升级到当前版本的小版本。此外,介绍了8.0版本的变化,如数据字典、Authentication Plugin、Configuration Changes等,并强调了升级前的检查工作和升级过程中的操作,包括in-place和logical升级方法。最后提到了Linux系统上升级MySQL的两种方式及其步骤。
摘要由CSDN通过智能技术生成

点击上方"蓝字"

关注我们,享更多干货!

01

升级版本选择原则和建议

MySQL的升级需要遵循以下几条原则和建议:

  • 支持从MySQL5.7升级到8.0,注意仅支持GA版本之间的升级。

  • 不支持跨大版本的升级,如从5.6升级到8.0是不支持的。

  • 建议升级大版本前先升级到当前版本的最近小版本,如5.7先升级到5.7.35后再升级到8.0。

  • 在大版本内部GA的小版本可以直接升级,如从8.0.9直接升级到8.0.26。

02

MySQL8.0的一些变化

在升级到8.0之前需要充分考虑版本变化带来的使用兼容性的问题,其中不兼容的部分需要特别关注,建议升级大版本前做充分的测试。下面简单介绍下MySQL8.0的部分变化。

  • 数据字典

不同于之前的版本将字典数据存储在元数据文件和非事务系统表中,MySQL8.0将包含数据库对象的全局数据字典存储在事务表中。在使用上如果设置了innodb_read_only 参数会导致所有表的创建、删除、analyze、修改表引擎操作无法执行。CREATE TABLE dst_tbl LIKE src_tbl 要求src_tbl必须是base table。mysqldump和mysqlpump不会导出information_schema,不会导出MySQL Schema中数据字典表,需导出存储过程和事件需指定–routines和--events选项,并且用户需要全局selet权限。

  • Authentication Plugin

MySQL8.0将默认身份验证插件从mysql_native_password变更为caching_sha2_password,客户端需要验证现有版本是否支持。

  • Configuration Changes

  • MySQL8.0开始只有InnoDB和NDB引擎支持分区表,升级前需确保不存在非InnoDB引擎的分区表。

  • 部分error code被启用,详见https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html#mysql-nutshell-removals

  • 默认字符集从latin1变更为utf8mb4,默认排序规则为utf8mb4_0900_ai_ci。注意这可能会导致新旧数据库对象的字符集不一致,造成隐式类型转换的问题。

  • 8.0.11版本开始,如使用与初始化配置不同的lower_case_table_names值启动数据库时会报错。

[ERROR] [MY-011087] [Server] Different lower_case_table_names settings for server ('0') and data dictionary ('1').
[ERROR] [MY-010020] [Server] Data Dictionary initialization failed.
[ERROR] [MY-010119] [Server] Aborting

Server Changes

  • 8.0.11开始部分账户管理功能被删除,如Grant命令修改用户非权限特性,NO_AUTO_CREATE_USER模式,PASSWORD() 函数和 old_passwords 系统变量。

  • 8.0.11开始删除了部分兼容 SQL 模式:DB2、MAXDB、MSSQL、MYSQL323、MYSQL40、ORACLE、POSTGRESQL、NO_FIELD_OPTIONS、NO_KEY_OPTIONS、NO_TABLE_OPTIONS。

  • 从 MySQL 8.0.3 开始,空间数据类型允许 SRID 属性,以明确指示存储在列中的值的空间参考系统 (SRS)。并删除了部分非ST_前缀的空间函数。详见https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html#mysql-nutshell-removals在线切换binlog format增加了更多限制。

  • InnoDB Changes

    • information_Schema中,innodb_sys_% 改名为 innodb_%

    • zlib库版本从1.2.3升级到1.2.11。

    • 只读变量innodb_directories应该包含file-per-table和绝对路径创建的通用表空间文件的路径。

    • undo日志从系统表空间移出。默认会在innodb_undo_directory指定位置(未指定则在data dir)创建两个undo表空间。从5.7升级到8.0时innodb-fast-shutdown需设置成0。

    • 8.0.17开始在创建表空间时,路径不允许含 circular directory reference(/../);升级前可以查询INFORMATION_SCHEMA.INNODB_DATAFILES表检查表空间路径。

      mysql> CREATE TABLESPACE ts11 ADD DATAFILE  '/data/mysql/log/test/../ts11.ibd';    
      ERROR 3121 (HY000): The ADD DATAFILE filepath cannot contain circular directory references.
      mysql> CREATE TABLESPACE ts11 ADD DATAFILE  '/data/mysql/log/ts11.ibd';        
      Query OK, 0 rows affected (10.02 sec)
  • SQL change

    • group by 不再支持DESC和ASC,GROUP BY {col_name | expr | position}, ... [WITH ROLLUP]]

    • 保留字变更。https://dev.mysql.com/doc/refman/8.0/en/keywords.html

    • 升级后建议测试optimizer hints,在8.0中部分hint可能不再适用。

  • 部分默认配置的变化。

03

升级过程包含哪些操作

升级MySQL时需要对现版本MySQL中的数据字典和元数据等进行更新。在MySQL Schema中需更新数据字典表和系统表,在其他Schema中需要更新一些内置的MySQL持有的表,如performance_Schema、information_schema和sys schema等。

升级过程大致分为两个部分,升级数据字典和升级服务。

  • 升级数据字典包括升级MySQL Schema中的数据字典表,以及performance schema,information_schema。升级数据字典表时,如当前版本低于期望版本,则服务器将创建新版本的数据字典表并将持久化的元数据拷贝到新表,在新旧表做原子性替换后重新初始化数据字典。服务器启动后会按需执行,可以使用 --upgrade=NONE(8.0.16以后)或–

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值