总结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>

总结:

     在数据恢复过程当中,二进制日志起到的做用及其重要,在数据库安装的的时候,切记将二进制日志与数据文件分开存放,并实时的备份二进制日志。在数据的备份与还原中最难理解的也就是使用二进制日志来恢复数据库,只要肯定日志还原点,那么恢复数据应该不是问题。欢迎博友们共同探讨数据的备份与恢复的相关话题,以确保将企业的损失下降到最低。。。。

相关文章
相关标签/搜索