内容简介:Xtrabackup介绍Xtrabackup是由percona开源的免费数据库热备份软件,它能对InnoDB数据库和XtraDB存储引擎的数据库非阻塞地备份(对于MyISAM的备份同样需要加表锁);mysqldump备份方式是采用的逻辑备份,其最大的缺陷是备份和恢复速度较慢,如果数据库大于50G,mysqldump备份就不太适合。 Xtrabackup安装完成后有4个可执行文件,其中2个比较重要的备份工具是innobackupex、xtrabackup 1)xtrabackup 是专门用来备份InnoDB
Xtrabackup介绍Xtrabackup是由percona开源的免费数据库热备份软件,它能对InnoDB数据库和XtraDB存储引擎的数据库非阻塞地备份(对于MyISAM的备份同样需要加表锁);mysqldump备份方式是采用的逻辑备份,其最大的缺陷是备份和恢复速度较慢,如果数据库大于50G,mysqldump备份就不太适合。 Xtrabackup安装完成后有4个可执行文件,其中2个比较重要的备份 工具 是innobackupex、xtrabackup 1)xtrabackup 是专门用来备份InnoDB表的,和mysql server没有交互; 2)innobackupex 是一个封装xtrabackup的 Perl 脚本,支持同时备份innodb和myisam,但在对myisam备份时需要加一个全局的读锁。 3)xbcrypt 加密解密备份工具 4)xbstream 流传打包传输工具,类似tar
Xtrabackup优点
1)备份速度快,物理备份可靠 2)备份过程不会打断正在执行的事务(无需锁表) 3)能够基于压缩等功能节约磁盘空间和流量 4)自动备份校验 5)还原速度快 6)可以流传将备份传输到另外一台机器上 7)在不增加服务器负载的情况备份数据
Xtrabackup备份原理备份原理 备份开始时首先会开启一个后台检测进程,实时检测mysq redo的变化,一旦发现有新的日志写入,立刻将日志记入后台日志文件xtrabackup_log中,之后复制innodb的数据文件一系统表空间文件ibdatax,复制结束后,将执行flush tables with readlock,然后复制.frm MYI MYD等文件,最后执行unlock tables,最终停止xtrabackup_log 输出如下提示信息
xtrabackup: Transaction log of lsn (2543172) to (2543181) was copied. 171205 10:17:52 completed OK! 复制代码
Xtrabackup安装下载安装xtrabackup
wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.9/binary/redhat/6/x86_64/Percona-XtraBackup-2.4.9-ra467167cdd4-el6-x86_64-bundle.tar [root@centos ~]# ll total 703528 -rw-r--r-- 1 root root 654007697 Sep 27 09:18 mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz -rw-r--r-- 1 root root 65689600 Nov 30 00:11 Percona-XtraBackup-2.4.9-ra467167cdd4-el6-x86_64-bundle.tar [root@centos ~]# tar xf Percona-XtraBackup-2.4.9-ra467167cdd4-el6-x86_64-bundle.tar [root@centos ~]# yum install percona-xtrabackup-24-2.4.9-1.el6.x86_64.rpm -y [root@centos ~]# which xtrabackup /usr/bin/xtrabackup [root@centos ~]# innobackupex -v innobackupex version 2.4.9 Linux (x86_64) (revision id: a467167cdd4) 复制代码
#已经安装完成
创建测试数据
mysql> create database test; Query OK, 1 row affected (0.00 sec) mysql> use test; Database changed mysql> create table T1 (name varchar(10) not null,sex varchar(10) not null); Query OK, 0 rows affected (0.15 sec) mysql> insert into T1 values('zhang','man'); Query OK, 1 row affected (0.01 sec) mysql> insert into T1 values('zhan','man'); Query OK, 1 row affected (0.01 sec) mysql> insert into T1 values('sun','woman'); Query OK, 1 row affected (0.00 sec) mysql> select * from T1; +-------+-------+ | name | sex | +-------+-------+ | zhang | man | | zhan | man | | sun | woman | +-------+-------+ 3 rows in set (0.00 sec) 复制代码
全量备份与恢复 innobackupex --defaults-file=/etc/my.cnf --user=root --password="123456" --backup /root
从备份过程截图可以看出会创建一个时间的目录
[root@VM_0_8_centos ~]# ll /root/2017-12-04_14-43-20/ total 12352 -rw-r----- 1 root root 425 Dec 4 13:57 backup-my.cnf -rw-r----- 1 root root 322 Dec 4 13:57 ib_buffer_pool -rw-r----- 1 root root 12582912 Dec 4 13:57 ibdata1 drwxr-x--- 2 root root 4096 Dec 4 13:57 mysql drwxr-x--- 2 root root 4096 Dec 4 13:57 performance_schema drwxr-x--- 2 root root 12288 Dec 4 13:57 sys drwxr-x--- 2 root root 4096 Dec 4 13:57 test -rw-r----- 1 root root 22 Dec 4 13:57 xtrabackup_binlog_info -rw-r----- 1 root root 113 Dec 4 13:57 xtrabackup_checkpoints -rw-r----- 1 root root 537 Dec 4 13:57 xtrabackup_info -rw-r----- 1 root root 2560 Dec 4 13:57 xtrabackup_logfile 复制代码
#这里面就是相关的备份文件,同样也可以看到我们创建的库的名称
mysql> drop table T1; Query OK, 0 rows affected (0.01 sec) mysql> select * from T1; ERROR 1146 (42S02): Table 'test.T1' doesn't exist [root@VM_0_8_centos ~]# innobackupex --apply-log /root/2017-12-04_14-43-20/ 复制代码
#使用此参数使用相关数据性文件保持一致性状态
接下来准备恢复误删除数据 #恢复数据之前需要保证数据目录是空的状态 [root@centos ~]# innobackupex --defaults-file=/etc/my.cnf --copy-back /root/2017-12-04_13-57-29/
#具体看日志截图
[root@centos ~]# /etc/init.d/mysqld start Starting MySQL. SUCCESS! [root@centos ~]# lsof -i :3306 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME mysqld 5935 mysql 21u IPv6 21850 0t0 TCP *:mysql (LISTEN) mysql> use test; Database changed mysql> select * from T1; +-------+-------+ | name | sex | +-------+-------+ | zhang | man | | zhan | man | | sun | woman | +-------+-------+ 3 rows in set (0.00 sec) 复制代码
##恢复成功
Xtrabackup增量备份与恢复#需要注意的是,增量备份仅能应用于InooDB或XtraDB表,对于MyISAM表,增量与全备相同
mysql> select * from T1; +-------+-------+ | name | sex | +-------+-------+ | zhang | man | | zhan | man | | sun | woman | | susun | woman | | sige | man | | mgg | man | +-------+-------+ 6 rows in set (0.00 sec) 复制代码
创建用于增量备份的数据,用来模拟删除掉了全备后的数据,能否通过增量备份文件来恢复 [root@Vcentos ~]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --incremental /backup/ --incremental-basedir=/root/2017-12-04_13-57-29
#--incremental /backup/ 指定增量备份文件备份的目录 #--incremental-basedir 指定上一次全备或增量备份的目录
[root@Vcentos ~]# ll /backup/2017-12-05_09-27-06/ total 312 -rw-r----- 1 root root 425 Dec 5 09:27 backup-my.cnf -rw-r----- 1 root root 412 Dec 5 09:27 ib_buffer_pool -rw-r----- 1 root root 262144 Dec 5 09:27 ibdata1.delta -rw-r----- 1 root root 44 Dec 5 09:27 ibdata1.meta drwxr-x--- 2 root root 4096 Dec 5 09:27 mysql drwxr-x--- 2 root root 4096 Dec 5 09:27 performance_schema drwxr-x--- 2 root root 12288 Dec 5 09:27 sys drwxr-x--- 2 root root 4096 Dec 5 09:27 test -rw-r----- 1 root root 21 Dec 5 09:27 xtrabackup_binlog_info -rw-r----- 1 root root 117 Dec 5 09:27 xtrabackup_checkpoints -rw-r----- 1 root root 560 Dec 5 09:27 xtrabackup_info -rw-r----- 1 root root 2560 Dec 5 09:27 xtrabackup_logfile [root@centos ~]# cd /backup/2017-12-05_09-27-06/ [root@centos 2017-12-05_09-27-06]# cat xtrabackup_binlog_info mysql-bin.000001 945 [root@centos 2017-12-05_09-27-06]# cat xtrabackup_checkpoints backup_type = incremental from_lsn = 2542843 to_lsn = 2547308 last_lsn = 2547317 compact = 0 recover_binlog_info = 0 复制代码
删除一条数据来测试增量恢复
mysql> delete from T1 where name='susun'; Query OK, 1 row affected (0.06 sec) 复制代码
增量恢复操作过程如下
[root@centos ~]# innobackupex --apply-log --redo-only /root/2017-12-04_13-57-29/ [root@centos ~]# innobackupex --apply-log --redo-only /root/2017-12-04_13-57-29/ --incremental-dir=/backup/2017-12-05_09-27-06/ 复制代码
恢复全部数据
[root@centos ~]#innobackupex --defaults-file=/etc/my.cnf --copy-back /root/2017-12-04_13-57-29/ [root@centos ~]# /etc/init.d/mysqld start Starting MySQL.. SUCCESS! [root@centos ~]# lsof -i :3306 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME mysqld 23217 mysql 21u IPv6 283226 0t0 TCP *:mysql (LISTEN) 复制代码
查看恢复的数据完整性
更多精彩内容请关注 民工哥公众号
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- PostgreSQL基础备份_增量备份与任意点恢复
- 010.MongoDB备份恢复
- Oracle 备份与恢复笔记
- Postgresql备份与增量恢复
- MySQL 备份与恢复详解
- MongoDB导入导出备份恢复实践
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
RESTful Web Services Cookbook
Subbu Allamaraju / Yahoo Press / 2010-3-11 / USD 39.99
While the REST design philosophy has captured the imagination of web and enterprise developers alike, using this approach to develop real web services is no picnic. This cookbook includes more than 10......一起来看看 《RESTful Web Services Cookbook》 这本书的介绍吧!