降级MySQL(参考MySQL官方文档)

介绍降级MySQL安装的步骤。

降级比升级更不常见。降级通常是由于生产系统上发生兼容性或性能问题而执行,并且在测试系统的初始升级验证期间没有发现。

与升级过程一样,在生产系统上使用降级过程之前,请先在某些测试系统上执行并验证它。

注意

在下面的讨论中,必须使用具有管理权限的MySQL帐户运行的MySQL命令,在命令行中包含-u root以指定MySQL root用户。需要root用户密码的命令还包括-p选项。

可以使用mysql命令行(connect as root)执行SQL语句以确保您拥有必要的权限)。

一、开始之前

•通过备份保护数据。备份应该包括mysql数据库,其中包含mysql系统表。

注意

以下各节中描述的降级过程假设正在使用由较新MySQL版本创建或修改的数据文件进行降级。但是,如果升级后没有修改数据,建议使用升级到新MySQL版本之前所做的备份来降级。

二、降级路径

•只有在一般可用性(GA)版本之间才支持降级。

•使用逻辑降级方法支持从MySQL 5.7降级到5.6。

•不支持跳过版本的降级。例如,直接从MySQL 5.7降级到5.5。

•支持在发布系列中降级。例如,支持从MySQL 5.7.z降级到5.7.y。还支持跳过发布。例如,支持将MySQL 5.7.z降级为5.7.x。

三、降级注意

在从MySQL 5.7降级之前,请查看本节中的信息。有些项目可能需要在降级前采取行动。

1> 系统表更改

•在MySQL 5.7.13中,存储user@host字符串值的系统表列的长度增加了。在降级到以前的版本之前,请确保没有超过以前77个字符长度限制的user@host值,并执行以下mysql系统表更改:

1 ALTER TABLE mysql.proc MODIFY definer char(77) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '';

2 ALTER TABLE mysql.event MODIFY definer char(77) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '';

3 ALTER TABLE mysql.tables_priv MODIFY Grantor char(77) COLLATE utf8_bin NOT NULL DEFAULT '';

4 ALTER TABLE mysql.procs_priv MODIFY Grantor char(77) COLLATE utf8_bin NOT NULL DEFAULT '';

•在MySQL 5.7.8中,MySQL用户名的最大长度从16个字符增加到32个字符。在降级到以前的版本之前,请确保用户名的长度不超过16个字符,并执行以下mysql系统表更改:

1 ALTER TABLE mysql.tables_priv MODIFY User char(16) NOT NULL default '';

2 ALTER TABLE mysql.columns_priv MODIFY User char(16) NOT NULL default '';

3 ALTER TABLE mysql.user MODIFY User char(16) NOT NULL default '';

4 ALTER TABLE mysql.db MODIFY User char(16) NOT NULL default '';

5 ALTER TABLE mysql.procs_priv MODIFY User char(16) binary DEFAULT '' NOT NULL;

•mysql 5.7.6中删除了mysql.user系统表的Password列。所有凭据都存储在“身份验证字符串”列中,包括以前存储在“密码”列中的凭据。要使mysql.user表与早期版本兼容,请在降级之前执行以下更改:

1 ALTER TABLE mysql.user ADD Password char(41) character set latin1

2 collate latin1_bin NOT NULL default '' AFTER user;

3 UPDATE mysql.user SET password = authentication_string WHERE

4 LENGTH(authentication_string) = 41 AND plugin = 'mysql_native_password';

5 UPDATE mysql.user SET authentication_string = '' WHERE

6 LENGTH(authentication_string) = 41 AND plugin = 'mysql_native_password';

•在MySQL 5.7.5中,帮助表和时区表从MyISAM更改为InnoDB。在降级到以前的版本之前,请通过运行以下语句将每个受影响的表更改回MyISAM:

1 ALTER TABLE mysql.help_category ENGINE='MyISAM' STATS_PERSISTENT=DEFAULT;

2 ALTER TABLE mysql.help_keyword ENGINE='MyISAM' STATS_PERSISTENT=DEFAULT;

3 ALTER TABLE mysql.help_relation ENGINE='MyISAM' STATS_PERSISTENT=DEFAULT;

4 ALTER TABLE mysql.help_topic ENGINE='MyISAM' STATS_PERSISTENT=DEFAULT;

5 ALTER TABLE mysql.time_zone ENGINE='MyISAM' STATS_PERSISTENT=DEFAULT;

6 ALTER TABLE mysql.time_zone_leap_second ENGINE='MyISAM' STATS_PERSISTENT=DEFAULT;

7 ALTER TABLE mysql.time_zone_name ENGINE='MyISAM' STATS_PERSISTENT=DEFAULT;

8 ALTER TABLE mysql.time_zone_transition ENGINE='MyISAM' STATS_PERSISTENT=DEFAULT;

9 ALTER TABLE mysql.time_zone_transition_type ENGINE='MyISAM' STATS_PERSISTENT=DEFAULT;

•在MySQL 5.7.6中,plugin和servers系统表从MyISAM更改为InnoDB。在降级到以前的版本之前,请通过运行以下语句将每个受影响的表更改回MyISAM:

1 ALTER TABLE mysql.plugin ENGINE='MyISAM' STATS_PERSISTENT=DEFAULT;

2 ALTER TABLE mysql.servers ENGINE='MyISAM' STATS_PERSISTENT=DEFAULT;

•mysql.user系统表中plugin列的定义在mysql 5.7中有所不同。在降级到5.6.23及更高版本的MySQL 5.6服务器之前,请使用以下语句更改插件列定义:

1 ALTER TABLE mysql.user MODIFY plugin CHAR(64) COLLATE utf8_bin DEFAULT 'mysql_native_password';

在降级到MySQL 5.6.22服务器或更低版本之前,请使用以下语句更改插件列定义:

1 ALTER TABLE mysql.user MODIFY plugin CHAR(64) COLLATE utf8_bin DEFAULT '';

•从MySQL 5.7.7开始,sys模式默认在数据目录安装期间安装。在降级到以前的版本之前,建议您删除sys架构:

1 DROP DATABASE sys;

如果要降级到包含sys架构的版本,mysql_upgrade将重新创建sys兼容格式的架构。MySQL 5.6中不包含sys模式。

2> InnoDB变更

•从MySQL 5.7.5开始,FIL_PAGE_FLUSH_LSN字段写入每个InnoDB系统表空间文件的第一页和InnoDB undo表空间文件,只写入InnoDB系统表空间的第一个文件(页码0:0)。

因此,如果您有一个多文件系统表空间并决定要从MySQL 5.7降级到MySQL 5.6,在MySQL 5.6启动时可能会遇到一条无效消息,指出ibdata文件中的日志序列号x和y与ibu日志文件中的日志序列号y不匹配。

如果遇到此消息,请重新启动MySQL 5.6。无效消息不再出现。

•为了在崩溃恢复期间简化InnoDB表空间,MySQL 5.7.5引入了新的重做日志记录类型。此增强更改重做日志格式。从MySQL 5.7.5或更高版本执行in-place降级,使用innodb_fast_shutdown设置0或1执行完全关闭。

使用innodb_fast_shutdown=0缓慢关机是建议的in-place降级步骤。

•MySQL 5.7.8和5.7.9撤消日志可能包含有关空间列的信息不足(错误21508582)。在执行从MySQL 5.7.10或更高版本到MySQL 5.7.9或更早版本的in-place降级之前,使用innodb_fast_shutdown=0来清除撤消日志,

执行一个缓慢的关闭。使用innodb_fast_shutdown=0缓慢关机是建议的in-place降级步骤。

•MySQL 5.7.8撤消日志可能包含有关虚拟列和虚拟列索引的信息不足(错误21869656)。在执行从MySQL 5.7.9或更高版本到MySQL 5.7.8或更早版本的in-place降级之前,使用innodb_fast_shutdown=0来清除撤消日志,

执行一次慢速关闭。使用innodb_fast_shutdown=0缓慢关机是建议的in-place降级步骤。

•从MySQL 5.7.9开始,第一个重做日志文件(ib_logfile0)的重做日志头包含一个格式版本标识符和一个文本字符串,用于标识创建重做日志文件的MySQL版本。此增强更改重做日志格式。

为了防止旧版本的MySQL在MySQL 5.7.9或更高版本中创建的重做日志文件上启动,已更改重做日志检查点页面的校验和。因此,在执行就地降级之前,必须执行MySQL的慢速关闭(使用innodb_fast_shutdown=0),

并删除重做日志文件(ib_logfile*文件)。建议使用innodb_fast_shutdown=0缓慢关机并删除重做日志文件,以执行in-place降级。

3> 记录更改

•在MySQL 5.7.5及更高版本中,对将服务器错误日志发送到syslog的支持与旧版本不同。如果使用syslog并降级到早于5.7.5的版本,则必须停止使用相关的mysqld系统变量,

而是使用相应的mysqld_safe命令选项。假设通过在选项文件的[mysqld]组中设置这些系统变量来使用syslog:

要降级,请删除这些设置并在[mysqld_safe]选项文件组中添加选项设置:

降级后不能使用没有相应mysqld_safe选项的syslog相关系统变量。

4> SQL更改

•触发器可以具有触发器事件(INSERT、UPDATE、DELETE)和操作时间(BEFORE、AFTER)的不同组合,但MySQL 5.7.2之前不能有多个触发器具有相同的触发器事件和操作时间。

MySQL 5.7.2解除了这个限制,允许使用多个触发器。这一变化意味着降级。

•如果将支持多个触发器的服务器降级到不支持多个触发器的旧版本,则降级会产生以下效果:对于每个具有触发器的表,所有触发器定义都保留在该表的.TRG文件中。

但是,如果有多个触发器具有相同的触发器事件和操作时间,则服务器在触发器事件发生时仅执行其中一个触发器。

•如果在降级之后添加或删除了表的触发器,服务器将重写表的.TRG文件。重写后的文件在触发器事件和动作时间的组合中只保留一个触发器。

要避免这些问题,请在降级之前修改触发器。对于每个触发器事件和操作时间组合具有多个触发器的表,请按如下所示将每个这样的触发器集转换为单个触发器:

1.对于每个触发器,创建一个包含触发器中所有代码的存储过程。使用NEW和OLD访问的值可以使用参数传递给例程。如果触发器需要来自代码的单个结果值,则可以将代码放入存储的函数中,并让函数返回该值。

如果触发器需要来自代码的多个结果值,则可以将代码放入存储过程并使用OUT参数返回值。

2.删除表的所有触发器。

3.为调用刚创建的存储例程的表创建一个新触发器。此触发器的效果与它替换的多个触发器的效果相同。

四、在Unix/Linux上降级基于二进制和包的安装的MySQL

本节介绍如何在Unix/Linux上降级MySQL二进制和基于包的安装。描述了in-place和逻辑降级方法。

1> In-Place Downgrade

in-place降级涉及关闭新的MySQL版本,用旧的MySQL二进制文件或包替换旧的MySQL版本,并在现有的数据目录上重新启动旧的MySQL版本。

对于同一发布系列内的GA发布之间的降级,支持就地降级。MySQL APT、SLES和Yum存储库安装不支持就地降级。

注意

对于某些Linux平台,从RPM或Debian软件包安装MySQL包括用于管理MySQL服务器启动和关闭的systemd支持。在这些平台上,未安装mysqld_safe。

在这种情况下,请使用systemd来启动和关闭服务器,而不要使用以下说明中使用的方法。

执行in-place降级:

1.复习“开始前”中的信息。

2.如果在InnoDB中使用XA事务,在降级之前运行XA RECOVER以检查未提交的XA事务。如果返回结果,则通过发出XA commit或XA rollback语句来提交或回滚XA事务。

3.通过将innodb_fast_shutdown设置为0,将MySQL配置为执行慢速关闭。例如:

1 mysql -u root -p --execute="SET GLOBAL innodb_fast_shutdown=0"

在缓慢关闭的情况下,InnoDB会在关闭之前执行完全清除和更改缓冲区合并,以确保数据文件在不同版本之间的文件格式差异时完全准备好。

4.关闭更新的MySQL服务器。例如:

1 mysqladmin -u root -p shutdown

5.在缓慢关闭之后,从数据目录中删除InnoDB重做日志文件(ib_log file*文件),以避免与重做日志文件格式更改相关的降级问题,这些更改可能在两个版本之间发生。

rm ib_logfile*

6.通过将较新的二进制文件或包替换为较旧的二进制文件或包,将MySQL二进制文件或包降级。

7.使用旧的数据目录启动旧的(降级的)MySQL服务器。例如:

1 mysqld_safe --user=mysql --datadir=/path/to/existing-datadir

8.运行mysql_升级。例如:

1 mysql_upgrade -u root -p

mysql_upgrade检查所有数据库中的所有表是否与当前版本的mysql不兼容,如果发现问题,将尝试修复这些表。

9.关闭并重新启动MySQL服务器,以确保对系统表所做的任何更改生效。例如:

1 mysqladmin -u root -p shutdown

2 mysqld_safe --user=mysql --datadir=/path/to/existing-datadir

2> 逻辑降级

逻辑降级包括使用MySQL dump转储新MySQL版本中的所有表,然后将转储文件加载到旧MySQL版本中。

对于同一版本系列内的不同版本之间的降级以及降级到以前的版本级别,都支持逻辑降级。仅支持在一般可用性(GA)版本之间降级。

注意

对于某些Linux平台,从RPM或Debian软件包安装MySQL包括用于管理MySQL服务器启动和关闭的systemd支持。在这些平台上,未安装mysqld_safe。在这种情况下,请使用systemd来启动和关闭服务器,

执行逻辑降级:

1.复习“开始前”中的信息。

2.转储所有数据库。例如:

1 mysqldump -u root -p

2 --add-drop-table --routines --events

3 --all-databases --force > data-for-downgrade.sql

3.关闭更新的MySQL服务器。例如:

1 mysqladmin -u root -p shutdown

4.要初始化MySQL 5.7实例,请使用mysqld和--initialize或--initialize-insecure选项。

1 mysqld --initialize --user=mysql

5.使用新的数据目录启动旧的MySQL服务器。例如:

1 mysqld_safe --user=mysql --datadir=/path/to/new-datadir

6.将转储文件加载到旧的MySQL服务器中。例如:

1 mysql -u root -p --force < data-for-upgrade.sql

7.运行mysql_升级。例如:

1 mysql_upgrade -u root -p

mysql_upgrade检查所有数据库中的所有表是否与当前版本的mysql不兼容,如果发现问题,将尝试修复这些表。

8.关闭并重新启动MySQL服务器,以确保对系统表所做的任何更改生效。例如:

1 mysqladmin -u root -p shutdown

2 mysqld_safe --user=mysql --datadir=/path/to/new-datadir

五、降级故障排除

如果从一个版本系列降级到另一个版本系列,则表存储格式中可能存在不兼容。在这种情况下,使用mysqldump在降级之前转储表。

降级后,使用mysql或mysqlimport重新加载转储文件以重新创建表。

降级时向下不兼容表格式更改的典型症状是无法打开表。在这种情况下,使用以下步骤:

1.停止降级到的旧MySQL服务器。

2.重新启动要降级的新MySQL服务器。

3.通过使用mysqldump创建转储文件,转储旧服务器无法访问的任何表。

4.停止较新的MySQL服务器并重新启动较旧的服务器。

5.将转储文件重新加载到较旧的服务器中。

mysql如何降级_降级MySQL(参考MySQL官方文档)相关推荐

  1. mysql 标识符规则_MySQL 标识符到底区分大小写么——官方文档告诉你

    最近在阿里云服务器上部署一个自己写的小 demo 时遇到一点问题,查看 Tomcat 日志后定位到问题出现在与数据库服务器交互的地方,执行 SQL 语句时会返回 指定列.指定名 不存在的错误.多方查证 ...

  2. 文件标识符必须为双精度类型的整数值标量_【翻译】VTK官方文档 - vtk文件格式

    本文翻译自vtk官方文档:vtk_file_format 文末有链接 VTK提供了许多源对象和编写器对象,用于读取和写入流行的数据文件格式,此外,VTK也提供了自己的文件格式.创建一种数据文件格式的主 ...

  3. pywin32官方说明文档_为什么你应该看官方文档而不是搜索博客文章

    摄影:产品经理寿喜锅 很多人在学习一门新技术的时候,不去看官方文档,而是喜欢直接在网上搜索别人的教程.如果运气不好搜索到了CSDN上面的装逼货辣鸡文章,那么你的学习生涯可能就此终止.即使搜索到写得很详 ...

  4. 计算机网络:自顶向下 第一章 课后习题参考答案(官方文档中文解析)

    前言 对于知识点的掌握不能仅仅是知晓,能够加以应用才能熟练掌握,计算机网络:自顶向下这本书中为读者提供了合适的习题来帮助我们练习.接下来我将和大家一起解读官方答案文档(英文),并给出我所理解的中文翻译 ...

  5. Sass快速入门笔记(将主要知识点截取出来,参考官方文档和一些网络教学视频)

    文章目录 一.安装Sass(全部参考Sass官方文档) 1.windows需先安装`RuBy`,`Mac`系统自带`RuBy`无需安装 2.Sass安装 二.编译css文件 1.单个文件编译(命令行) ...

  6. tensorflow官方文档_开源分享:最好的TensorFlow入门教程

    如果一门技术的学习曲线过于陡峭,那么我们在入门时的场景往往是,一鼓作气,没入门,再而衰,三而竭.演绎一出从入门到放弃的败走麦城. 今天发现一个入门TensorFlow的宝藏,迫不及待的分享给大家.这个 ...

  7. 写最好的Docker安装最新版MySQL8(mysql-8.0.31)教程(参考Docker Hub和MySQL官方文档)

    一.前言   MySQL官方安装包下载地址:   https://dev.mysql.com/downloads/mysql/     Docker Hub官方网址:   https://hub.do ...

  8. mysql人像伴随模型_还不了解MySQL跨行事务模型吗?看完这篇你也就差不多了!...

    导读 说来和MySQL倒是有缘,毕业的第一份工作就被分配到了RDS团队,主要负责把MySQL弄到云上做成数据库服务.虽说整天和MySQL打交道,但说实话那段时间并没有很深入的理解MySQL内核,做的事 ...

  9. mysql中括号_手把手教你看MySQL官方文档

    前言: 在学习和使用MySQL的过程中,难免会遇到各种问题.不知道当你遇到相关问题时会怎么做,我在工作或写文章的过程中,遇到不懂或需要求证的问题时通常会去查阅官方文档.慢慢的,阅读文档也有了一些经验, ...

最新文章

  1. 科学家发现第三种磁性:或是量子计算又一突破
  2. android动态监听事件,Android-常见的事件监听
  3. Java操作Hbase进行建表、删表以及对数据进行增删改查,条件查询
  4. php java 架构_JAVA和PHP到底谁才是老大?
  5. 使用mybatis出现异常:invalid comparison: java.time.LocalDateTime and java.lang.String
  6. 【WebRTC---入门篇】(十九)TURN协议
  7. HDU1069 最长上升子序列
  8. hcl启动设备失败_英林储罐清洗设备清洗公司2021收费
  9. 马斯克火箭 SpaceX-API、程序员优雅赚钱项目……GitHub 热点速览
  10. 实用 —— PowerCLI (二)
  11. 什么是 CNC?什么是电脑锣?学 CNC主要学什么?
  12. maven配置smartupload_用jspsmartupload实现Jsp多文件上传下载,并解...
  13. 计算日期在当月是第几周-【自然周(每月第一个周一为该月第一周)做法以及1号为第一周做法】
  14. python关于二手房的课程论文_python爬取链家二手房信息
  15. 徐波 博士 计算机,中文问答系统中问题分类技术研究
  16. 【NCC】NCC 附件管理按钮开发,从ftp下载附件到文件服务器开发笔记
  17. 渗透中超全的Google hack语法
  18. 南方电网电费充值源码文档
  19. 开发webgl应用时,cesium快速定位相机角度、相机位置的方法
  20. Eolink 10月企业与产品动态速览

热门文章

  1. html距离某天过去的过久,很久很久之后的某天,我真的放下了!
  2. C#深入学习--委托
  3. 蓝桥杯 提高题 母牛的故事
  4. 云流量成为数据中心的王者 五年内全球超大规模IDC将不断出现
  5. linux修改SSH密码的方法
  6. git reset中hard与soft区别
  7. 内存动态分配和垃圾收集技术所围成的“高墙
  8. Stata:时间序列中的格兰杰因果检验
  9. 2022国际数维杯C题题解:利用大脑结构特征和认知行为特征诊断阿尔茨海默病
  10. kaggle练习-泰坦尼克数据