1. 程式人生 > >MySQL故障案例

MySQL故障案例

mysql

第1章 MySQL故障案例:

1.1 背景說明:

mysql的架構中沒有主從復制的體系,也沒有按時進行備份

數據庫中有兩個庫conf庫和jira,僅有一份備份的數據,還是一年前的備份

1.2 故障場景:

意外宕機,導致磁盤物理損壞,也就是說mysql軟件程序中data數據目錄中的jira文件都沒有了

數據庫無法啟動,經過檢查,conf庫數據文件都還在,也就是ibdfrm文件都存在

領導要求,conf還是好的,能不能臨時先把數據庫跑起來,然後想辦法修復jira

1.3 故障環境模擬:

1.3.1 進入到data數據庫目錄下,刪除某一個庫的.ibd文件

[root@db01 jiang]# pwd
/application/mysql/data/jiang
[root@db01 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
[root@db01 jiang]# echo 123 >stu.ibd

1.3.2 重啟mysql服務

[root@db01 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多實例,多實例的搭建這裏不進行演示,然後啟動多實例

[root@db01 3307]# sh /server/scripts/mysql.sh start
MySQL 3307  Starting                                       [  OK  ]
[root@db01 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用戶

[root@db01 zabbix]# cp -a ../people.ibd  .
[root@db01 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故障案例