假设服务器位于MySQL 5.6.1234 (是的,我知道这个数字是虚构的),并被更新为5.6.1235 (因此增加了修订/补丁编号)。将MySQL回滚到5.6.1234将有多大的安全性--数据/索引/日志/表定义/等文件是否仍能在先前的版本上工作?
我设想的场景是一个向后兼容的更改,我们需要争取时间来修复所有受其影响的网站。
这种情况发生在MySQL 5上的CentOS 5.0.x之前,原因是MySQL甚至没有将其正式标记为变更量中的向后不兼容。在MySQL 5.0.84中,他们将max_allowed_packet从能够设置为会话变量更改为会话变量,但它对只读没有任何影响,当Red将MySQL从5.0.77增加到5.0.95 (参见http://dev.mysql.com/doc/relnotes/mysql/5.0/en/news-5-0-84.html末尾的http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_最大值_允许的_封包与“噢顺便说一句”)时,我们得到了一个很好的惊喜。这个案子很容易解决,但我正在计划一个更困难的情况,并想知道我的选择。
发布于 2015-07-28 01:00:00
只要您在同一系列中处理两个GA发行版(5.6.y到5.6.x),您就应该没问题,因为这不是一个不受支持的操作。
要在同一版本系列中降低通用可用性(GA)状态版本之间的级别,通常只需在旧二进制文件的基础上安装新二进制文件,而不对数据库进行任何更改。https://dev.mysql.com/doc/refman/5.6/en/downgrading.html
或者,(我认为)比仅仅在旧版本(新版本)上复制新的(旧版本)二进制文件更好,使用我使用的机制,其中/usr/local/mysql是一个指向提取实时版本二进制文件的目录的符号链接,而data在该目录中是一个指向datadir的符号链接。
这是一种完全有效的配置,它允许两组二进制文件在同一台机器上共存。我使用"Linux泛型“二进制tarball,它将文件解压缩到以版本和OS命名的目录中.作为一个DBA,我不让发行版的包管理器接近我的MySQL。除了我,没有人决定我们什么时候升级或者运行什么版本,所以升级是在计划和测试之后进行的。
使用此设置,可以快速操作来停止服务、移动一个符号链接并启动服务,而我正在运行新版本.如果你有必要的话,也同样快地把它换回来。我仍然是这样做的,虽然我对需要后退的可能性不那么敏感。
您还需要运行mysql_upgrade来完成升级过程,但通常不必在GA到GA发布升级期间立即执行。您可以在服务器备份之后执行该操作,实际上,服务器必须在运行之后才能完成该部分。
当然,在任何升级过程中,在紧急情况下准备好重新加载数据的mysqldump是至关重要的.但是在同一个发行系列中,在GA版本中,你应该能够做到这一点.但你也不应该这么做。我记得一次最大的跳跃是5.1.34到5.1.69,没有任何副作用,在我管理的几十台机器中,我不记得有任何理由后退的5.5或5.6升级。
升级前的另一个建议是用mysqlcheck --check-upgrade --all-databases扫描整个服务器的蜘蛛网,确认这些表在结构上完全兼容正在运行的当前版本.然后是mysqlcheck --optimize --all-databases。后者(由我推荐)并不是因为它所做的事情,而是因为它可能会发现一些粗略的结构问题,这些问题可能会导致与升级相关的问题,但实际上是潜在的腐败正在等待浮出水面。优化是耗时的,在运行时会锁定每个表,然后解锁并转移到下一个表,因此可能会造成干扰,但是对于InnoDB,它也会破坏每个表,因此您可能会在此过程中回收一些磁盘空间。如果无法容忍运行时可能需要的长锁,则跳过优化。
https://dba.stackexchange.com/questions/108139
复制相似问题