赞
踩
点击上方"蓝字"
关注我们,享更多干货!
01
升级版本选择原则和建议
支持从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以后)或–
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。