记一次MySql灾难性事件
2023年8月8日,本来系一个风和日丽的夏天中的平凡一天,但这种平凡,注定住佢一定唔平凡,唉...现在回忆起都阵阵咁痛!!!
重要嘅事情讲三次,唔好手贱,唔好手贱,唔好手贱
事日,如常上班,本人系一名小小的程序员,经历咗口罩三年,还有一份工作,都觉得系日子过得去吧,所以日常除了常规性嘅系统维护,硬件排障,都无乜其他事情做,当然老细突然加钟,有其他新需求,咁可能都要氪肝完成嘅,做人为两餐,工作求稳定嘛,扯得有D远了,讲返正题,返到办公室,打开系统,睇咗下日志,发现都无乜问题,重点来啦...唔知点解,心血来朝,觉得MySql每次重启之后,都要运行一个批处理,来设置local_infile,以及max_connections有D麻烦,想根治佢,其实这个系统建设初期,我哋就发现MySql就算用语句设置了,重启后,设置项都系会复原嘅.前提系因为我唔知道可以在My.ini设置.都属于老旧问题了.
就系呢个批处理文件:

咁我就去度娘咗一下,了解到可以在My.ini设置.咁我就在服务器找到咗My.ini并用笔记本打开,进去写入,并保存....(一切就从呢度开始了)


就设置了如下图两项


然后我就对MySql服务进行重启(恶梦开始了...这是错误的第一步)

我即刻成个人呆咗...发生咗咩事...点解会咁样...天啊...个个系实时库来架...宜家起唔倒,即系代表系统瘫痪咗,成村人等紧开饭啊.镇定D,镇定D,镇定D...可能系一时嘅假像来,我再去服务控台个度重新试咗下,MySql服务都系启动唔倒...

死了,死了,死了...点算好,系唔系因为我改咗My.ini导致,我写错了???我即刻去打开My.ini将写入那项local_infile=1删除,以及改回那项max_connections=151,并保存My.ini,再去服务控台个度重新试咗下,

无了...无了...无了...呢锅大大锅了.无办法了,先稳住个势先,咁啱系统提示有个windows更新...我就去总务个度报备,话windows更新可能需要时间处理...(此刻我都仲系认为情况可控嘅),然后我就回到岗位,查度娘....试来试去,还是不能令服务启动起来....完了,我坐在岗位上,很无助,很彷徨,点解我会心血来朝,点解我会咁冲动去改My.ini文件.唉...怨恨系无用嘅,啦啦声处理目前嘅问题先,我翻咗下备份日志,发现有一个7月24日的备份文件,(系统都系15天左右一个备份),退而求其次,还原环境用这个备份,令系统可以先跑起来先(`这里是错误的第二步,为什么我不再努力努力,而选择立刻还原环境,恢复备份`)
我先将目前Data里的ibd文件复制出来,好多人可能会问,点解唔系frm和ibd一齐呢,因为我嘅库选择咗innodb_file_per_table=1,会将innodb表从系统共享表空间移动到独立的.ibd文件。上阿里云,重置服务器,安装数据库,还原备份,一顿操作落来都已经中午过后了(呢个期间,总务来催过好多次,我都推微软更新……。哈……。)...呢度不得不讲一下阿里云重置就系快。
现在系统系可以运行了,业务数据却只到7月24日,要谂办法搞返到8月8日啊……。继续度娘,具体嘅方法如下:
`
按照ibd对应的表结构,创建新表;
执行:
ALTER TABLE tablename DISCARD TABLESPACE;
或者
停止mysql服务后,删除对应的 xxx.ibd 文件,然后再启动mysql服务;
- 执行
ALTER TABLE tablename IMPORT TABLESPACE;
注意:
如果mysql服务启动失败,可在my.ini文件里面配置一下innodb_force_recovery,默认为0,从1开始最高为6,从1开始逐渐尝试。
`
睇上边步骤的操作意义,就系建立与原来相同的表结构,然后再用旧的ibd文件代替新表的,从而恢复数据。重点有几个:
1.相同的表结构。
2.替换旧的ibd文件。
3.innodb_force_recovery值应与旧表一致。
(呢度仲有一个我忽略咗嘅重点:数据库版本应与原来的版本一致)
咁样应该就可以恢复了。啦啦声去另一台云服务器做实验,复制粘贴个D就唔讲了,唯独讲下遇到嘅问题:
1.找不到表空间。

这个是因为细节问题,应该先DISCARD TABLESPACE再IMPORT TABLESPACE如果直接IMPORT TABLESPACE就会报这个错了。
2.复制替换好旧的ibd文件后,IMPORT TABLESPACE时报错

呢个最值钱了,我系揾咗好耐好耐先揾倒呢个方法,原因系:MySql开启了表的统计信息。需要将其关闭先可以再IMPORT TABLESPACE。方法亦很简单:在My.ini文件里边,加入innodb_stats_persistent=OFF
3.问题又回归到事件嘅原点,修改完My.ini文件之后,为什么启动唔倒MySql服务?

呢个就是万恶之源了,其实系当用记事本打开My.ini文件,修改之后补存,存入嘅文件格式唔啱导致嘅,记事本默认保存格式为:UTF-8。方法亦好简单:将My.ini文件另存为ANSI格式。如下图:

致此,所有嘅ibd文件都恢复返了,唉……。总结以下几点人为错误:
1.自己衰手贱。
2.没有彻底找到问题嘅症结点,盲目且失去镇定。
3.由于迫于业务压力,错误选择补救措施。
4.术业能力唔够,有待进一步提高
以此文鞭策自己!
记一次MySql灾难性事件的更多相关文章
- 记一次mysql数据库被勒索(下)
背景: nextcloud的mysql数据库被黑,删库勒索.参考:记一次mysql数据库被勒索(上) mysql数据库恢复成功,nextcloud还是无法连接.参考:记一次mysql数据库被勒索(中) ...
- 如何开启mysql计划事件
如何开启mysql计划事件 (2012-07-26 12:21:23) 转载▼ 标签: mysql 事件计划 it 分类: MySQL 首先在sql中查询计划事件的状态:SHOW VARIABLES ...
- 创建和使用MySQL计划事件
查看事件调度程序线程的状态: SHOW PROCESSLIST; 要启用和启动事件调度程序线程命令: SET GLOBAL event_scheduler = ON; 禁用和停止事件调度程序线程: S ...
- mysql启动事件
1.查看时间是否开启 SHOW VARIABLES LIKE 'event_scheduler' 若是查看结果为OFF,的话开启ON 2.设置事件开启 SET GLOBAL event_schedul ...
- mysql的事件
mysql的事件定时器的使用: SHOW VARIABLES LIKE 'event_scheduler' --查询event_scheduler开启状态 SET GLOBAL event_sched ...
- 记一次 mysql 启动没反应
记一次 mysql 启动没反应 ,重启linux又可以启动 vim /var/log/mysqld.log 2018-02-04 13:22:49 28507 [ERROR] InnoDB: Cann ...
- Mysql event事件用法
公司的数据库需要进行定期删除数据,需要用到mysql event事件,学习和梳理这块知识. 1查看event是否开启 SHOW VARIABLES LIKE 'event_scheduler'; 2开 ...
- Mysql数据库事件使用与示例
1 事件简介 事件(event)是MySQL在相应的时刻调用的过程式数据库对象.一个事件可调用一次,也可周期性的启动,它由一个特定的线程来管理的,也就是所谓的“事件调度器”. 事件和触发器类似,都是在 ...
- 查询事件状态,mysql查看事件是否开启,设置启动时自动开启方法
1.查看事件是否开启 SHOW VARIABLES LIKE 'event_scheduler' 2.设置当前事件开启 SET GLOBAL event_scheduler = 1; 或 SET GL ...
- 记一次MySQL表分区操作
最近一次日常迭代中,业务线需要对一张大表进行联合查询,查询性能可想而知,测试过程中服务接口直接响应超时,导致服务不可用,最后临时对该表进行分区操作,暂时缓解性能问题.由于是第一次操作表分区,姑且记录一 ...
随机推荐
- 手把手实践丨基于STM32+NBIOT+华为云IOT设计智能井盖
摘要:本文介绍基于STM32微控制器.BC26 NBIOT模组和华为云IOT平台,实现了一款智能井盖系统. 本文分享自华为云社区<基于STM32+NBIOT+华为云IOT设计的智能井盖>, ...
- 7.1 套接字(socket)
套接字(socket)是计算机之间进行通信的一种技术,它允许不同主机上的进程之间进行数据交换.在Python中,我们可以使用socket模块来创建和使用套接字. 首先,我们需要导入socket模块: ...
- Framework 中使用 Toolkit.Mvvm 的生成器功能
.NET Standard是.NET APIs的正式规范,可在多个.NET实现中使用..NET Standard的动机是为了在.NET生态系统中建立更大的统一性..NET 5及更高版本采用了不同的方法 ...
- LeetCode 双周赛 106(2023/06/10)两道思维题
本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 加入知识星球提问. 往期回顾:LeetCode 单周赛第 348 场 · 数位 DP 模版学会了吗? 双周赛 106 ...
- cmake 安装一个目录下的图片 到另一个目录文件中去
install(DIRECTORY ./cfg/labels/ DESTINATION ./fservo/cfg/yolo_cfg/labels/) install (DIRECTORY ./cfg/ ...
- @SafeVarargs注解的使用
在声明具有模糊类型(比如:泛型)的可变参数的构造函数或方法时,Java编译器会报unchecked警告.鉴于这些情况,如果程序员断定声明的构造函数和方法的主体不会对其varargs参数执行潜在的不安全 ...
- Android-NDK开发——基本概念
在Android开发中,有时候出于安全,性能,代码共用的考虑,需要使用C/C++编写的库.虽然在现代化工具链的支持下,这个工作的难度已经大大降低,但是毕竟万事开头难,初学者往往还是会遇到很多不可预测的 ...
- Windows 10 开启子系统Ubuntu
卸载原有的wsl 分发子系统 # 查看已安装的wsl子系统 wsl --list # 依次删除wsl 子系统 wsl --unregister <子系统名称> 结果 安装子系统Ubuntu ...
- 性能优化之window.onload
前言 最近在做一些性能优化相关的工作,相信大家在工作过程中也会遇到一些性能优化相关的场景,这对于前端开发者来讲是一项加分技能.为了我们的用户在使用我们的产品时能够有一个非常好的体验,我们需要对页面进行 ...
- Day03_Java_作业
A:选择题 1.给出以下代码,请问表达式grade==70在以下两条语句中是否获得执行? boolean flag = false && grade == 70;//第一条语句 boo ...