匿名
未登录
登录
Linux78|wiki
搜索
查看“MySQL 升级”的源代码
来自Linux78|wiki
名字空间
页面
讨论
更多
更多
页面选项
查看
查看源代码
历史
←
MySQL 升级
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
wiki:用户|用户
您可以查看与复制此页面的源代码。
=== 升级方法 === MySQL推荐两种升级方式:就地升级和逻辑升级。 就地升级需要关闭旧版本的MySQL,替换当前的二进制文件或包,然后在现有的数据目录上重启MySQL,并运行mysql_upgrade。 逻辑升级需要使用备份或导出语句从旧版本的MySQL中导出SQL语句,然后安装新版本,在新版本的基础上执行导出的SQL语句。 使用旧版本导出的SQL语句在新版本中可能会报错,所以请预先使用checkForServerUpgrade脚本进行检查,使逻辑升级能够顺利进行。 === 升级路线 === MySQL支持从5.7版本升级到8.0,仅限于正式发行版,即GA版。 MySQL支持逐级升级,不可跳级。例如,要想升级到MySQL 8,必须先升级到5.7版本,5.6版本无法直接升级到8版本。 一旦发行系列到达稳定版状态,正式发行版之间可以直接进行升级。例如,MySQL 8.0.x可升级至8.0.y,也可升级至8.0.z。 MySQL 8.0.11是MySQL 8.0发行系列的第一个正式发行版本。 === 升级前的准备 === 首先需要备份当前数据库和日志文件。备份内容应包含mysql系统数据库,涵盖MySQL数据字典表和系统表。 MySQL 8包含一个全局数据字典。在之前的MySQL版本中,字典数据存储在元数据文件和非事务的系统表中。将MySQL 5.7升级到8时,需将数据目录从基于文件的结构升级到基于数据字典的结构。 升级前需检查版本之间的兼容问题,重点检查新特性、过时或废弃特性以及一些影响应用的改变,在升级前后及时处理以确保应用正常运行。 === 验证MySQL 5.7升级到8前的先决条件 === (1)确保没有使用过时的数据类型、函数和单独的frm文件的数据库表、非本地分区的InnoDB引擎表以及没有定义的触发器。检查命令如下: mysqlcheck -u root -p --all-databases --check-upgrade (2)确保已分区的数据库表使用的存储引擎都支持本地分区。检查命令如下: SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES FROM INFORMATION_SCHEMA.TABLES WHERE ENGINE NOT IN ('innodb', 'ndbcluster') AND CREATE_OPTIONS LIKE '%partitioned%'; 上述语句中查询出的数据库表可通过两种方式进行修正,将存储引擎改为InnoDB或移除表的分区。命令如下: #设置表的存储引擎为InnoDB ALTER TABLE table_name ENGINE = INNODB; #移除表分区 ALTER TABLE tablename REMOVE PARTITIONING; (3)确保MySQL 5.7版本中mysql系统数据库中的表名与MySQL 8数据字典的表名不重复。检查命令如下: SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE LOWER(TABLE_SCHEMA) = 'mysql' and LOWER(TABLE_NAME) IN ( 'catalogs', 'character_sets', 'collations', 'column_statistics', 'column_type_elements', 'columns', 'dd_properties', 'events', 'foreign_key_column_usage', 'foreign_keys', 'index_column_usage', 'index_partitions', 'index_stats', 'indexes', indexes', 'parameter_type_elements', 'parameters', 'resource_groups', 'routines', 'schemata', 'st_spatial_reference_systems', 'table_partition_values', 'table_partitions', 'table_stats', 'tables', 'tablespace_files', 'tablespaces', 'triggers', 'view_routine_usage', 'view_table_usage' ); (4)确保外键限制名称均不超过64个字符。检查命令如下: (5)确保数据库表或程序使用单独的枚举或设置列元素的长度不超过255个字符或1020个字节。 (6)确保本地的MySQL 5.7版本中未使用在MySQL 8中已不再提供支持的特性。 === 就地升级 === (1)参考第三条中升级前的准备,做好准备工作。 (2)关闭MySQL 5.7服务。 (3)替换二进制文件或安装包。 (4)启动MySQL 8服务,使用现有的数据目录,参考命令如下: mysqld_safe --user=mysql --datadir=/path/to/existing-datadir (5)MySQL 8.0服务启动成功之后,运行如下命令: mysql_upgrade -u root -p 这个命令可以检查当前数据库中所有不兼容的表。 (6)关闭并重启服务,确保所有更改已生效。参考命令如下: mysqladmin -u root -p shutdown mysqldsafe --user=mysql --datadir=/path/to/existing-datadir === 升级问题 === (1)在MySQL 5.7中,frm表文件和InnoDB数据字典模式不匹配会导致升级失败。 (2)如果出现mysqld服务无法启动的情况,检查是否存在旧的配置文件。 (3)如果升级后客户端程序编译报错,检查一下是否使用了旧的头文件或库文件。 (4)如果升级后自定义函数名称与新版本的函数名称重复,那么自定义函数将无法被使用,需要使用DROP FUNCTION命令移除函数后再使用CREATE FUNCTION命令重新创建不重名的函数。
返回至
MySQL 升级
。
导航
导航
首页
最近更改
随机页面
栏目
Nginx
Kubernetes
Spring Cloud
Wiki工具
Wiki工具
特殊页面
页面工具
页面工具
用户页面工具
更多
链入页面
相关更改
页面信息
页面日志