当前位置: 首页 > 编程日记 > 正文

成为MySQL DBA 博客系列-数据库升级

数据库供应商通常每个月都会发布一些有bug /安全性修补程序的补丁,我们为什么要关心?新的版本可能对关于安全漏洞和黑客入侵系统的修复,所以除非安全性不被关注,否则您可能希望在您的系统上安装最新的安全修补程序。其中MySQL主要版本比较少见,通常是次版本升级。但是他们可能会带来一些重要的功能,使升级更值得付出。

在这篇博文中,我们将介绍DBA的一个最基本的任务 - 次要版本数据库升级和主要数据库升级

MySQL升级

有二个版本MySQL官方已经不在关注和修复,是因为在oracle收购MySQL之前的发行版本。它发生在2013年12月4日的MySQL 5.1以及2012年1月9日的MySQL5.0之前。在GA发布8年后的2018年,MySQL 5.5也会发生这种情况。这意味着对于MySQL 5.0和MySQL 5.1,用户不能依靠官方的修复 - 即使是严重的安全漏洞。这通常是您真正需要计划将MySQL升级到更新版本的一点。

友情建议 推荐使用MySQL5.6最新 或者 MySQL5.7.20之后的版本。叶师傅的朋友圈已经有说关于MySQL5.7.20之前的bug。

但是,您不会只处理主要的版本升级,而是在工作中更经常地升级到次要版本,例如5.6.x - > 5.6.y. 最有可能的是,最新版本会为影响工作负载的错误带来一些修复,但也可能是其他原因。
在执行主版本和次版本升级方式方面存在显着差异。

友情建议 关于版本子版本升级 尤其是成熟的版本,大多数是对bug的修复。可以根据发行说明来判断是否要升级。不过不建议使用子版本低于20

准备工作

在您考虑执行升级之前,您需要决定需要进行哪种测试。理想情况下,您有一个测试/开发环境,可以为常规版本进行测试。如果是这样的话,进行升级前测试的最好方法就是使用新的MySQL版本来构建临时环境的数据库层。一旦完成,您可以继续进行一组常规测试。更多更好 - 你不仅要关注“xx功能/xxbug”方面,还要关注性能。

在数据库方面,你也可以做一些通用的测试。为此,您需要一个慢日志格式的查询列表。然后,可以使用pt-upgrade在旧版本和新版本的MySQL上运行它们,比较响应时间和结果集。在过去,我们已经注意到,pt-upgrade会返回很多误报 - 它可能会将查询报告为慢,而事实上,两个版本的查询都是完全正确的。为此,您可能需要引入一些额外的完整性检查 - 解析pt-upgrade输出,获取报告的慢速查询,再次在服务器上执行这些查询,并再次比较结果。你需要记住,你应该以同样的方式连接到新旧数据库服务器(套接字连接将比TCP更快)。

这种通用测试的典型结果是执行计划发生变化的查询 - 通常添加一些索引或强制优化器选择正确的查询就足够了。您还可以看到结果集中存在差异的查询 - 这很可能是查询中缺少显式ORDER BY的结果 - 如果不对其进行排序,则无法依赖行的排序方式。

友情建议 关于升级 操作之前强烈要求备份。个人认为 一个DBA除了要考虑性能,更多的是稳定,安全。

次要版本升级

小升级相对容易执行 - 大多数情况下,您只需要使用发行版的软件包管理器来安装新版本即可。一旦你这样做,你需要确保升级后MySQL已经启动,然后你应该运行mysql_upgrade脚本。该脚本遍历数据库中的表,并确保它们与当前版本兼容。它也可能修复你的系统表,如果需要的话。

显然,安装新版本的软件包需要停止服务。因此您需要规划升级过程。如果使用Galera Cluster或MySQL复制,它可能会略有不同。

MySQL复制

当我们处理MySQL复制时,升级过程相当简单。您需要通过升级slave,在执行升级所需的时间内将其停止运行(如果一切顺利,不超过几分钟的停机时间,则是很短的时间)。为此,您可能需要在代理配置中进行一些临时更改,以确保流量不会被路由到正在维护的slave设备。这里很难给出任何细节,因为这取决于你的设置。在某些情况下,可能甚至不需要进行任何更改,因为代理可以自行适应拓扑更改,并检测哪个节点可用,哪个不可用。顺便说一句,这就是你应该如何配置你的代理。

一旦每个从机都被更新,您需要执行一个计划的故障切换。我们在较早的博客文章中讨论了这个过程。该过程也可能取决于您的设置。如果你有自动化的工具(例如MHA),它不一定是手动的。一旦选出新的主服务器并完成故障切换,则应该对旧主服务器执行升级,此时应该将新服务器从新主服务器上删除。这将结束MySQL复制设置的次要版本升级。

个人建议 升级从库的时候 一定要留心主从的报错 show slave status中的error。

Galera升级
使用Galera,执行升级要容易一些 - 您需要逐个停止节点,升级停止的节点,然后重新启动,然后再转到下一个节点。如果您的代理需要一些手动调整来确保流量不会受到正在进行维护的节点的攻击,则必须进行这些更改。如果它可以自动检测所有的东西,你只需要停止MySQL,升级并重新启动。一旦您浏览了集群中的所有节点,升级就完成了。

个人建议 升级Galera 一定要测试 测试 测试 备份 备份 备份。有个比较完善的回退方案.猥琐发育,不要浪。

主要版本升级

MySQL中的主要版本升级将是5.x - > 5.y甚至4.x> 5.y。这样的升级比较复杂,比较复杂,我们刚刚在前面的段落中提到的小升级。

执行升级的推荐方式是转储并重新加载数据 - 这需要一些时间(取决于数据库的大小),但是在从站不在旋转的情况下执行升级通常是不可行的。即使使用mydumper / myloader,这个过程也会花费很长时间。一般来说,如果数据集大于几百GB,则可能需要额外的准备工作。

尽管可能只是进行二进制升级(安装新软件包),但不建议这样做,因为旧版本和新版本之间可能存在一些二进制格式的不兼容问题,甚至在执行mysql_upgrade之后,仍然可能造成一些问题。我们已经看到了二进制升级导致的一些奇怪的行为,如何在优化器的工作原理,或导致不稳定。所有这些问题都通过执行转储/重新加载过程来解决。所以,虽然运行二进制升级也许可以,但是您也可能遇到严重的问题 - 这是您的要求,最终是您的决定。如果您决定执行二进制升级,则需要执行详细(耗时)的测试,以确保不会破坏任何内容。否则,你有风险。

MySQL复制

如果我们的设置基于MySQL复制,我们将在新的MySQL版本上构建一个从站。假设我们正在从MySQL 5.5升级到MySQL 5.6。由于我们必须执行一个很长的转储/重新加载过程,我们可能需要为此构建一个单独的MySQL主机。最简单的方法是使用xtrabackup从一个从站获取数据以及复制坐标。这些数据将允许您将新节点从旧节点上删除。一旦新节点(仍在运行MySQL 5.5 - xtrabackup只是移动数据,所以我们必须使用相同的,原始的MySQL版本)启动并运行后,是时候转储数据了。您可以使用我们之前在“备份和还原”中发布的任何逻辑备份工具。只要您稍后可以恢复数据,则无关紧要。

转储完成后,该停止MySQL,清除当前数据目录,在节点上安装MySQL 5.6,使用mysql_install_db脚本初始化数据目录并启动新的MySQL版本。那么是时候加载转储 - 这个过程也可能需要很长时间。一旦完成,你应该有一个新的和干净的MySQL 5.6节点。现在是时候把它和master一起同步了 - 你可以使用xtrabackup收集的坐标将节点从运行MySQL 5.5的生产集群的成员中删除。这里需要记住的重要一点是,如果您最终要将节点从当前的生产群集中删除,则需要确保二进制日志不会旋出。对于大型数据集,转储/重新加载过程可能需要几天,因此您需要调整expire_logs_days因此在主人。你也想确认你有足够的可用磁盘空间用于所有这些binlog。

一旦我们拥有一个MySQL 5.5从属MySQL 5.5主服务器,现在是时候浏览5.5个从服务器并升级它们了。现在最简单的方法是利用xtrabackup从5.6节点复制数据。所以,我们把一个5.5从机停掉,停止MySQL服务器,清除数据目录,将MySQL升级到5.6,使用xtrabackup从其它5.6从机恢复数据。一旦完成,您可以再次设置复制,并且应该全部设置。

这个过程比为每个从站执行转储/重新加载要快得多 - 每个复制群集执行一次就可以了,然后使用物理备份来重建其他从站。如果您使用AWS,则可以依靠EBS快照而不是xtrabackup。与逻辑备份类似,只要能够正常工作,重建从站的方式并不重要。

最后,一旦所有从站都升级完毕,您需要从5.5主站到5.6从站之一进行故障切换。在这一点上,可能发生的情况是,您将无法在复制中保留5.5(即使您在它们之间设置了主 - 主复制)。一般来说,不支持从新版本的MySQL复制到较旧的版本 - 复制可能会中断。不管怎么样,您都需要使用与从服务器相同的流程来升级和重建旧的主服务器。

Galera升级

与MySQL复制相比,Galera同时更加容易升级。用Galera创建的集群应该被看作是一个MySQL服务器。在讨论Galera升级时,记住这一点至关重要 - 它不是一个拥有一些slave或者相互连接的master - 就像一台服务器一样。要执行单个MySQL服务器的升级,您需要执行脱机升级(使其不能轮换,转储数据,将MySQL升级到5.6,加载数据,重新启动它)或创建一个从属服务器,升级它并最终故障转移到它(我们在上一节讨论MySQL复制升级时描述的过程)。

同样的事情适用于Galera集群 - 您要么升级所有节点(所有节点),要么必须构建一个从属节点 - 另一个通过MySQL复制连接的Galera集群。

在线升级过程可能如下所示。对于初学者来说,你需要在MySQL 5.6上创建slave - 进程与上面完全一样:创建一个包含MySQL 5.5的节点(可以是Galera但不是必须的),使用xtrabackup复制数据和复制坐标,dump数据使用逻辑备份工具,清除数据目录,将MySQL升级到5.6 Galera,引导集群,加载数据,从节点关闭5.5 Galera集群。

此时,您应该有两个Galera群集 - 5.5和一个Galera 5.6的单个节点,都通过复制连接。下一步将是建立一个生产规模的5.6集群。很难说如何做 - 如果你在云端,你可以旋转新的实例。如果您在数据中心中使用共置服务器,则可能需要将某些硬件从旧群集移到新群集。您需要记住系统的总容量,以确保它能够处理一些不能轮换的节点。虽然硬件管理可能会非常棘手,但最好不要过多关注构建5.6群集 - Galera将使用SST自动填充新节点。

一般来说,这个阶段的目标是建立一个足够处理生产工作量的5.6集群。一旦完成,您需要故障转移到5.6 Galera群集 - 这将结束升级。当然,您可能仍然需要添加更多的节点,但现在是一个定期调配Galera节点的过程,现在只使用5.6而不是5.5。

相关文章:

html中item属性,项目id(属性) | itemid (attribute)

项目id(属性) | itemid (attribute)itemid全局属性是某个项目的唯一全局标识符。itemid属性只能为既具有元素指定itemscope和itemtype属性。此外,itemid只能在具有itemscope相应属性的元素上指定itemtype或引用支持全局标识符的词汇表。itemtype全局标识符的确切含义…

程序员也想改 Lottie 动画?是的!

一、前言 Hi,大家好,我是承香墨影! Lottie 是 Airbnb 开源的一套跨平台的完整的动画效果解决方案,用过都说好。完全解耦开发人员和设计师,让设计师设计的动画,在程序中无缝还原,真是一旦拿起绝不…

poj 1698 Alice's Chance 最大流

题目:给出n部电影的可以在周几拍摄、总天数、期限,问能不能把n部电影接下来。 分析: 对于每部电影连上源点,流量为总天数。 对于每一天建立一个点,连上汇点,流量为为1。 对于每部电影,如果可以在…

为一月份开设的组队学习课程投票啦

目前Datawhale的开源内容分为两种:第一种是已经囊括在我们的学习路线图内的Datawhale精品课,第二种是暂未囊括在我们的学习路线图内的Datawhale测试课。 我们根据您的投票来确定精品课程的排期,其它测试课程一旦完成,即可排入我们…

华为鸿蒙有机会吗,谷歌重压之下,华为鸿蒙还有机会翻盘吗?全球系统生态之争开启...

就在华为处处被针对之际,华为动作可从来都没停下。芯片被制裁,就自己建工厂;海外华为被制裁,就把早已整出来的鸿蒙升级,适配到手机上;5G设备被制裁,就联系企业,扶植养猪,…

(读书笔记).NET大局观-.NET语言(1)

通用语言运行时 通用语言运行时被明确设计为支持多种语言,一般而言,建立于CLR之上的语言可以获得共同的良好处理。通过一个宏大的核心语义集,CLR还界定了一个以它为基础的典型编程语言的大体部分。例如对于任何一种基于CLR的语言,…

【分布式共识三】拜占庭将军问题----书面协议

2019独角兽企业重金招聘Python工程师标准>>> 区块链兄弟社区,区块链技术专业问答先行者,中国区块链技术爱好者聚集地 作者:吴寿鹤 来源:区块链兄弟 原文链接:http://www.blockchainbrother.com/article/8 著…

2021.09 电子学会 - 软件编程(图形化)试题讲解

软件编程(图形化)试题讲解 一级 考核目标 考查对软件编程界面的认识和基本操作;能够导入角色、背景和声音,通过对角色和背景进行简单操作,编写一个具有简单顺序结构的作品;同时考查简单的逻辑推理能力。 …

css代码应该放html哪里,css代码放到哪里?

CSS以HTML为基础,提供了丰富的功能,如字体、颜色、背景的控制及整体排版等。css代码需要放到哪里? 是不是一定写到html文件里面呢? 下面给大家介绍一下。css代码的定义通常有三种方式,内部样式表,内联样式表…

vmware克隆centos修改linux mac地址

故障背景: 在vmware workstation中了完全克隆了一个已经存在的centos的虚拟机,启动之后发现网卡没有启动。于是重启一下network服务,发现提示错误信息“Device eth0 does not seem to be present, delaying initialization.” www.2cto.com …

运用jieba库分词

代码: 统计出团队中文简介中词频 import jieba txtopen("C:\\Users\\Administrator\\Desktop\\介绍.txt","r",encodingutf-8).read() wordsjieba.lcut(txt) counts{} for word in words: if len(word)1: continue else: counts[word]counts.get…

【NCEPU】韩宇:上海新能源汽车比赛方案讲解

韩宇是华北电力大学国教大三的学生,参加了多期Datawhale的组队学习,也在天池、Kaggle等比赛中取得了不错的成绩。 他在线下组队学习时,曾为大家分享过如何准备天池深度学习的比赛?。这篇图文是他为大家分享自己刚刚参加的2021上海…

宁波大红鹰学院计算机科学与技术,2019宁波大红鹰学院专业排名

宁波大红鹰学院是一所全日制民办普通本科高校,由宁波大红鹰教育集团出资举办。学校创办于2001年4月,2008年4月,经教育部批准升格为本科院校,为了让大家更好的了解这所大学的专业排名,下面是学习啦小编给大家带来的宁波…

Json.Net学习笔记

Json.Net学习笔记 摘自: http://www.verydemo.com/demo_c360_i45119.html分类:编程语言/ASP.NET/文章导读:string googleSearchText "{ ""responseData"": { ""results"": [ { ""GsearchResul…

中国电子学会青少年编程能力等级测试图形化四级编程题:正话反说

「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),公众号后台回复【Scratch】或【Python】,即可进入。如果加入了之前的社群不需要重复加入。 我们将有关编程题目的教学视频已经发布到抖音号21252972100,小马老…

4.10日一直报错application未注入的问题解决

1.db.propertities 里面连接的是正式库,改为5522测试库 2.将pom.xml右键run as 后点击 instal转载于:https://www.cnblogs.com/CrisZjie180228/p/8793502.html

北邮计算机科学技术是学硕吗,【计算机考研】2020北京邮电大学计算机科学与技术考研初试科目、参考书目、复试详情汇总...

原标题:【计算机考研】2020北京邮电大学计算机科学与技术考研初试科目、参考书目、复试详情汇总一、考试科目计院的学硕是计算机科学与技术,专硕为计算机技术。计算机科学与技术:①101思想政治理论②201英语一③301数学一④803计算机学科基础…

node学习笔记

1.node.js的回调函数的两个参数:第一个参数代表错误信息,第二个参数代表结果。 if (err) {// 出错了 } else {// 正常 } 复制代码注:当正常读取时,err参数为null,data参数为读取到的String。当读取发生错误时&#xff…

PHP5.3.8连接Sql Server SQLSRV30

PHP5.3连接SQL Server就不能用php_mssql.dll了。 网上下载了好多都不行,因为它的版本是5.2的,不能再PHP5.3中使用。 后来听说微软专门为PHP出了自己的dll。 叫做Microsoft SQL Server Driver for PHP PHP5.3中用3.0的版本就可以了。 SQLSRV30.EXE 就是这…

Task03:青少年软件编程(Scratch)等级考试模拟卷(一级)

电子学会 软件编程(图形化)一级训练营 试题来源 青少年软件编程(Scratch)等级考试试卷(一级)【2019.09】青少年软件编程(Scratch)等级考试试卷(一级)【2019…

青岛中专学计算机哪个学校比较好,青岛最好的中专学校是哪个

青岛最好的中专学校是山东省轻工工程学校,小编为大家带来了青岛优秀中专学校名单,一起来看看吧。青岛有哪些好的中专山东省轻工工程学校青岛西海岸新区中德应用技术学校青岛华夏职业学校青岛旅游学校寿光市职业教育中心学校青岛经济职业学校枣庄市龙都中…

中国电子学会青少年编程能力等级测试图形化四级编程题:排序

「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),公众号后台回复【Scratch】或【Python】,即可进入。如果加入了之前的社群不需要重复加入。 我们将有关编程题目的教学视频已经发布到抖音号21252972100,小马老…

Extjs 基础篇—— Function基础

这里主要是JS的基础知识,也是深入理解Ext的基础。1.参数可变长,注意跟Java还是有一点区别的。例: view source print?1.function getUser(name,age){2.alert("name: "name " age: "age);3.}调用方法:getUse…

Datagridview中数字格式列 不显示小数点前面的0

用代码设置DataGridView中某列为数字格式,但当小数为0.*的时候,前面的0却不显示。只显示.*。 看网上有说: 调整本地设置,控制面板-区域和语言选项,在弹出框的区域选项卡中,选择自定义,在弹出框的…

使用计算机辐射最大,计算机辐射的主要来源及其对人体的危害

计算机已进入现代社会的各行各业和千家万户,它给人们的工作、学习、生活带来了极大的方便。但“计算机病”也与日俱增,严重的影响了人们的身心健康。“计算机病”的症状表现为神经衰弱综合癌、肩颈腕综合症、以及腰背酸疼、抗病能力降低、易感冒等&#…

Android开发权威指南(第2版)新书发布

《Android 开发权威指南(第二版)》是畅销书《Android开发权威指南》的升级版,内容更新超过80%,是一本全面介绍Android应用开发的专著,拥有45 章精彩内容供读者学习。  《Android开发权威指南(第二版)》全面介绍了Android应用开发的各种技术…

北京智能计算产业研究院落户顺义,中科睿芯联手计算所、顺义区打造“产业园2.0”...

作为具有重大发展潜力的高技术产业方向,智能计算在我国方兴未艾。 12月6日,由中科院计算所孵化的智能计算领域创业公司“中科睿芯”牵头发起、联袂中科院计算所和中关村顺义园管委会共同打造的“北京智能计算产业研究院”(下简称“研究院”&…

Scratch青少年编程能力等级测试模拟题(四级)

「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),公众号后台回复【Scratch】或【Python】,即可进入。如果加入了之前的社群不需要重复加入。 我们将有关编程题目的教学视频已经发布到抖音号21252972100,小马老…

react 用html插件,React配置过程中用到的插件汇总

●react插件●react-dom插件●react-router插件●react-redux插件●babel插件●webpack插件●loader插件●jquery插件●moment插件●bootstrap插件●react插件→react(局部安装:cnpm install react --save-dev)→react-dom(局部安装:cnpm install react …

iOS学习之路十三(动态调整UITableViewCell的高度)

大概你第一眼看来,动态调整高度是一件不容易的事情,而且打算解决它的第一个想法往往是不正确的。在这篇文章中我将展示如何使图表单元格的高度能根据里面文本内容来动态改变,同时又不必子类化UITableViewCell。你当然可以通过子类化它来实现&…