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日啊……。继续度娘,具体嘅方法如下:

`

  1. 按照ibd对应的表结构,创建新表;

  2. 执行:

ALTER TABLE tablename DISCARD TABLESPACE;

或者

停止mysql服务后,删除对应的 xxx.ibd 文件,然后再启动mysql服务;

  1. 执行

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 TABLESPACEIMPORT 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灾难性事件的更多相关文章

  1. 记一次mysql数据库被勒索(下)

    背景: nextcloud的mysql数据库被黑,删库勒索.参考:记一次mysql数据库被勒索(上) mysql数据库恢复成功,nextcloud还是无法连接.参考:记一次mysql数据库被勒索(中) ...

  2. 如何开启mysql计划事件

    如何开启mysql计划事件 (2012-07-26 12:21:23) 转载▼ 标签: mysql 事件计划 it 分类: MySQL 首先在sql中查询计划事件的状态:SHOW VARIABLES ...

  3. 创建和使用MySQL计划事件

    查看事件调度程序线程的状态: SHOW PROCESSLIST; 要启用和启动事件调度程序线程命令: SET GLOBAL event_scheduler = ON; 禁用和停止事件调度程序线程: S ...

  4. mysql启动事件

    1.查看时间是否开启 SHOW VARIABLES LIKE 'event_scheduler' 若是查看结果为OFF,的话开启ON 2.设置事件开启 SET GLOBAL event_schedul ...

  5. mysql的事件

    mysql的事件定时器的使用: SHOW VARIABLES LIKE 'event_scheduler' --查询event_scheduler开启状态 SET GLOBAL event_sched ...

  6. 记一次 mysql 启动没反应

    记一次 mysql 启动没反应 ,重启linux又可以启动 vim /var/log/mysqld.log 2018-02-04 13:22:49 28507 [ERROR] InnoDB: Cann ...

  7. Mysql event事件用法

    公司的数据库需要进行定期删除数据,需要用到mysql event事件,学习和梳理这块知识. 1查看event是否开启 SHOW VARIABLES LIKE 'event_scheduler'; 2开 ...

  8. Mysql数据库事件使用与示例

    1 事件简介 事件(event)是MySQL在相应的时刻调用的过程式数据库对象.一个事件可调用一次,也可周期性的启动,它由一个特定的线程来管理的,也就是所谓的“事件调度器”. 事件和触发器类似,都是在 ...

  9. 查询事件状态,mysql查看事件是否开启,设置启动时自动开启方法

    1.查看事件是否开启 SHOW VARIABLES LIKE 'event_scheduler' 2.设置当前事件开启 SET GLOBAL event_scheduler = 1; 或 SET GL ...

  10. 记一次MySQL表分区操作

    最近一次日常迭代中,业务线需要对一张大表进行联合查询,查询性能可想而知,测试过程中服务接口直接响应超时,导致服务不可用,最后临时对该表进行分区操作,暂时缓解性能问题.由于是第一次操作表分区,姑且记录一 ...

随机推荐

  1. 大米cms爆破后台及支付逻辑漏洞

    又找到个网站挖洞,我来康康. 大米手机是个什么鬼手机??看一下吧 这个支付页面好熟悉,可能存在支付逻辑漏洞,咱们用burp改个包看看. 先支付一个看看 把包里那个=1改成0试试~ 证实确实存在支付逻辑 ...

  2. pngquant 在 Windows 上压缩带中文路径的 png 图片

    pngquant 是一个优秀的 png 压缩工具,但是在 Windows 上不支持目录中带有 unicode 字符(例如中文)的文件.所以要用一个折中的办法(即标准输入)让 pngquant 压缩目录 ...

  3. 2021-03-10:一个数组上共有 N 个点,序号为0的点是起点位置,序号为N-1 的点是终点位置。现在需要依次的从 0 号点走到 N-1 号点。但是除了 0 号点和 N-1 号点,他可以在其余的 N-2 个位置中选出一个点,并直接将这个点忽略掉,问从起点到终点至少走多少距离?

    2021-03-10:一个数组上共有 N 个点,序号为0的点是起点位置,序号为N-1 的点是终点位置.现在需要依次的从 0 号点走到 N-1 号点.但是除了 0 号点和 N-1 号点,他可以在其余的 ...

  4. 2022-02-03:有一队人(两人或以上)想要在一个地方碰面,他们希望能够最小化他们的总行走距离。 给你一个 2D 网格,其中各个格子内的值要么是 0,要么是

    2022-02-03:最佳的碰头地点. 有一队人(两人或以上)想要在一个地方碰面,他们希望能够最小化他们的总行走距离. 给你一个 2D 网格,其中各个格子内的值要么是 0,要么是 1. 1 表示某个人 ...

  5. 【故障公告】博客站点一台阿里云负载均衡被DDoS攻击

    13:06 收到阿里云的电话与邮件通知,博客站点的一台阿里云负载均衡因被 DDoS 攻击被关进黑洞(所有访问被屏蔽),部分用户的访问受影响,由此给您带来麻烦,请您谅解. 您的IP:x.x.x.x 实例 ...

  6. docker升级gitlab

    昨天在家部署了gitlab,版本居然是15.10,公司版本却是14.6,升级一波. 官方文档: https://docs.gitlab.com/ee/update/#upgrading-without ...

  7. ARC142

    ARC142 考试情况:一眼订正,鉴定为做出前三题. A - Reverse and Minimize 分析题目性质可得三种情况: \(K\) 末尾有 \(0\) 最多只有 \(K\) 本身一个答案. ...

  8. R 包 pathview 代谢通路可视化

    pathview R 包是一个集成 pathway 通路数据与可视化的工具集.它用于把用户的数据映射并渲染到相关的 pathway 通路图上,用户只需要提供基因或者化合物数据(gene or comp ...

  9. 【Python&RS】GDAL对栅格数据重采样/对齐栅格

            GDAL(Geospatial Data Abstraction Library)是一个在X/MIT许可协议下的开源栅格空间数据转换库.它利用抽象数据模型来表达所支持的各种文件格式.它 ...

  10. 8. RESTful案例

    1. 准备工作 ‍ 和传统 CRUD 一样,实现对员工信息的增删改查. 搭建环境 准备实体类 package com.atguigu.mvc.bean; public class Employee { ...