總結Mysql備份與恢復

*******************************************************************

基礎理論篇

 一、數據備份的重要性

 二、備份類型

 三、數據庫備份策略  

實際操作篇

 一、準備測試環境

 二、使用mysqldump命令備份與恢復數據庫

 三、使用LVM鏡像備份數據

 四、使用Xtrabackup進行MySQL備份與恢復

*******************************************************************


基礎理論篇


一、備份數據的重要性

    在任何一家企業中,數據都是無價的,如果企業的數據丟失或損壞,我們之前也沒有對數據進行備份,那麼此時對與企業來說損失是慘重的,如果恰恰損壞或丟失的數據是企業的核心數據那麼此時企業的前景都是未卜的,由此可見數據備份對於一家企業是多麼的重要。

二、備份類型

  • 完全備份:備份整個數據庫

  • 增量備份:數據庫從上一次完全備份或者最近一次的增量備份以來改變的內容的備份

  • 差異備份:基於的是最近一次的完整數據備份,差異備份僅捕獲自該次完整備份後發生更改的數據。

三、數據庫備份策略

3.1、備份類型組合

  • 採用完整備份和增量備份相結合的自動化備份策略

  • 採用完整備份和差異備份相結合的自動化備份策略

3.2、備份週期

  • 每週定期自動完整備份一次數據,每天自動增量備份或差異備份數據

3.3、備份地點

  • 採用異機備份放式,即將數據自動備份到數據庫之外的其它服務器

3.4、數據恢復測試

  • 備份完數據以後應定期恢復測試,以保證備份數據的完整性

實際操作篇


一、準備測試環境

  由於mysql默認是將二進制日誌和數據是放在同一目錄下的,當數據損壞時,二進制日誌也有可能遭遇破壞,爲了保證二進制日誌的安全性,將數據與二進制分開存放

1.1、創建二進制日誌目錄並修改權限

[root@localhost ~]# mkdir /mybinlog
[root@localhost ~]# chmod mysql:mysql /mybinlog/

1.2、修改mysql的主配置文件

[root@localhost ~]# sed -i s@log-bin=mysql-bin@log-bin=/mybinlog/mysql-bin@g  /etc/my.cnf

1.3、啓動mysql服務

[root@localhost ~]# service mysqld start
Starting MySQL.. SUCCESS

1.4、創建數據庫與表(用戶後期備份測試使用)

[root@localhost ~]# mysql -uroot
mysql> create database xiaodong;
Query OK, 1 row affected (0.00 sec)
mysql> use xiaodong;
Database changed
mysql> create table tb1 (id int auto_increment primary key,name char(30));
Query OK, 0 rows affected (0.00 sec)
mysql> insert into tb1 (name) values ('wu song'),('song jiang');
Query OK, 2 rows affected (0.03 sec)
Records: 2  Duplicates: 0  Warnings: 0
mysql> select * from tb1;
+----+------------+
| id | name       |
+----+------------+
|  1 | wu song    |
|  2 | song jiang |
+----+------------+
2 rows in set (0.00 sec)

1.5、創建備份數據庫的目錄

[root@localhost ~]# mkdir /backup


二、使用mysqldump命令備份與恢復數據庫

2.1、備份數據庫

[root@localhost data]# mysqldump -uroot --databases xiaodong  --lock-all-tables --master-data=2 --events > /backup/mysql-`date +%F`.sql

註釋:

   --all-databases   :   備份所有數據庫

   --lock-all-tables : 備份時鎖定所有表

   --master-data=2   : 在備份文件中記錄當前二進制日誌的位置,並且爲註釋的,1是不註釋掉在                         主從複製中才有意義

   --databases      :此選項備份單個數據庫,並且在恢復時無需先創建數據庫,直接導入就可以

2.2、備份完之後數據庫中增加了新表tb2

mysql> select database();    ##查看默認數據庫
+------------+
| database() |
+------------+
| xiaodong   |
+------------+
1 row in set (0.00 sec)
mysql>  create table tb2 (id int auto_increment primary key,name char(30));
Query OK, 0 rows affected (0.00 sec)
mysql> insert into tb2 (name) values ('yang guo'),('xiao long nv');
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0
mysql> select * from tb2;
+----+--------------+
| id | name         |
+----+--------------+
|  1 | yang guo     |
|  2 | xiao long nv |
+----+--------------+
2 rows in set (0.00 sec)

2.3、此時管理員誤操作將數據庫刪除

mysql> drop database xiaodong;
Query OK, 2 rows affected (0.00 sec)
mysql>

  假如刪除的數據庫對於企業來說很重要,此時我們想要恢復數據,這該怎麼辦呢? 可能你會立刻想到,之前我們不是備份過數據庫嘛,直接恢復不就可以了嘛。但是請不要忘記,tb2表是在數據備份之後創建的,顯然只是簡單的恢復是無法滿足我們的需求的,此時就需要用到二進制日誌;

2.4、查看完整備份文件中的MASTER_LOG_POS的值

[root@localhost mybinlog]# less /backup/mysql-2013-09-02.sql
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=581;
-- Current Database: `xiaodong`
--
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `xiaodong` /*!40100 DEFAULT CHARACTER SET utf8 */;
USE `xiaodong`;

註釋:MASTER_LOG_FILE  指定日誌文件

    MASTER_LOG_POS   指定數據的還原點

注意:如果之前備份的時候沒有加--master-data=2 則不會出現MASTER_LOG_POS的值,此值對於數據恢復及其重要。    

2.5、查詢二進制日誌以確定數據還原點並導出日誌

[root@localhost ~]# mysqlbinlog --start-position  581 /mybinlog/mysql-bin.000001
# at 967                          ##需要還原581到967的數據
#130902  4:09:50 server id 1  end_log_pos 1056  Query   thread_id=5 exec_time=0 error_code=0
SET TIMESTAMP=1378066190/*!*/;
drop database xiaodong            ## 刪除了數據庫,無需恢復
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
[root@localhost ~]# mysqlbinlog --start-position  581 --stop-position 967 /mybinlog/mysql-bin.000001 > /tmp/mysql-bin.sq

2.6、數據恢復(完整備份+二進制日誌恢復數據)

[root@localhost ~]# mysql -uroot < /backup/mysql-2013-09-02.sql
[root@localhost ~]# mysql -uroot < /tmp/mysql-bin.sq

2.7、驗證數據庫是否恢復成功

[root@localhost ~]# mysql -uroot
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
| xiaodong           |
+--------------------+
5 rows in set (0.00 sec)
mysql> select * from xiaodong.tb1
    -> ;
+----+------------+
| id | name       |
+----+------------+
|  1 | wu song    |
|  2 | song jiang |
+----+------------+
2 rows in set (0.00 sec)
mysql> select * from xiaodong.tb2;
+----+--------------+
| id | name         |
+----+--------------+
|  1 | yang guo     |
|  2 | xiao long nv |
+----+--------------+
2 rows in set (0.00 sec)三、shiyong


三、使用LVM鏡像備份數據

3.1 Lvm的創建(詳細的過程請參考LVM詳解

[root@localhost ~]# pvcreate sdb{1,2,3}
[root@localhost ~]# vgcreate  testvg /dev/sdb{1,2,3}
[root@localhost ~]# lvcreate -L 1G -n testlv testvg
[root@localhost ~]# mke2fs -t ext4 /dev/testvg/testlv
[root@localhost ~]# mount /dev/testvg/testlv /mydata/
[root@localhost ~]# mkdir /mydata/data
[root@localhost ~]# chown -R mysql.mysql /mydata/data/

3.2、重新初始化數據庫並啓動服務

[root@localhost ~]# mkdir -pv /mydata/mybinlog #創建二進制目錄
[root@localhost ~]# chown mysql.mysql -pv /mydata/mybinlog/
[root@localhost ~]# cd /usr/local/mysql/
[root@localhost mysql]# ./scripts/mysql_install_db --user=mysql  --datadir=/mydata/data/
[root@localhost ~]# sed -i s@log-bin=/mybinlog/mysql-bin@log-bin=/mydata/mybinlog/mysql-bin@g /etc/my.cnf    #修改二進制日誌目錄
[root@localhost mysql]# service mysqld start

3.3、在數據庫中創建數據

[root@localhost ~]# mysql -uroot
mysql> set session sql_log_bin=0;            #關閉二進制日誌
Query OK, 0 rows affected (0.00 sec)
mysql> source /backup/mysql-2013-09-02.sql   #將之前的完整備份導入
mysql> set session sql_log_bin=1;            #開啓二進制日誌

3.4、創建LVM鏡像

[root@localhost mysql]# mysql
mysql> flush tables with read lock;             #施加全局鎖
Query OK, 0 rows affected (0.00 sec)
mysql> show master status;                      #記錄下狀態值
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 |      107 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
mysql>

注意:此時不能退出數據庫,退出全局鎖就會失效,我們重新打開一個終端來繼續下面的操作

[root@localhost /]# lvcreate -L 1G -s -p r -n mydata-snap /dev/testvg/testlv
  Logical volume "mydata-snap" created
[root@localhost /]#mount /dev/testvg/mydata-snap /mnt/  #掛載鏡像文件
mount: block device /dev/mapper/testvg-mydata--snap is write-protected, mounting read-only
[root@localhost /]#cd /mnt
[root@localhost mnt]# tar jcvf /backup/snap.tar.gz *
[root@localhost mnt]# cd /
[root@localhost /]#umount /mnt
[root@localhost /]#rm -rf /dev/testvg/mydata-snap

重新回到上一個終端,取消全局鎖或直接退出數據庫

mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)

3.5、繼續修改數據庫創建tb2表

mysql> select database();    ##查看默認數據庫
+------------+
| database() |
+------------+
| xiaodong   |
+------------+
1 row in set (0.00 sec)
mysql>  create table tb2 (id int auto_increment primary key,name char(30));
Query OK, 0 rows affected (0.00 sec)
mysql> insert into tb2 (name) values ('yang guo'),('xiao long nv');
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0
mysql> select * from tb2;
+----+--------------+
| id | name         |
+----+--------------+
|  1 | yang guo     |
|  2 | xiao long nv |
+----+--------------+
2 rows in set (0.00 sec)

3.6、增量備份數據

[root@localhost data]# mysqlbinlog --start-position 107 /mydata/mybinlog/mysql-bin.000003 > /backup/mysql-bin-`date +%F`.log

註釋:

   --start-position 107 是在創建Lvm鏡像時記錄的日誌

3.7、此時管理員誤刪除了數據庫

mysql> drop database xiaodong;
Query OK, 2 rows affected (0.07 sec)

3.8、恢復數據

[root@localhost ~]# cd /backup/
[root@localhost backup]# mkdir snap
[root@localhost backup]# tar xf snap.tar.gz -C snap
[root@localhost backup]# cd snap
[root@localhost snap]#cp * /mydata/data/ -a   #將數據庫複製到數據目錄中
[root@localhost snap]# mysql < /backup/mysql-bin-2013-09-02.log 導入增量備份


3.9、驗證數據庫是否恢復成功

[root@localhost ~]# mysql -uroot
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
| xiaodong           |
+--------------------+
5rows inset(0.00sec)
mysql> select * from xiaodong.tb1
-> ;
+----+------------+
| id | name       |
+----+------------+
|  1| wu song    |
|  2| song jiang |
+----+------------+
2rows inset(0.00sec)
mysql> select * from xiaodong.tb2;
+----+--------------+
| id | name         |
+----+--------------+
|  1| yang guo     |
|  2| xiao long nv |
+----+--------------+
2rows inset(0.00sec)


四、使用Xtrabackup進行MySQL備份與恢復

使用innobakupex備份時,其會調用xtrabackup備份所有的InnoDB表,複製所有關於表結構定義的相關文件(.frm)、以及MyISAM、MERGE、CSV和ARCHIVE表的相關文件,同時還會備份觸發器和數據庫配置信息相關的文件。這些文件會被保存至一個以時間命令的目錄中。xtrabackup下載地址://www.percona.com/software/percona-xtrabackup/

4.1、下載安裝xtrabackup此處使用percona-xtrabackup-2.1.4-656.rhel6.x86_64.rpm

[root@localhost ~]# rpm -ivh percona-xtrabackup-2.1.4-656.rhel6.x86_64.rpm
warning: percona-xtrabackup-2.1.4-656.rhel6.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID cd2efd2a: NOKEY
error: Failed dependencies:
    perl(DBD::mysql) is needed by percona-xtrabackup-2.1.4-656.rhel6.x86_64
    perl(Time::HiRes) is needed by percona-xtrabackup-2.1.4-656.rhel6.x86_64

4.1.1、安裝軟件包的時候出現了問題,需要先解決依賴關係

[root@localhost ~]# yum install perl-DBD-MySQL  perl-Time-HiRes -y

4.1.2、再次安裝xtrabackup

[root@localhost ~]# rpm -ivh percona-xtrabackup-2.1.4-656.rhel6.x86_64.rpm

4.2、創建備份數據的最小權限用戶

mysql> CREATE USER 'bkpuser'@'localhost' IDENTIFIED BY 's3cret';
mysql> REVOKE ALL PRIVILEGES,GRANT OPTION FROM 'bkpuser'@'localhost';
mysql> GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'bkpuser'@'localhost';
mysql> FLUSH PRIVILEGES;

4.3、完整備份一次mysql

[root@localhost ~]# innobackupex --user=bkpuser --password=s3cret /backup/
**********************
compact                           FALSE
rebuild-indexes                   FALSE
rebuild-threads                   1
incremental-force-scan            FALSE
defaults-group                    mysqld
xtrabackup: Error: Please set parameter 'datadir'
innobackupex: Error: ibbackup child process has died at /usr/bin/innobackupex line 416.

備份時候出現問題

4.3.1、解決問題

[root@localhost ~]# service mysqld stop
[root@localhost ~]# vim /etc/my.cnf
[mysqld]
datadir = /mydata/data             #添加此行指定數據目錄
[root@localhost ~]# service mysqld start

4.3.2、再次備份mysql

[root@localhost ~]# innobackupex --user=bkpuser --password=s3cret /backup/
innobackupex: Backup created in directory '/backup/2013-09-02_23-05-53'
innobackupex: MySQL binlog position: filename 'mysql-bin.000014', position 107
130902 23:05:56  innobackupex: Connection to database server closed
130902 23:05:56  innobackupex: completed OK!

4.4、查看Mysql備份目錄

[root@localhost ~]# cd /backup/
[root@localhost backup]# ls
2013-09-02_23-14-28
[root@localhost backup]# cd 2013-09-02_23-14-28/
[root@localhost 2013-09-02_23-14-28]# ls
backup-my.cnf  mysql               test      xtrabackup_binary       xtrabackup_checkpoints
ibdata1        performance_schema  xiaodong  xtrabackup_binlog_info  xtrabackup_logfile


註釋:

     xtrabackup_checkpoints —— 備份類型(如完全或增量)、備份狀態(如是否已經爲prepared狀態)和LSN(日誌序列號)範圍信息;

     每個InnoDB頁(通常爲16k大小)都會包含一個日誌序列號,即LSN。LSN是整個數據庫系統的系統版本號,每個頁面相關的LSN能夠表明此頁面最近是如何發生改變的。

     xtrabackup_binlog_info —— mysql服務器當前正在使用的二進制日誌文件及至備份這一刻爲止二進制日誌事件的位置。

     xtrabackup_binlog_pos_innodb —— 二進制日誌文件及用於InnoDB或XtraDB表的二進制日誌文件的當前position。

     xtrabackup_binary —— 備份中用到的xtrabackup的可執行文件;

     backup-my.cnf —— 備份命令用到的配置選項信息;

    一般情況下,在備份完成後,數據尚且不能用於恢復操作,因爲備份的數據中可能會包含尚未提交的事務或已經提交但尚未同步至數據文件中的事務。因此,此時數據文件仍處與不一致狀態。“準備”的主要作用正是通過回滾未提交的事務及同步已經提交的事務至數據文件也使得數據文件處於一致性狀態。

4.5、準備(prepare)一個完全備份

[root@localhost ~]# innobackupex --apply-log /backup/2013-09-02_23-14-28/
如果執行正確,其最後輸出的幾行信息通常如下:
xtrabackup: starting shutdown with innodb_fast_shutdown = 1
130902 23:36:04  InnoDB: Starting shutdown...
130902 23:36:08  InnoDB: Shutdown completed; log sequence number 1619980
130902 23:36:08  innobackupex: completed OK!

4.6、模擬數據庫損壞並恢復

[root@localhost ~]# service mysqld stop
[root@localhost ~]# rm -rf /mydata/data/*
[root@localhost ~]# innobackupex --copy-back /backup/2013-09-02_23-14-28/
出現如下幾行說明恢復完成
innobackupex: Starting to copy InnoDB log files
innobackupex: in '/backup/2013-09-02_23-14-28'
innobackupex: back to original InnoDB log directory '/mydata/data'
innobackupex: Copying '/backup/2013-09-02_23-14-28/ib_logfile1' to '/mydata/data'
innobackupex: Copying '/backup/2013-09-02_23-14-28/ib_logfile0' to '/mydata/data'
innobackupex: Finished copying back files.
130902 23:43:20  innobackupex: completed OK!
[root@localhost ~]# chown -R mysql.mysql /mydata/data/*
[root@localhost ~]# service mysqld start

4.7、測試數據是否恢復成功

[root@localhost ~]# mysql
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
| xiaodong           |
+--------------------+
5 rows in set (0.00 sec)
mysql> use xiaodong;
Database changed
mysql> show tables;
+--------------------+
| Tables_in_xiaodong |
+--------------------+
| tb1                |
+--------------------+
1 row in set (0.00 sec)
mysql> select * from tb1;
+----+------------+
| id | name       |
+----+------------+
|  1 | wu song    |
|  2 | song jiang |
+----+------------+
2 rows in set (0.01 sec)
mysql>

4.8、使用innobackupex進行增量備份

4.8.1、在數據庫中新增加一個表

mysql> select database();    ##查看默認數據庫
+------------+
| database() |
+------------+
| xiaodong   |
+------------+
1 row in set (0.00 sec)
mysql>  create table tb2 (id int auto_increment primary key,name char(30));
Query OK, 0 rows affected (0.00 sec)
mysql> insert into tb2 (name) values ('yang guo'),('xiao long nv');
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0
mysql> select * from tb2;
+----+--------------+
| id | name         |
+----+--------------+
|  1 | yang guo     |
|  2 | xiao long nv |
+----+--------------+
2 rows in set (0.00 sec)

4.8.2、增量備份數據

[root@localhost /]# mkdir /backupadd   #創建增量備份目錄
[root@localhost /]# innobackupex --user=bkpuser --password=s3cret --incremental /backupadd/ --incremental-basedir=/backup/2013-09-02_23-14-28/
出現以下信息說明備份成功
innobackupex: Backup created in directory '/backupadd/2013-09-02_23-56-24'
innobackupex: MySQL binlog position: filename 'mysql-bin.000016', position 493
130902 23:56:28  innobackupex: Connection to database server closed
130902 23:56:28  innobackupex: completed OK!

註釋:

   --incremental  指定增量備份的目錄

   --incremental-basedir  指定基於哪個備份(完整備份或上一次增量備份)做增量備份。

 注意:增量備份僅能應用於InnoDB或XtraDB表,對於MyISAM表而言,執行增量備份時其實進行的是完全備份。

如果數據庫再次發生修改,我們依然需要在次增量備份,備份命令與第一次增量備份的命令相同,只不過此選項--incremental-basedir 需要指定上一次的增量備份的數據,而不是完全備份

4.9、此時我們繼續修改數據庫,但是沒有做增量備份

[root@localhost ~]# mysql
mysql> user xiaodong;
mysql> create table tb3 (id int auto_increment primary key,name char(30));
Query OK, 0 rows affected (0.10 sec)
mysql> show tables;
+--------------------+
| Tables_in_xiaodong |
+--------------------+
| tb1                |
| tb2                |
| tb3                |
+--------------------+
3 rows in set (0.00 sec)
mysql> drop table tb2;
Query OK, 0 rows affected (0.01 sec)
mysql> drop table tb3;
Query OK, 0 rows affected (0.01 sec)

4.10、模擬此時數據庫意外故障。

[root@localhost ~]# sercie mysqld stop
[root@localhost ~]# rm -rf /mydata/data/*


注意:由於我的二進制日誌與數據目錄沒有在同一個目錄下,所以直接刪除了數據目錄,如果在同一目錄,切記一定要copy出來,不然數據就無法恢復。

4.11、實現數據恢復

4.11.1、準備(prepare)增量備份

增量備份與完全備份有着一些不同,尤其要注意的是:

(1)需要在每個備份(包括完全和各個增量備份)上,將已經提交的事務進行“重放”。“重放”之後,所有的備份數據將合併到完全備份上。

(2)基於所有的備份將未提交的事務進行“回滾”

[root@localhost ~]# innobackupex --apply-log --redo-only  /backup/2013-09-02_23-14-28/  #完整備份
出現以下信息說明成功
xtrabackup: starting shutdown with innodb_fast_shutdown = 1
130903  0:42:23  InnoDB: Starting shutdown...
130903  0:42:23  InnoDB: Shutdown completed; log sequence number 1619980
130903 00:42:23  innobackupex: completed OK!
[root@localhost ~]# innobackupex --apply-log --redo-only  /backup/2013-09-02_23-14-28/ --incremental-dir=/backupadd/2013-09-03_00-06-59/  #增量備份
出現以下信息說明成功
innobackupex: Copying '/backupadd/2013-09-03_00-06-59/mysql/time_zone_leap_second.frm' to '/backup/2013-09-02_23-14-28/mysql/time_zone_leap_second.frm'
innobackupex: Copying '/backupadd/2013-09-03_00-06-59/mysql/servers.frm' to '/backup/2013-09-02_23-14-28/mysql/servers.frm'
130903 00:43:12  innobackupex: completed OK!

註釋:

   --redo-only  只是事物提交,不回滾事物

   --incremental-dir  指定增量備份的文件

   如果有多個增量備份,只需要修改--incremental-dir後面的值就可以。

4.11.2、查看增量備份是否準備完成

[root@localhost ~]# cat /backup/2013-09-02_23-14-28/xtrabackup_checkpoints   #完整備份
backup_type = full-prepared
from_lsn = 0
to_lsn = 1622723
last_lsn = 1622723
compact = 0
[root@localhost ~]# cat /backupadd/2013-09-03_00-06-59/xtrabackup_checkpoints   #增量備份
backup_type = incremental
from_lsn = 1618177
to_lsn = 1622723
last_lsn = 1622723
compact = 0
[root@localhost ~]#


   增量備份中的to_lsn = 1622723 與完整備份中  to_lsn = 1622723 值相等。說明準備完成

註釋:

     backup_type      指定備份類型

    from_lsn       開始日誌序列號

     to_lsn          結束日誌序列號

     last_lsn       最後一個日誌序列號

     compact       是否開啓壓縮功能

4.11.3、查看二進制日誌文件及至備份這一刻爲止二進制日誌事件的位置是否一致

[root@localhost ~]# cat /backup/2013-09-02_23-14-28/xtrabackup_binlog_info    #完整備份
mysql-bin.000016    493
[root@localhost ~]# cat /backupadd/2013-09-03_00-06-59/xtrabackup_binlog_info    #增量備份
mysql-bin.000016    493
[root@localhost ~]#

4.11.4、恢復數據,並啓動服務

[root@localhost ~]# innobackupex --copy-back /backup/2013-09-02_23-14-28/
[root@localhost ~]# chown -R mysql.mysql  /mydata/data/*
[root@localhost ~]# service mysqld start
[root@localhost ~]#mysql
mysql> use xiaodong;
Database changed
mysql> show tables;
+--------------------+
| Tables_in_xiaodong |
+--------------------+
| tb1                |
| tb2                |
+--------------------+
2 rows in set (0.00 sec)

由於我們是在增量備份之前創建的tb2,所以tb2被恢復了,但是我們後來將tb2刪除了,此時我們需要二進制日誌恢復後面的操作

4.11.5、查看完整備份中的二進制的位置信息

[root@localhost ~]# cat /backup/2013-09-02_23-14-28/xtrabackup_binlog_info
mysql-bin.000016    493      #記錄備份的位置

4.11.6、將二進制日誌中還原點之後的數據導出

[root@localhost ~]# mysqlbinlog --start-position 493 /mydata/mybinlog/mysql-bin.000016  > /tmp/mysql-bin.sq

4.12、還原數據並驗證

mysql> source /tmp/mysql-bin.sq
mysql> flush logs;
Query OK, 0 rows affected (0.05 sec)
mysql> use xiaodong;
Database changed
mysql> show tables;
+--------------------+
| Tables_in_xiaodong |
+--------------------+
| tb1                |
+--------------------+
1 row in set (0.00 sec)
mysql>

總結:

     在數據恢復過程中,二進制日誌起到的作用及其重要,在數據庫安裝的的時候,切記將二進制日誌與數據文件分開存放,並實時的備份二進制日誌。在數據的備份與還原中最難理解的也就是使用二進制日誌來恢復數據庫,只要確定日誌還原點,那麼恢復數據應該不是問題。歡迎博友們共同探討數據的備份與恢復的相關話題,以確保將企業的損失降低到最低。。。。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章