MySQL故障案例

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL故障案例相关的知识,希望对你有一定的参考价值。

第1章 mysql故障案例:

1.1 背景说明:

mysql的架构中没有主从复制的体系,也没有按时进行备份

数据库中有两个库conf库和jira,仅有一份备份的数据,还是一年前的备份

1.2 故障场景:

意外宕机,导致磁盘物理损坏,也就是说mysql软件程序中data数据目录中的jira文件都没有了

数据库无法启动,经过检查,conf库数据文件都还在,也就是ibdfrm文件都存在

领导要求,conf还是好的,能不能临时先把数据库跑起来,然后想办法修复jira

1.3 故障环境模拟:

1.3.1 进入到data数据库目录下,删除某一个库的.ibd文件

[[email protected] jiang]# pwd
/application/mysql/data/jiang
[[email protected] jiang]# ll
total 16
-rw-rw---- 1 mysql mysql   61 Apr  3 19:01 db.opt
-rw-rw---- 1 mysql mysql 8556 Apr  8 21:19 stu.frm
-rw-rw---- 1 mysql mysql    0 Apr  8 21:25 stu.ibd
[[email protected] jiang]# echo 123 >stu.ibd

1.3.2 重启mysql服务

[[email protected] jiang]# /etc/init.d/mysqld  start
Starting MySQL... ERROR! The server quit without updating PID file (/application/mysql/data/db01.pid).

1.4 临时解决方案:

1.4.1 搭建一个临时节点,也就是mysql多实例,多实例的搭建这里不进行演示,然后启动多实例

[[email protected] 3307]# sh /server/scripts/mysql.sh start
MySQL 3307  Starting                                       [  OK  ]
[[email protected] 3307]# ss -tunlp|grep 3307
tcp    LISTEN     0      80       :::3307                 :::*                   users:(("mysqld",pid=5219,fd=11))

1.4.2 进入到数据库,创建表结构

要恢复什么表,需要创建好和故障前一样的表结构,然后导入.ibd文件,否则无法导入,

mysql> create table people (id int,name varchar(20));

1.4.3 删除新创建的库的.ibd文件,因为没有数据,一会要导入新的数据

mysql> alter table people discard tablespace;
Query OK, 0 rows affected (0.27 sec)

1.4.4 .ibd文件复制到多实例的数据库目录下,并授权给mysql用户

[[email protected] zabbix]# cp -a ../people.ibd  .
[[email protected] zabbix]# chown mysql.mysql people.ibd

1.4.5 重新导入.ibd文件

mysql> alter table people import tablespace;
Query OK, 0 rows affected, 1 warning (0.34 sec)
mysql> select * from people;
+------+-----------------------------------------------------------------------------------------------------------------+
| id   | name                                                                                                            |
+------+-----------------------------------------------------------------------------------------------------------------+
| NULL | ang  ??        1       ssd            1       angbo      (??        1       angbosd                        |
| NULL | NULL                                                                                                            |
| NULL | angbosd                                                                                                         |
| NULL | ssd            1       angbo     (??        1       angbosd                                                  |
+------+-----------------------------------------------------------------------------------------------------------------+
4 rows in set (0.00 sec)

查看表中所有内容,已经可以看到数据了

说明:所以架构中,无论架构体系的大小,或者说数据存储量的多少,该备份的一定要进行备份,这个懒偷不得

对于备份数据,可以定时全量备份sql文件,或者把mysql服务做主从复制


以上是关于MySQL故障案例的主要内容,如果未能解决你的问题,请参考以下文章

企业案例 故障修复mysql主从故障解决过程

MYSQL误删用户故障解决案例

Mysql模拟故障恢复案例过程

基于案例分析 MySQL Group Replication 的故障检测流程

MySQL故障诊断常用方法手册(含脚本案例)

MySQL主从复制故障案例二