數據庫崩潰,利用備份和日誌進行災難恢復

      更多博文請關注:沒有傘的孩子必須努力奔跑 (www.xuchanggang.cn)mysql


     在實際的工做中,咱們可能常常會遇到數據庫宕機,數據丟失的狀況,下面,我將演示一個模擬環境sql

1.數據庫正常啓動插入數據:
[root@client103 ~]# mysql -uroot -pkongzhong
mysql> use test;
mysql> insert into a select * from a;
#注: 這裏不演示建表,默認你們都懂
# 下面進行一次全備
[root@client103 ~]#  innobackupex --user=root --password=kongzhong --defaults-file=/etc/my.cnf --port=3306  /tmp/backup/ >/tmp/backup/innoback.log 2>&1
# 再次插入數據
mysql> insert into a select * from a;
# 實行增量備份
[root@client103 ~]#  innobackupex --user=root --password=kongzhong --defaults-file=/etc/my.cnf --port=3306 --incremental --incremental-basedir=/tmp/backup/2014-02-27_13-24-51/  /tmp/backup/
# 再次插入數據
mysql> insert into a select * from a;
# 此時你們記錄一下如今的總行數(一會還原須要覈對數據的)
# 此時數據庫宕機
#模擬宕機操做爲:
# 1.將數據目錄的下的二進制日誌,複製到 /tmp/backup,一會須要重演日誌(此步很是重要,複製操做默認你們會了)
# 2.刪除數據目錄下的全部文件,此時數據庫就崩潰了(若是關閉數據庫,是關不了,記得殺掉進程,kill -9 ....)
2.數據庫宕機後執行恢復操做
# 全備應用日誌
[root@client103 ~]# innobackupex --apply-log /tmp/backup/2014-02-27_13-24-51/
# 增備應用日誌
[root@client103 ~]# innobackupex --apply-log /tmp/backup/2014-02-27_13-24-51/ --incremental-dir=/tmp/backup/2014-02-27_13-32-44/
# 應用完日誌,利用全備恢復數據
[root@client103 ~]# innobackupex --copy-back /tmp/backup/2014-02-27_13-24-51/
# 修改數據目錄權限爲mysql:mysql
[root@client103 ~]# chown mysq:mysql /var/lib/mysql -R
# 啓動數據庫
[root@client103 ~]# /etc/init.d/mysql start
# 登錄數據庫,查看數據行數,發現數值與崩潰前是不一致的,因此須要利用日誌恢復
[root@client103 ~]# mysql -uroot -pkongzhong
mysql> use test;
mysql>  select count(*) from a;
# 查看最後一次增備完成時的日誌文件名和pos號(備份時自動記錄的)
[root@client103 ~]# cat /tmp/backup/2014-02-27_13-32-44/xtrabackup_binlog_info
mysql-103-bin.000005    3694
# 因此,咱們使用二進制執行恢復時,起始點爲3694
# 利用日誌恢復
[root@client103 ~]# mysqlbinlog --start-pos=3694 /tmp/backup/mysql-103-bin.000005  |mysql -uroot -pkongzhong
# 此時在登錄數據庫查看數據是否相符,請自行測試
mysql> use test;
mysql>  select count(*) from a;
相關文章
相關標籤/搜索