程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> 數據庫崩潰,利用備份和日志進行災難恢復

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

編輯:關於MYSQL數據庫

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

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.數據庫宕機後執行恢復操作

在實際的工作中,我們可能經常會遇到數據庫宕機,數據丟失的情況,下面,我將演示一個模擬環境
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;

 以上就是本文的全部內容,希望大家可以喜歡。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved