WIKI系統宕機恢復:
由於WIKI系統爲虛擬機環境,當出現問題時可直接使用鏡像恢復。而且虛擬機環境故障率較低。
Mysql數據庫宕機恢復:
mysql增量恢復必備條件:
*開啓mysqllog-bin日誌功能
mysql數據庫開啓了log-bin參數記錄binlog日誌功能如下:
[root@wikiDB~]# grep log-bin /data/3306/my.cnf
log-bin= /data/3306/mysql-bin
*存在mysql數據庫全備
宕機恢復解讀:
如上圖所示;我們的mysql數據庫,每天凌晨00:00-01:00期間,對數據庫進行分庫備份。備份方式爲不鎖表備份,不影響線上用戶查看資料。同時定時任務1個小時就對binlog日誌進行一次遠端推送,到WIKI虛擬主機上(至於爲什麼放在虛擬主機上,我是這樣做的。虛擬主機首先關於硬件的故障是沒有的,只要不是人爲操作。那麼它就很安全;而且虛擬主機備份起來很方便,做個鏡像即可。當出現問題時,還原鏡像;)。同時mysql數據庫開啓samba服務,允許備份服務器進行拷貝數據。也就是說我們同時做了雙備份,當出現問題時,有多餘的備份在手裏。
宕機恢復步驟:
1)檢查全備及binlog日誌
[root@lamp3306]# ll /server/backup/
總計 148
drwxr-xr-x2 root root 4096 2013-06-17192.168.126.129
-rw-r--r--1 root root 136950 06-16 22:18 mysql_backup_2013-06-16.sql.gz
-rw-r--r--1 root root 140 06-16 22:18mysqllogs_2013-06-16.log
[root@lamp3306]# ll -rt /data/3306/mysql-bin.*
-rw-rw----1 mysql mysql 149 06-16 22:18/data/3306/mysql-bin.000014
-rw-rw----1 mysql mysql 149 06-16 22:18/data/3306/mysql-bin.000013
-rw-rw----1 mysql mysql 149 06-16 22:18/data/3306/mysql-bin.000012
-rw-rw----1 mysql mysql 149 06-16 22:18/data/3306/mysql-bin.000011
-rw-rw----1 mysql mysql 149 06-16 22:18/data/3306/mysql-bin.000010
-rw-rw----1 mysql mysql 149 06-16 22:18/data/3306/mysql-bin.000009
-rw-rw----1 mysql mysql 149 06-16 22:18/data/3306/mysql-bin.000008
-rw-rw----1 mysql mysql 1292 06-16 22:18 /data/3306/mysql-bin.000007
-rw-rw----1 mysql mysql 415 06-16 22:40 /data/3306/mysql-bin.000015
增量日誌的開始點,可以看時間的先後,進行判斷。這裏我們發現是22:40爲最新的binlog。
立即刷新並備份出binlog
[root@lamp3306]# mysqladmin -uroot -p'oldboy' -S /data/3306/mysql.sock flush-logs
[root@lamp3306]# ll -rt /data/3306/mysql-bin.*
-rw-rw----1 mysql mysql 149 06-16 22:18/data/3306/mysql-bin.000014
-rw-rw----1 mysql mysql 149 06-16 22:18/data/3306/mysql-bin.000013
-rw-rw----1 mysql mysql 149 06-16 22:18/data/3306/mysql-bin.000012
-rw-rw----1 mysql mysql 149 06-16 22:18/data/3306/mysql-bin.000011
-rw-rw----1 mysql mysql 149 06-16 22:18/data/3306/mysql-bin.000010
-rw-rw----1 mysql mysql 149 06-16 22:18/data/3306/mysql-bin.000009
-rw-rw----1 mysql mysql 149 06-16 22:18/data/3306/mysql-bin.000008
-rw-rw----1 mysql mysql 1292 06-16 22:18 /data/3306/mysql-bin.000007
-rw-rw----1 mysql mysql 106 06-16 22:51/data/3306/mysql-bin.000016
-rw-rw----1 mysql mysql 458 06-16 22:51/data/3306/mysql-bin.000015
[root@lamp3306]# cp mysql-bin.000015 /server/backup/
恢復binlog生成SQL語句
[root@lamp3306]# cd /server/backup/
[root@lampbackup]# mysqlbinlog mysql-bin.000015 >bin.sql #該命令爲將二進制的binlog日誌,轉換爲sql語句。
[root@lampbackup]# egrep -v "^#|^$|\*" bin.sql
BINLOG'
M8m9UQ8BAAAAZgAAAGoAAAAAAAQANS4xLjYyLWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAEzgNAAgAEgAEBAQEEgAAUwAEGggAAAAICAgC
BEGIN
insertinto student values(0006,'xiaobao','man',29,'computer')
dropdatabase oldboy
DELIMITER;
可以看出,這個文件就是我們數據庫的增量。也就是從0點備份到發現出問題期間的所有mysql數據庫的操作。
提示:如果有多個庫,此時:
mysqlbinlogmysql-bin.000016 -d oldboy >binlog.sql當然對於庫也要分開進行備份,否則恢復的時候比較麻煩。
2)恢復凌晨全備
開始恢復,先回復凌晨全備,然後恢復整備到出問題時的所有增量數據。
解壓全備文件
[root@lampbackup]# gzip -d mysql_backup_2013-06-16.sql.gz
開始恢復全備
[root@lampbackup]# mysql -uroot -p'oldboy' -S /data/3306/mysql.sock<mysql_backup_2013-06-16.sql
[root@lampbackup]# mysql -uroot -p'oldboy' -S /data/3306/mysql.sock -e "showdatabases;"
+--------------------+
|Database |
+--------------------+
|information_schema |
|baozi |
|chengcai |
|haole |
|lalala |
|mysql |
|oldboy |
|test |
|xiaobao |
+--------------------+
[root@lampbackup]# mysql -uroot -p'oldboy' -S /data/3306/mysql.sock -e "set namesgbk;select * from oldboy.student;"
+-----+-----------+------+------+--------------------+
| Sno| Sname | Ssex | Sage | Sdept |
+-----+-----------+------+------+--------------------+
| 1 | ???? | ?? | 24 | ?????ú???? |
| 2 | elain | ?? | 26 | computer applica |
| 3 | xiaozhang | ?? | 28| ???÷???í |
| 4 | jeacen | ?? | 20 | computer applica |
| 5 | ???? | ?? | 29 | ?????ú???§?????? |
+-----+-----------+------+------+--------------------+
3)恢復增量備份
然後我們進行恢復全備和增量備份:
[root@lampbackup]# mysql -uroot -p'oldboy' -S /data/3306/mysql.sock<mysql_backup_2013-06-16.sql
[root@lampbackup]# mysql -uroot -p'oldboy' -S /data/3306/mysql.sock <bin.sql [root@lamp backup]# mysql-uroot -p'oldboy' -S /data/3306/mysql.sock -e "set names gbk;select * fromoldboy.student;"
+-----+-----------+------+------+--------------------+
| Sno| Sname | Ssex | Sage | Sdept |
+-----+-----------+------+------+--------------------+
| 1 | ???? | ?? | 24 | ?????ú???? |
| 2 | elain | ?? | 26 | computer applica |
| 3 | xiaozhang | ?? | 28| ???÷???í |
| 4 | jeacen | ?? | 20 | computer applica |
| 5 | ???? | ?? | 29 | ?????ú???§?????? |
| 6 | xiaobao | ma | 29 | computer |
+-----+-----------+------+------+--------------------+
現在我們恢復到了0點到出現問題時刻的全備數據。
注意:恢復時應嚴格按照步驟進行,提取最新的binlog日誌。儘量減少數據的丟失。保證數據的完整。