MySQL故障案例
阿新 • • 發佈:2018-04-09
mysql第1章 MySQL故障案例:
1.1 背景說明:
mysql的架構中沒有主從復制的體系,也沒有按時進行備份
數據庫中有兩個庫conf庫和jira庫,僅有一份備份的數據,還是一年前的備份
1.2 故障場景:
意外宕機,導致磁盤物理損壞,也就是說mysql軟件程序中data數據目錄中的jira文件都沒有了
數據庫無法啟動,經過檢查,conf庫數據文件都還在,也就是ibd和frm文件都存在
領導要求,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故障案例