更多博文請關注:沒有傘的孩子必須努力奔跑 (www.xuchanggang.cn)mysql
在實際的工做中,咱們可能常常會遇到數據庫宕機,數據丟失的狀況,下面,我將演示一個模擬環境sql
[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 ....)
# 全備應用日誌 [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;