首页 > 数据库 > mysql > 基于extrabackup完成备份(物理备份)
2015
07-30

基于extrabackup完成备份(物理备份)

一、环境准备

1、创建数据库

   # mysql -uroot -ptsb-net
   mysql> create database testdb;
   mysql> use testdb;
   mysql> CREATE TABLE tb1 (ID TINYINT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, 
Name CHAR(30) NOT NULL UNIQUE KEY, Age TINYINT UNSIGNED);
   mysql> insert into tb1 values (1,'Huchong',24);
   mysql> insert into tb1 values (2,'Huafeng',24);
   mysql> insert into tb1 values (3,'Jim',21);
   mysql> insert into tb1 values (4,'Tom',25);
   mysql> exit;

2、创建目录

   # mkdir /backup          #存放备份的目录
   # chown -R mysql:mysql /backup
   # mkdir /binlogdir       #存放二进制日志的目录
   # chown mysql:mysql /binlogdir
   # mkdir /incremental    #存放增量备份的目录
   # chown -R mysql:mysql /incremental

3、修改二进制文件存放路径为新建目录下,并设定innodb每表一文件

   # vim /etc/my.cnf
   log-bin=/binlogdir/mysql-bin   #二进制日志文件存放位置
   innodb_file_per_table = 1      #启用InnoDB表每表一文件,默认所有库使用一个表空间

4、启动服务

   # service mysqld start

二、进行备份

1、完全备份

# innobackupex --host=localhost --user=percona --password=tsb-net --defaults-file=/etc/my.cnf /backup/

2、模拟增量并第一次增量备份

# mysql -uroot -ptsb-net
mysql> use testdb;
mysql> insert into tb1 values (5,'Jack',22); 
mysql> exit;  
 # innobackupex --user=percona --password=tsb-net --incremental /incremental --incremental-basedir=/backup/2015-07-18_06-11-43/
--incremental-basedir=     #表示基于什么进行增量备份
--incremental             #指定增量备份数据存放目录。这里的增量备份其实只针对的是InnoDB,对于MyISAM来说,还是完整备份。

3、模拟增量并第二次增量备份

# mysql -uroot -ptsb-net
mysql> use testdb;
mysql> insert into tb1 values (6,'Julia',24);
mysql> exit; 
# innobackupex --user=percona --password=tsb-net --incremental /incremental --incremental-basedir=/incremental/2015-07-18_06-13-06/
# mysql -uroot -ptsb-net
mysql> use testdb;
mysql> insert into tb1 values (7,'boy',22);   #模拟增加二进制日志
mysql> exit;

三、模拟数据库损坏

# service mysqld stop
# rm -rf /data/mysql/*

四、恢复数据库

1、完全备份和增量备份恢复

   #  innobackupex --apply-log --redo-only /backup/2015-07-18_06-11-43/ 
   # innobackupex --apply-log --redo-only /backup/2015-07-18_06-11-43/ --incremental-dir=/incremental/2015-07-18_06-13-06/
   # innobackupex --apply-log --redo-only /backup/2015-07-18_06-11-43/ --incremental-dir=/incremental/2015-07-18_06-14-04/
--redo-only #表示将已经提交的事务应用到数据库,还没有提交的则不撤销,防止所恢复的数据不完整
--apply-log #指明是将日志应用到数据文件上
--copy-back #指明是进行数据恢复

2、启动服务

   # innobackupex --copy-back /backup/2015-07-18_06-11-43/
   # chown -R mysql:mysql /data/mysql/*
   # service mysqld start

3、二进制日志节点恢复

3.1.找到问题节点位置

# cat /incremental/2015-07-18_06-14-04/xtrabackup_binlog_info 
mysql-bin.0000123281
# mysqlbinlog mysql-bin.000012

11111.png

3.2.节点恢复

# mysqlbinlog --stop-position=3478 /binlogdir/mysql-bin.000012 > /backup/last.sql
# mysql -u root -ptsb-net < /backup/last.sql

五、验证

# mysql -uroot -ptsb-net
mysql> use testdb;
mysql> select * from tb1;

QQ截图20150730151754.png

总结:extrabackup属于物理备份工具、支持InnoDB热备份、MyISAM温备份、速度较快




最后编辑:
作者:1084471221
这个作者貌似有点懒,什么都没有留下。
捐 赠您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请狠狠点击

留下一个回复