MySQL:硬盘在24 * 7工作中罢工了,我该怎么办?

从传感器到可视化:手把手搭建实时温度监控系统 物联网监控系统通过传感器采集物理世界数据,经由网络传输至服务器进行处理与存储,最终实现可视化展示与智能告警。其核心价值在于实现对设备或环境状态的持续、自动化感知与预警,从而保障系统稳定运行、预防故障发生。在工业控制、服务器运维、智能家居及农业大棚等场景中,温度监控是基础且关键的应用。本文以树莓派、DS18B20传感器、MQTT协议、InfluxDB和Grafana为核心组件,详细阐述了构建一套完整实时温度监控系统的架构设计、硬件选型与软件实现,为相关领域的开发者和爱好者提供了从零到一的实践指南。 阅读详情

640?wx_fmt=jpeg

虽然他们不承认, 但我还是这个系统的核心, 因为我保存着这个系统最最重要的东西:数据。 

为了能让Tomcat他们访问, 我提供了几十个数据库连接——不能提供更多了,因为每个连接都要耗费我不少资源。 

这些天Tomcat他们实在不像话,数据库读写的请求像大海的波涛一样汹涌澎湃,不断向我袭来。

996是别想了, 24*7才是残酷人生。 

我没办法, 只好拼命地压榨硬盘,看着他的磁头在光滑的盘片上滑来滑去,寻找磁道,定位扇区,读取数据。这小伙子挺不错的, 任劳任怨,但是就是太慢,居然比内存慢几千倍。

很快,连硬盘也招架不住了,他对我说:“MySQL大哥,再这样下去我就要坏掉了。”  

果然,没过几天,硬盘病倒了,系统崩溃了。 

读写分离

第二天我一觉醒来,就发现系统重启了,但是有点不对劲,这Tomcat发来的SQL怎么这么少啊!还都是些Insert, Update, Delete !

硬盘对我说:“你还不知道吧,昨天晚上我们的主人张大胖做了个数据库的读写分离!”

“读写分离?”

“是啊, 张大胖统计了一下, 我们读和写的比例大概是20:1, 非常适合读写分离,简单来说,就是建立多个数据库,你是主库,主要负责写,还有两个从库,主要负责读。这样我们就没有多少压力了。”

640?wx_fmt=png

“我这里存了这么多数据, 怎么复制给另外两个小弟呢?”   我问道。

“这你不用担心,张大胖昨天已经给你做了一个快照,他把快照已经复制到了那两个小弟那里。接下来你只需要把今天早上产生的新的数据发过去就行了。”

基于SQL语句的复制

正在这个时候,那个叫旺财的小弟给我打招呼了: “大哥,你把你那里的执行过的Insert, Update, Delete这样的SQL语句都记录下来,然后发给我和小强,我们俩要这些SQL在我们自己的数据库上'重放'一下!”

640?wx_fmt=png

我看了一下自己的配置,果然如此,我只需要把SQL语句发过去就OK了。 

有了两个小弟的承接读操作,我的工作大大减轻,又可以和硬盘喝茶聊天了。 

可是没多久,Tomcat气冲冲地来质问我:“你们怎么搞的,数据出现不一致了,Order表, rand_num那一列!”

这是怎么回事?  我可是把所有的SQL语句都发给旺财和小强执行了啊,怎么会不一致?

我们三个不敢怠慢, 赶紧翻看最近执行的SQL, 尤其是更新Order表, rand_num列相关的。 

终于发现了罪魁祸首,就是这个函数: RAND() , 它会返回一个随机数, 经过处理后,更新到rand_num这一列。

在不同的数据库执行,这个函数返回的值也就不同,这就会导致我们的数据不一致了。

我感到非常羞愧,因为数据的一致性是我们数据库家族最引以为豪的特性。 在单机的时候,我们自己就可以通过事务来保证了。 但是一旦有多个数据库,形成了分布式的环境,想让大家都保持一致,怎么会这么麻烦?

我们只好请张大胖手工把数据改成一致的, 然后再想新的办法。 

基于行的复制

小强说道:“大哥,我提议一个新方法,以后你别记录SQL了,你只记录SQL的所影响的行和相关的值,然后把这些日志发给我们,例如:

对于Insert, 记录下所有列的新值。

对于Delete,记录下到底是哪一行被删除(用主键来标识)

对于Update,记录下哪一行被更新(用主键来标识),以及被更新的列和新值

有了这些日志,我们就可以清楚地知道你那边到底发生了什么变化,我们把这些日志应用到我们的数据库上就可以了!”

鉴于上一次的教训,这次我们仔细分析各种例外情况,确保没有问题才正式采用。

我,旺财和小强通力合作,新的复制方式工作得很好。直到有一天我们遇到了一个Update语句:

update xxx set flag = 0;

这个语句一下子更新了几十万条数据。 在之前使用基于SQL的复制时,记录下这一条语句就行了。 用现在的方式,得记录几十万条数据,这太要命了!

怎么办? 退回到原来的“基于SQL的复制”,肯定不行! 

要不默认用SQL复制? 如果SQL执行结果“不确定”,例如有RAND()函数调用,那我们就使用语句复制。 

这是一种混合的模式,虽然麻烦,但也只能如此了。

数据延迟

深更半夜Tomcat又来找我:“有个用户在咱们发了一个帖子,我在你这里做了Insert 操作,然后用户刷新页面的时候,我从旺财那里读取数据,却读不到! 现在人家来投诉我们了!”

640?wx_fmt=png

我心想,这家伙也太快了吧, 居然比我复制数据的速度还快。  

我又检查了一下我和旺财之间的复制通道,由于网络原因,确实是有点延迟。

我对Tomcat说:“这是小事情,复制很快完成,他多刷新几次肯定就可以了。”

Tomcat怒道:“这是严重的用户体验问题,怎么是小事?”

“数据复制延迟多正常啊,反正我们三个能保证最终的一致性!”

Tomcat说:“最终一致性? 在我这里可不行! 我给你们出个主意,我在insert数据的时候,你还没有复制完成,怎么就给我说已经insert成功了? 你必需得等到数据复制完成才能说insert成功!! 你的正确次序应该是这样的。”

640?wx_fmt=png

旺财一看到这个图,大惊失色:“万万不可, 这样一来就是同步复制了,如果网络比较慢, 第2.1和第2.2步迟迟不能完成, 那我们大哥就没法告诉你插入数据成功, 用户连帖子都发表不了!”

“是啊,这种用户体验会更差!” 小强帮腔。 

Tomcat说:“我不管,反正是你们的问题!你们数据库得想办法解决!”

我说:“这个问题啊,本质上是数据延迟导致的,但是在分布式环境下这是不可避免的,我们在数据库层面是解决不了的, 你们在应用层面多想想办法吧。”

“能有什么办法?”

我说: “比如,对于不能容忍延迟的操作,都在我这里(主库)来读写,或者用个什么方法判断主库和从库是不是已经一致了。”

“也可以用个取巧的办法, 让用户发表完帖子后等个几秒钟再来刷新......”  旺财补充。

Tomcat叹了一口气:“唉,你们这些家伙啊, 只会推卸责任! 这我可管不了, 我们看看张大胖主人会怎么办吧!”

对于这种数据复制延迟的问题, 你会怎么办呢? 欢迎留言讨论!  

最新热门文章

为什么996工作制只提互联网公司?

四次面试:程序员越来越悲催了

必须要裁掉那些老家伙

为什么学习编程要从Web开始?

我是一个线程

我是一个Java Class

CPU阿甘

面向对象圣经

TCP/IP之大明邮差

负载均衡的原理

一个故事讲完HTTPs

编程语言的巅峰

JavaScript:一个屌丝的逆袭

640?wx_fmt=jpeg

【信息科学与工程学】【管理科学】第七十二篇 管理层相对基层员工的信息差/资源差/权力差/认知差03 总裁/副总裁 定义系统状态(如:全正常、1个单元故障、降级运行、完全故障),状态间转移率 λ(故障率)和 μ(修复率)构成转移强度矩阵 Q。其中 γ_k = (2π/λ) n_k d_k cosθ_k 为相位厚度,η_k = n_k / cosθ_k (TE波) 或 η_k = n_k cosθ_k (TM波) 为光学导纳,θ_k为层内入射角。用于在光刻机设计阶段评估各子系统(光源、光学、工件台、真空等)的可靠性,识别薄弱环节,计算系统整体可用性(Availability),指导冗余设计和维护策略制定。 阅读详情

相关推荐

locks_strikes:我被一家在线教育公司雇用,为门锁和罢工写了一份文件。

locks_strikes:我被一家在线教育公司雇用,为门锁和罢工写了一份文件。

Appium,AirTest切换使用时,appium罢工之坑(1)

由于一些元素不能定位,所以最近项目引用了Airtest 问题场景: case的开始使用appium,case执行过程中,切换到airtest操作元素,待执行完airtest相关步骤之后,后续使用appium driver的步骤不在正常干活了…… 问题原因: 因appium使用的是环境变量ANDROID_HOME指定路径sdk(/Users/XXX/Library/Android/sd...

weixin_33875839的博客 638

MT870又不能上网了(已解决) 增强接入点控制 mt870专用

MT870上网罢工。 为了解决这个问题,我安装了增强接入点控制,选择GSM与CMNET,但依然不给力,这该怎么办? 1.手机无法上网 2.下载使用“增强接入点”软件设置为“GSM”与"cmnet"依然不能上网 根据zjx3456的建议,使用“省电宝”的设置——》修复网络(APN),立即可以上网。 同时,“增强加入点”里面显示的不再是“cmnet”而是“中国移动NET设置” 然后,一切搞定了。

Google全球员工围攻Google!

参加 2018 AI开发者大会,请点击 ↑↑↑屋漏偏逢连夜雨,仍未进得了中国的搜索巨人 Google,在自己的地盘上,日子也不好过。自 2005年收购以来,硅谷科技巨头...

AI科技大本营 889

前端埋点的实践

1、前言 开始正文前先介绍一下埋点的概念~,(熟悉的朋友可以略过) 前端埋点: 是一种手段,它的目的是上报相关行为数据,相关人员以数据为依据来分析产品在用户端的使用情况,根据分析出来的结果辅助产品优化、迭代。 BI:商业智能,公司内部做数据分析相关的部门。 2、背景 在流量红利逐渐消失的现在,数据的采集、分析和精细化的运营显得更加重要,所以埋点的需求在互联网产品中是很常见的,目的上面也提到了。我们的追求就是又快又好的做好埋点工作,但是现实却不那么美好;目前我们团队在前端埋点方面存在一些痛点: 在构造埋点字段

Arui_0的博客 1772

C++五子棋人机对战

使用C++,开发五子棋人机对战,快速提升C++项目开发能力。

程序员Rock的博客 5万+

我的广告服务器罢工了?

   刚要下班,运维部门的同事打电话来说,一个广告服务器(UDP服务器)不接收数据了。我跑到他们部门一看,果然。界面上显示接收数据包数量和速度都没有变化了。据他们介绍,以前一直不出这个问题,但现在特别频繁。一般运行10多分钟可能就出问题了。   好事啊,出现故障的频率这么高,找到问题就很easy了。   我申请好权限,登录到服务器上去观察。   是什么原因使服务器不接收数据包了呢?  1.服务器收

那山,那水,那驴 860

深入解析report_timing:从基础参数到高级时序路径分析技巧

本文深入解析了静态时序分析(STA)中`report_timing`命令的核心用法与高级技巧。作为芯片设计的关键诊断工具,它能根据SDC约束精准定位时序路径问题。文章从基础参数过滤讲起,详细介绍了如何通过`-from`、`-through`、`-to`等选项定位关键路径,并深入讲解了`-input_pins`、`-nets`、`-transition_time`等高级选项如何揭示延迟细节,以及`-nworst`、`-slack_lesser_than`等过滤排序技巧,旨在帮助工程师高效解读时序报告,优化设计

h6i7j8的博客 1108

mysql 硬盘死机_MySQL:硬盘在24 * 7工作中罢工了,我该怎么办?

虽然他们不承认, 但我还是这个系统的核心, 因为我保存着这个系统最最重要的东西:数据。为了能让Tomcat他们访问, 我提供了几十个数据库连接——不能提供更多了,因为每个连接都要耗费我不少资源。这些天Tomcat他们实在不像话,数据库读写的请求像大海的波涛一样汹涌澎湃,不断向我袭来。996是别想了, 24*7才是残酷人生。我没办法, 只好拼命地压榨硬盘,看着他的磁头在光滑的盘片上滑来滑去,寻找磁道...

weixin_39690972的博客 107

【SAP ME 3】JAVA 调用SAP PO WebService

Java调用SAP PO/PI WebService接口

探索 Java 编程的技巧、最佳实践和解决方案。本博客提供针对 Java 开发者的实用指南,涵盖从基础到高级话题,旨在提升编程效率和技能。 847

YOLOv11改进策略【卷积层】| ICCV-2023 引入Dynamic Snake Convolution动态蛇形卷积,改进C3k2

基于拓扑几何约束的动态蛇卷积用于管状结构分割DSConv(Dynamic Snake Convolution,动态蛇形卷积)模块的设计主要是为了更好地处理管状结构的分割任务,解决传统卷积在处理细管状结构时的不足。

Limiiiing的博客 1629

mysql update 硬盘_MySQL:硬盘在24 * 7工作中罢工了,我该怎么办?

虽然他们不承认, 但我还是这个系统的核心, 因为我保存着这个系统最最重要的东西:数据。为了能让Tomcat他们访问, 我提供了几十个数据库连接——不能提供更多了,因为每个连接都要耗费我不少资源。这些天Tomcat他们实在不像话,数据库读写的请求像大海的波涛一样汹涌澎湃,不断向我袭来。996是别想了, 24*7才是残酷人生。我没办法, 只好拼命地压榨硬盘,看着他的磁头在光滑的盘片上滑来滑去,寻找磁道...

weixin_36309562的博客 76

(01)ORB-SLAM2源码无死角解析-(38) EPnP 算法原理详解→理论基础二:分情况求得beta初始解

讲解关于slam一系列文章汇总链接:史上最全slam从零开始,针对于本栏目讲解的(01)ORB-SLAM2源码无死角解析链接如下(本文内容来自计算机视觉life ORB-SLAM2 课程课件): (01)ORB-SLAM2源码无死角解析-(00)目录_最新无死角讲解:https://blog.youkuaiyun.com/weixin_43013761/article/details/123092196 文末正下方中心提供了本人联系方式,点击本人照片即可显示WX→官方认证{\color{blue}{文末正下方中心}

江南才尽江南山,年少无知年少狂! 1024

图解:讲一点分布式的基础知识!

点击上方 "程序员小乐" ,关注公众号8点20分,第一时间与你相约每日英文You never know how strong you really are unt...

吧主 205

RK3399平台开发系列讲解(外设篇)交换芯片RTL8306M

网络:交换芯片RTL8306M 电路: make menuconfig 配置: 目录:arch/arm64/configs/rk3399_b201_defconfig CONFIG_FIXED_PHY=y 设备树: arch/arm64/boot/dts/rockchip/rk3399-b201-rev1.dts 时钟: Open之后首先校验网卡mac地址是否正确(stmmac_chec...

内核笔记 2391

39-OpenLayers多图层切换显示隐藏,支持多个Layer同时显示和隐藏,OpenLayers懒加载瓦片

39-OpenLayers多图层切换显示隐藏,支持多个Layer同时显示和隐藏,OpenLayers懒加载瓦片

fxshy的博客 462

讲一点分布式的基础知识,图解!

故事还是得从单机开始,没有单机哪儿来的分布式?在IT世界,二进制的数据是我们最宝贵的资产,必须要把它保存在断电也不怕的硬盘上。但是只用一块硬盘很危险,万一坏了数据就彻底没...

码农翻身 454

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

写技术文章也挺好的,虽然没有多少人看

微信改版信息流以后,正式进入了“拼标题”时代,如果没有一个吸引眼球、摄人心魄,不点进来心里就痒痒的标题,那阅读量肯定是嗖嗖地下降。偏偏我又不擅长此道,绞尽脑汁想了个自以...

码农翻身 1160

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

3.Linux基础开发⼯具【由浅入深-Linux】

在 Windows 环境中,我们习惯了双击 或 文件并一路点击“下一步”来安装软件。但在 Linux 的世界里,软件的分发和安装理念有着本质的不同。Linux 强调权限控制、模块化和依赖管理。为了帮您构建完整的 Linux 系统管理知识体系,我们可以将 Linux 下安装软件的方式归纳为五大主流阵营。这是 Linux 下最正统、也是日常使用频率最高的方式。它又细分为“在线仓库安装”和“本地包安装”两种场景。1. 在线仓库安装(如同手机自带的 App Store) 操作系统维护着一个庞大的软件云端仓库。通

插花弄玉的博客 741

两招解决Windows7任务管理器罢工问题

Windows的任务管理器经常会罢工。而产生罢工的原因有很多,面对这种情况,你应该及时进行全盘扫描,排除病毒和木马对系统的影响。除此以外,还有可能因为组策略设置不当和注册表被修改而导致任务管理器无法正常使用,还在等什么?赶快让Win7任务管理器重新工作吧。 情况一、重新配置组策略 很多情况下无法打开Win7任务管理器,都是由于在组策略中进行了关闭和禁止设置,因此对于组策略的禁止解除,可以解决绝...

weixin_33928467的博客 189

职场寓言:鸬鹚罢工

职场寓言:鸬鹚罢工一群鸬鹚辛辛苦苦跟着一位渔民十几年,立下了汗马功劳。不过随着年龄的增长,腿脚不灵便,眼睛也不好使了,捕鱼的数量越来越少。不得已,渔民又买了几只小鸬鹚,经过简单训练,便让新老鸬鹚一起出海捕鱼。很快,新买的鸬鹚学会了捕鱼的本领,渔民很高兴。新来的鸬鹚很知足:只干了一点微不足道的工作,主人就对自己这么好,于是一个个拼命地为主人工作。而那几只老鸬鹚就惨了,吃鸡蛋价格的住的都比新来的鸬鹚差

phphot 1991
上一篇: 在瑞典当码农 :在家上班?不加班?能干到60岁?
下一篇: 毕业三年,贷款40万创业之后我又做回了程序员
码农翻身
码农翻身 《码农翻身》作者 《码农翻身》作者
博客等级 码龄8年 3万+粉丝 1084原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值