今天给大家带来了,如何使用xtrabackup针对mysql实现备份的三种方式。
第一种:xtrabackup完全备份+binlog增量备份
第二种:xtrabackup完全备份+xtrabackup增量备份
第三种:innobackupex全库备份+innobackupex增量备份
如果想知道,mysqldump的具体备份方法及binlog数据的恢复,可以点击下方链接进行查看:
mysqldump备份与binlog恢复:http://blog.csdn.net/kangshuo2471781030/article/details/79110423
一、使用xtrabackup进行MySQL数据库备份
简介:
之前在MySQL备份与还原(一)里面介绍mysqldump备份方式是采用逻辑备份,其最大的缺陷就是备份和恢复速度都慢,对于一个小于50G的数据库而言,这个速度还是能接受的,但如果数据库非常大,那在使用mysqldump备份就不太合适了。
这时就需要一种好用又高效的的工具:xtrabackup就是其中一款,号称免费版的InnoDB HotBackup。
xtrabackup实现是物理备份,而且是物理热备。
目前主流的的有两个工具可以实现物理热备:ibackup和xtrabackup。
ibackup是商业软件,需要授权,非常昂贵。而xtrabackup功能比ibbackup还要强大,但却是开源的。
所以我们这里就来介绍xtrabackup的使用:
注:xtrabackup提供了两种命令行工具:
(1.)xtrabackup:专用于备份InnoDB和XtraDB引擎的数据。是用于热备份innodb,xtradb表中数据的工具,支持在线热备份,可以在不加锁的情况下备份innodb数据表,不过此工具不能操作MyISAM引擎表。
(2.)innobackupex:这是将xtrabackup进行封装的perl脚本,在执行过程中会调用xtrabackup命令,这样用该命令即可以实现备份InnoDB,也可以备份MyISAM引擎的对象。能够同时处理innodb和myisam,但在处理Myisam时需要加一个读锁。
由于操作MyIsam时需要加读锁,这会堵塞线上服务的写操作,而Innodb没有这样的限制,所以数据库中Innodb表类型所占的比例越大,则越有利。
xtrabackup是由percona提供的mysql数据库备份工具,特点:
(1.)备份过程快速、可靠;
(2.)备份过程不会打断正在执行的事务;
(3.)能够基于压缩等功能节约磁盘空间和流量;
(4.)自动实现备份检验;
(5.)还原速度快
官网链接地址:http://www.percona.com/software/percona-xtrabackup;可以下载源码编译安装,也可以下载适合的RPM包或使用YUM进行安装或者下载二进制源码包。
1.安装xtrabackup
(1.)下载xtrabackup
(2.)解压xtrabackup
(3.)进入到解压目录,复制bin下的所有程序到/usr/bin/里面去
[root@kang ~]# cd percona-xtrabackup-2.4.4-Linux-x86_64/
[root@kang percona-xtrabackup-2.4.4-Linux-x86_64]# ls
bin man percona-xtrabackup-2.4-test
[root@kang percona-xtrabackup-2.4.4-Linux-x86_64]# cp bin/* /usr/bin/
[root@kang percona-xtrabackup-2.4.4-Linux-x86_64]#
(4.)安装xtrabackup相关的插件
[root@kang ~]# yum -y install perl-DBI perl-DBD-MySQL perl-Time-HiRes perl-IO-Socket-SSL perl-TermReadKey.x86_64 perl-Digest-MD5
(5.)下载percona-toolkit并安装
wget https://www.percona.com/downloads/percona-toolkit/2.2.19/RPM/percona-toolkit-2.2.19-1.noarch.rpm
[root@kang ~]# rpm -ivh percona-toolkit-2.2.19-1.noarch.rpm
xtrabackup的版本号:
[root@kang ~]# xtrabackup -version
xtrabackup version 2.4.4 based on MySQL server 5.7.13 Linux (x86_64) (revision id: df58cf2)
通过上面图片说明,xtrabackup已经成功安装好了!!
那么,接下来就可以来演示基于xtrabackup工具实现三种备份方式:
方案一:xtrabackup完全备份+binlog增量备份
1. xtrabackup完全备份
[root@kang ~]# mkdir -p /opt/mysqlbackup/full
[root@kang ~]# mkdir -p /opt/mysqlbackup/inc
[root@kang ~]# ls /opt/mysqlbackup/
full inc
[root@kang ~]#
注:
[root@kang ~]# innobackupex --user=root --password=pwd123 /opt/mysqlbackup/full/
备份后产生的文件:
mysql> create user 'bkpuser'@'localhost' identified by '123456';
mysql> revoke all privileges,grant option from 'bkpuser'@'localhost';
mysql> grant reload,lock tables,replication client, process on *.* to 'bkpuser'@'localhost';
mysql> flush privileges;
(3.)向完全备份后的mysql数据库插入几条数据进行更改,然后进行二进制日志增量备份
[root@kang ~]# cat /opt/mysqlbackup/full/2018-01-21_03-15-24/xtrabackup_binlog_info
mysql-bin.000002 1178
模拟数据库修改:
[root@kang ~]# mysqlbinlog --start-position=1178 /usr/local/mysql/data/mysql-bin.000002 > /opt/mysqlbackup/inc/`date +%F`.sql
[root@kang ~]#
[root@kang ~]# rm -rf /usr/local/mysql/data/*
首先我们来还原完全备份:
“准备(prepare)“的主要作用正是通过回滚未提交的事务及同步已经提交的事务至数据文件也使得数据文件处于一致性状态。
[root@kang ~]# innobackupex --apply-log /opt/mysqlbackup/full/2018-01-21_03-15-24/
注:/opt/mysqlbackup/full/2018-01-21_03-15-24/:备份文件的路径及名称
[root@kang ~]# innobackupex --copy-back /opt/mysqlbackup/full/2018-01-21_03-15-24/
[root@kang ~]# chown -R mysql:mysql /usr/local/mysql/
[root@kang ~]# systemctl restart mysqld
登录mysql数据库验证还原后的数据:
[root@kang ~]# mysql -uroot -p -e "select * from t370.test";
Enter password:
mysql> set sql_log_bin=0;
Query OK, 0 rows affected (0.00 sec)
[root@kang ~]# mysql -uroot -p -e "source /opt/mysqlbackup/inc/2018-01-21.sql";
Enter password:
[root@kang ~]#
重新启动二进制日志并验证还原数据:
mysql> set sql_log_bin=1;
Query OK, 0 rows affected (0.00 sec)
mysql>
验证数据是否恢复回来:
1.It appliescommitted transaction logentries to the data files
2.it performsan undo operation on anytransactions that modified data but did not commit.
所以在prepare(准备)过程中,xtrabackup使用复制到的transaction log对备份出来的innodb data file 进行crash-recovery。[root@kang ~]# xtrabackup --defaults-file=/etc/my.cnf --user=root --password="pwd123" --port=3306 --backup --target-dir=/opt/mysqlbackup/full/full_incre_$(date +%Y%m%d_%H%M%S)
如果出现如下图所示信息,说明执行成功!!!
[root@kang ~]# ls -l /opt/mysqlbackup/full/
total 8
drwxr-x---. 6 root root 4096 Jan 21 03:54 2018-01-21_03-15-24
drwxr-x---. 7 root root 4096 Jan 21 05:12 full_incre_20180121_051204
[root@kang ~]#
2.xtrabackup增量备份
[root@kang ~]# xtrabackup --defaults-file=/etc/my.cnf --user=root --password='pwd123' --port=3306
--backup --target-dir=/opt/mysqlbackup/inc/incre_$(date +%Y%m%d%_%H%M%S)
--incrementalbasedir=/opt/mysqlbackup/full/full_incre_20180121_051204
如果出现如下图所示,说明执行成功!!!
[root@kang ~]# ls -l /opt/mysqlbackup/inc/
total 8
-rw-r--r--. 1 root root 2843 Jan 21 03:30 2018-01-21.sql
drwxr-x---. 7 root root 4096 Jan 21 05:41 incre_20180121%H4106
注意:这里的增量备份其实只针对的是innoDB,对于MyIsam来说,还是完整备份。
[root@kang ~]# xtrabackup --defaults-file=/etc/my.cnf --user=root --password="pwd123" --port=3306 --backup
--target-dir=/opt/mysqlbackup/inc/incre_$(date +%Y%m%d_%H%M%S)
--incremental-basedir=/opt/mysqlbackup/inc/incre_20180121%H4106
如果出现下图信息,说明执行成功!!!!
[root@kang ~]# xtrabackup --defaults-file=/etc/my.cnf --prepare --user=root --password="123456" --apply-log-only --target-dir=/opt/mysqlbackup/full/full_incre_20180121_051204/
[root@kang ~]# xtrabackup --defaults-file=/etc/my.cnf --prepare --user=root --password="pwd123" --apply-log-only --target-dir=/opt/mysqlbackup/full/full_incre_20180121_051204/ --incremental-dir=/opt/mysqlbackup/inc/incre_20180121%H4106/
(3.)恢复到第二次增量备份前面
[root@kang ~]# xtrabackup --defaults-file=/etc/my.cnf --prepare --user=root --password="pwd123"
--apply-log-only --target-dir=/opt/mysqlbackup/full/full_incre_20180121_051204/
--incremental-dir=/opt/mysqlbackup/inc/incre_20180121_063727/
[root@kang ~]# xtrabackup --defaults-file=/etc/my.cnf --prepare --user=root --password="123456"
--target-dir=/opt/mysqlbackup/full/full_incre_20180121_051204/
[root@kang ~]# systemctl stop mysqld
(2)开始rsync数据文件:
[root@kang ~]# cd /opt/mysqlbackup/full/full_incre_20180121_051204/
[root@kang full_incre_20180121_051204]# rsync -rvt --exclude 'xtrabackup_checkpoints' --exclude 'xtrabackup_logfile' ./ /usr/local/mysql/data/
[root@kang ~]# chown -R mysql:mysql /usr/local/mysql/
(4.)启动mysql服务
[root@kang ~]# systemctl start mysqld
验证:
[root@kang ~]# innobackupex --defaults-file=/etc/my.cnf --user=root --password="pwd123" /opt/backup/full/full_incre_$(date +%Y%m%d_%H%M%S) --no-timestamp
出现如下图所示信息,说明执行成功了!!!
innobackupex --incremental /opt/backup/inc/incre_$(date +%Y%m%d_%H%M%S) --incremental-basedir=/opt/backup/full/full_incre_20180121_084345/ --user=root --password="pwd123" --no-timestamp
如果出现下图所示信息,说明执行成功!!!
[root@kang ~]# innobackupex --incremental /opt/backup/inc/incre_$(date +%Y%m%d_%H%M%S) --incremental-basedir=/opt/backup/inc/incre_20180121_085151/ --user=root --password="pwd123" --no-timestamp
如果出现如下图所示,证明执行成功!!!
[root@kang ~]# innobackupex --apply-log --redo-only /opt/backup/full/full_incre_20180121_084345/
如果出现下图所示信息,证明执行成功!!!
[root@kang ~]# innobackupex --apply-log --redo-only /opt/backup/full/full_incre_20180121_084345/ --incremental-dir=/opt/backup/inc/incre_20180121_085151/
如果出现如下图所示信息,证明执行成功!!!
[root@kang ~]# innobackupex --apply-log --redo-only /opt/backup/full/full_incre_20180121_084345/ --incremental-dir=/opt/backup/inc/incre_20180121_090016/
[root@kang ~]# systemctl stop mysqld
(2.)清空数据目录下所有文件,模拟数据库故障
[root@kang ~]# innobackupex --defaults-file=/etc/my.cnf --user=root --password="pwd123" --copy-back /opt/backup/full/full_incre_20180121_084345/
rug
如果出现如下图所示信息,证明执行成功!!
[root@kang ~]# chown -R mysql:mysql /usr/local/mysql/
(5.)启动mysql服务
[root@kang ~]# systemctl start mysqld
(6.)登录mysql数据库查看数据是否已经恢复
附:Xtrabackup的“流”及“备份压缩”功能
Xtrabackup对备份的数据文件支持“流”功能,即可以将备份的数据通过STDOUT传输给tar程序进行归档,而不是默认的直接保存至某备份目录中。要使用此功能,仅需要使用--stream选项即可。如:
[root@kang ~]# innobackupex --user=root --password="pwd123" --stream=tar /opt/backup/full/ | gzip >/opt/backup/full/full_`date +%F_%H%M%S`.tar.gz