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. 2023-04-02:设计一个仓库管理器,提供如下的方法: 1) void supply(String item, int num, int price) 名字叫item的商品,个数num,价格pri

    2023-04-02:设计一个仓库管理器,提供如下的方法: void supply(String item, int num, int price) 名字叫item的商品,个数num,价格price. ...

  2. 2021-10-10:杨辉三角 II。给定一个非负索引 rowIndex,返回「杨辉三角」的第 rowIndex 行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。力扣119。

    2021-10-10:杨辉三角 II.给定一个非负索引 rowIndex,返回「杨辉三角」的第 rowIndex 行.在「杨辉三角」中,每个数是它左上方和右上方的数的和.力扣119. 福大大 答案20 ...

  3. Django4全栈进阶之路20 项目实战(三种方式开发部门管理):方式一:FBV

    1.模型 from django.db import models from django.contrib.auth.models import User # Create your models h ...

  4. JVM原理剖析

    前言 本文讨论的JVM以JDK1.8为基准点,附带会横向比较,往前推到JDK1.6.JVM是任何一个学习JAVA的程序员绕不开的核心,本文就会围绕这个核心展开对它剖析,希望能给广大的程序员带来帮助. ...

  5. obloader 基于典型场景数据导入

    作者:刘书盛 热衷技术分享.编写技术文档 原创作品 oceanbase 数据库 原创内容未经授权不得随意使用,转载请联系小编并注明来源,谢谢! 预处理函数: 函数签名 返回类型 描述 LOWER(ch ...

  6. Updates were rejected because the tip of your current branch is behind

    最近本地一个flutter项目因为当时使用可视化创建的时候出了一些问题,但是起初没有注意,后来因为需要新增一个语音插件,需要修改原生android MainActivity.java,才发现这个目录根 ...

  7. 小程序打印饼图报错VM6541:1 thirdScriptError Converting circular structure to JSON;

    今日使用小程序开发饼图页面,由于一个页面需要打印多个饼图,所以需要将echarts对象进行缓存,于是出现了如下js报错问题 一. 错误代码 VM6541:1 thirdScriptError Conv ...

  8. SpringBoot整合OSS文件上传

    一.注册阿里云账号并开通OSS服务 1.登录阿里云账号 2.创建一个bucket 3.创建子用户 对自用户分配权限,打开操作OSS的全部权限(也可根据业务需求进行更改) 4.配置上传跨域规则 任何来源 ...

  9. C++面试八股文:static和const的关键字有哪些用法?

    某日二师兄参加XXX科技公司的C++工程师开发岗位第7面: 面试官:C++中,static和const的关键字有哪些用法? 二师兄:satic关键字主要用在以下三个方面:1.用在全局作用域,修饰的变量 ...

  10. #PowerBi Superchange PowerBi 序言部分笔记(2)

    Xmind本文思维导图 序言部分,主要讲述了BI的分类及发展,以及作者推荐的学习方法.重点是介绍了powerbi的主要四大步骤. 即: 一:数据采集 Data acquisition: Power B ...