總結Mysql備份與恢復

*******************************************************************mysql

基礎理論篇sql

 1、數據備份的重要性數據庫

 2、備份類型vim

 3、數據庫備份策略  
安全

實際操做篇服務器

 1、準備測試環境session

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

 3、使用LVM鏡像備份數據less

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

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


基礎理論篇


1、備份數據的重要性

    在任何一家企業中,數據都是無價的,若是企業的數據丟失或損壞,咱們以前也沒有對數據進行備份,那麼此時對與企業來講損失是慘重的,若是偏偏損壞或丟失的數據是企業的核心數據那麼此時企業的前景都是未卜的,因而可知數據備份對於一家企業是多麼的重要。

2、備份類型

  • 徹底備份:備份整個數據庫

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

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

3、數據庫備份策略

3.一、備份類型組合

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

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

3.二、備份週期

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

3.三、備份地點

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

3.四、數據恢復測試

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

實際操做篇


1、準備測試環境

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

1.一、建立二進制日誌目錄並修改權限

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

1.二、修改mysql的主配置文件

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

1.三、啓動mysql服務

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

1.四、建立數據庫與表(用戶後期備份測試使用)

[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.五、建立備份數據庫的目錄

[root@localhost ~]# mkdir /backup


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

2.一、備份數據庫

[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.二、備份完以後數據庫中增長了新表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.三、此時管理員誤操做將數據庫刪除

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

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

2.四、查看完整備份文件中的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.五、查詢二進制日誌以肯定數據還原點並導出日誌

[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.六、數據恢復(完整備份+二進制日誌恢復數據)

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

2.七、驗證數據庫是否恢復成功

[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)3、shiyong


3、使用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.二、從新初始化數據庫並啓動服務

[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.三、在數據庫中建立數據

[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.四、建立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.五、繼續修改數據庫建立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.六、增量備份數據

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

註釋:

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

3.七、此時管理員誤刪除了數據庫

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

3.八、恢復數據

[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.九、驗證數據庫是否恢復成功

[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)


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

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

4.一、下載安裝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.一、安裝軟件包的時候出現了問題,須要先解決依賴關係

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

4.1.二、再次安裝xtrabackup

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

4.二、建立備份數據的最小權限用戶

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.三、完整備份一次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.一、解決問題

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

4.3.二、再次備份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.四、查看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.五、準備(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.六、模擬數據庫損壞並恢復

[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.七、測試數據是否恢復成功

[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.八、使用innobackupex進行增量備份

4.8.一、在數據庫中新增長一個表

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.二、增量備份數據

[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.九、此時咱們繼續修改數據庫,可是沒有作增量備份

[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.十、模擬此時數據庫意外故障。

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


注意:因爲個人二進制日誌與數據目錄沒有在同一個目錄下,因此直接刪除了數據目錄,若是在同一目錄,切記必定要copy出來,否則數據就沒法恢復。

4.十一、實現數據恢復

4.11.一、準備(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.二、查看增量備份是否準備完成

[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.三、查看二進制日誌文件及至備份這一刻爲止二進制日誌事件的位置是否一致

[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.四、恢復數據,並啓動服務

[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.五、查看完整備份中的二進制的位置信息

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

4.11.六、將二進制日誌中還原點以後的數據導出

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

4.十二、還原數據並驗證

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>

總結:

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

相關文章
相關標籤/搜索