• xtrabackup 完全备份+xtrabacup 增量备份


    Xtrabackup 是由 percona 提供的 mysql 数据库备份工具,特点:

    (1)备份过程快速、可靠;

    (2)备份过程不会打断正在执行的事务;

    (3)能够基于压缩等功能节约磁盘空间和流量;

    (4)自动实现备份检验;

    (5)还原速度快。

    官方链接地址:http://www.percona.com/software/percona-xtrabackup;

    可以下载源码编译安 装,也可以下载适合的 RPM 包或使用 yum 进行安装或者下载二进制源码包。

    安装 xtrabackup

    1)下载 xtrabackup

    wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.4/bin ary/tarball/percona-xtrabackup-2.4.4-Linux-x86_64.tar.gz

    2)解压

    # tar zxf percona-xtrabackup-2.4.4-Linux-x86_64.tar.gz

    3)进入解压目录

    # cd percona-xtrabackup-2.4.4-Linux-x86_64/

    4)复制 bin 下的所有程序到/usr/bin

    [root@localhost percona-xtrabackup-2.4.4-Linux-x86_64]# cp bin/* /usr/bin/

    4)安装相关插件

    #yum install perl-DBI perl-DBD-MySQL perl-Time-HiRes perl-IO-Socket-SSL perl-TermReadKey.x86_64 perl-Digest-MD5 –y

    5)下载 percona-toolkit 并安装

    #wget https://www.percona.com/downloads/percona-toolkit/2.2.19/RPM/percona-toolkit-2.2.19-1 .noarch.rpm

    # rpm -vih percona-toolkit-2.2.19-1.noarch.rpm

    注意:相关选项说明:

    其中,--user 指定连接数据库的用户名,--password 指定连接数据库的密码,--defaults-file 指定数据库的配置文件,innobackupex 要从其中获取 datadir 等信息;

    --database 指定要 备份的数据库,这里指定的数据库只对 MyISAM 表有效,对于 InnoDB 数据来说都是全 备(所有数据库中的 InnoDB 数据都进行了备份,不是只备份指定的数据库,恢复时也 一样);

    /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;

    方案二、xtrabackup 完全备份+xtrabacup 增量备份

    测试环境准备 创建一个测试数据库,并创建一张表输入几行数据

    mysql> create database test;

    mysql> use test;

    mysql> create table xx(id int,name varchar(20));

    mysql> insert into xx values(1,'tom1');

    mysql> insert into xx values(2,'tom2');

    1、 xtrabacup 进行备份

    执行完全备份:

    备份命令:

    # xtrabackup --defaults-file=/etc/my.cnf --user=root --password="123456" --port=3306  --backup  --target-dir=/opt/mysqlbackup/full/full_incre_$(date +%Y%m%d_%H%M%S) 部分显示信息如下图所示:

    查看完全备份文件

    [root@localhost ~]# ls /opt/mysqlbackup/full/ -l

    drwxr-x---. 8 root root 4096 Sep 12 22:11 full_incre_20160912_221111

    xtrabackup 进行增量备份

    先录入些数据,实现第一次增量数据:

    mysql> use test;

    mysql> insert into xx values(3,'tom3');

    再进行增量备份 1

    备份命令:

    # xtrabackup --defaults-file=/etc/my.cnf --user=root --password="123456" --port=3306 --backup --target-dir=/opt/mysqlbackup/inc/incre_$(date +%Y%m%d_%H%M%S) --incremental-basedir=/opt/mysqlbackup/full/full_incre_20160912_221111/

    部分显示信息如下图所示:

    查看增量备份文件:

    [root@localhost ~]# ls -l /opt/mysqlbackup/inc/

    drwxr-x---. 8 root root 4096 Sep 12 22:15 incre_20160912_221510

    注:

    这里的增量备份其实只针对的是 InnoDB,对于 MyISAM 来说,还是完整备份。

    向表中再插入几行数据,继续第二次增量备份

    mysql> use test;

    mysql>insert into xx values(4,'tom4');

    进行第二次增量备份

    备份命令:

    # xtrabackup --defaults-file=/etc/my.cnf --user=root --password="123456" --port=3306 --backup --target-dir=/opt/mysqlbackup/inc/incre_$(date +%Y%m%d_%H%M%S) --incremental-basedir=/opt/mysqlbackup/inc/incre_20160912_221510/

    部分显示信息如下图所示:

    注:第二次增量备份--incremental-basedir 指向上一次增量备份文件的位置。

    查看增量备份文件

    [root@localhost ~]# ls -l /opt/mysqlbackup/inc/

    drwxr-x---. 8 root root 4096 Sep 12 22:15 incre_20160912_221510

    drwxr-x---. 8 root root 4096 Sep 12 22:19 incre_20160912_221916

    2、 xtrabacup 进行增量恢复

    为了验证对比,删除整个表

    完整备份恢复:

    开始全备份恢复

    命令如下:

    # xtrabackup --defaults-file=/etc/my.cnf --prepare --user=root --password="123456" --apply-log-only --target-dir=/opt/mysqlbackup/full/full_incre_20160912_221111/ 部分显示信息如下图所示:

    恢复到第一次增量的时刻

    增量备份恢复的步骤和完整备份恢复的步骤基本一致,只是应用日志的过程稍有不同。 增量备份恢复时,是先将所有的增量备份挨个应用到完整备份的数据文件中,然后再将 完整备份中的数据恢复到数据库中。

    恢复命令:

    # xtrabackup --defaults-file=/etc/my.cnf --prepare --user=root --password="123456" --apply-log-only --target-dir=/opt/mysqlbackup/full/full_incre_20160912_221111/--incremental-dir=/opt/ mysqlbackup/inc/incre_20160912_221510/

    部分显示信息如下图所示:

    恢复到第二次增量备份前面:

    恢复命令:

    # xtrabackup --defaults-file=/etc/my.cnf --prepare --user=root --password="123456" --apply-log-only --target-dir=/opt/mysqlbackup/full/full_incre_20160912_221111/ --incremental-dir=/opt/mysqlbackup/inc/incre_20160912_221916/

    部分显示信息如下图所示

    恢复整个库

    恢复命令:

    # xtrabackup --defaults-file=/etc/my.cnf --prepare --user=root --password="123456" --target-dir=/opt/mysqlbackup/full/full_incre_20160912_221111/

    部分显示信息如下图所示:

    然后停止 mysql 数据库:

    [root@localhost ~]# systemctl stop mysqld

    开始 rsync 数据文件:

    # cd /opt/mysqlbackup/full/full_incre_20160912_221111/

    #rsync -rvt --exclude 'xtrabackup_checkpoints' --exclude 'xtrabackup_logfile' ./   /usr/local/mysql/data/

    当数据恢复至 DATADIR 目录以后,还需要确保所有数据文件的属主和属组均为正确的用 户,如 mysql,否则,在启动 mysqld 之前还需要事先修改数据文件的属主和属组。 授予 mysql 访问权限:

    # chown -R mysql:mysql /usr/local/mysql/data/

    启动 mysql 服务: # systemctl start mysqld

    验证

    登录 mysql,看到以前在备份之后删除的数据已经通过 2 次增量备份恢复过来了,如下 所示:

    ####################################################################################################################33

    方案三:innobackupex 全库备份+innobackupex 增量备份

    测试环境准备

    创建一个测试数据库,并创建一张表输入几行数据

    mysql> create database test2;

    mysql> use test2;

    mysql> create table yy(id int,name varchar(20));

    mysql> insert into yy values(1,'kim1');

    mysql> insert into yy values(2,'kim2');

    1、innobackupex 先做完全备份

    命令如下:

    # innobackupex --defaults-file=/etc/my.cnf --user=root --password="123456" /opt/mysqlbackup/full/full_incre_$(date +%Y%m%d_%H%M%S) --no-timestamp

    部分显示信息如下图所示:

    #######################################################

    查看完全备份文件

    # ll /opt/mysqlbackup/full/

    drwxr-x---. 10 root root 4096 Sep 12 23:52 full_incre_20160912_235237

    innobackupex 做增量备份

    做第一次增量备份

    先录入增量数据

    mysql> use test2;

    mysql> insert into yy values(3,'kim3');

    再进行增量备份,命令如下:

    # innobackupex --incremental /opt/mysqlbackup/inc/incre_$(date +%Y%m%d_%H%M%S) --incremental-basedir=/opt/mysqlbackup/full/full_incre_20160912_235237/ --user=root --password="123456" --no-timestamp

    部分显示信息如下图所示:

    #######################################################

    查看增量备份文件

    # ll /opt/mysqlbackup/inc/

    drwxr-x---. 10 root root 4096 Sep 12 23:56 incre_20160912_235636

    基于全备和第一个增量备份来做第二次增量备份

    先录入增量数据录入

    mysql> use test2;

    mysql> insert into yy values(4,'kim4');

    开始进行第二次增量备份,

    备份命令:

    # innobackupex --incremental /opt/mysqlbackup/inc/incre_$(date +%Y%m%d_%H%M%S) --incremental-basedir=/opt/mysqlbackup/inc/incre_20160912_235636/ --user=root --password="123456" --no-timestamp

    部分显示信息如下图所示:

    ####################################################

    查看增量备份文件

    # ll /opt/mysqlbackup/inc/

    drwxr-x---. 10 root root 4096 Sep 12 23:56 incre_20160912_235636

    drwxr-x---. 10 root root 4096 Sep 12 23:59 incre_20160912_235942

    2、innobackupex 做增量恢复

    先删除表,用来查看验证恢复结果

    开始做恢复,恢复全备份

    命令如下:

    # innobackupex --apply-log --redo-only /opt/mysqlbackup/full/full_incre_20160912_235237/

    部分显示信息如下图所示:

    ##############################################

    基于全备份进行第一次增量备份的恢复

    命令如下:

    # innobackupex --apply-log --redo-only /opt/mysqlbackup/full/full_incre_20160912_235237/ --incremental-dir=/opt/mysqlbackup/inc/incre_20160912_235636/

    基于全备份和第一次增量备份,恢复第二次增量备份

    命令如下:

    # innobackupex --apply-log --redo-only /opt/mysqlbackup/full/full_incre_20160912_235237/ --incremental-dir=/opt/mysqlbackup/inc/incre_20160912_235942/

    恢复整个数据库

    停止数据库

    # systemctl stop mysqld

    清空数据目录下所有文件

    rm -rf /usr/local/mysql/data

    将恢复好的数据按照配置文件的需求拷贝到相应目录

    # innobackupex --defaults-file=/etc/my.cnf --user=root --password="123456" --copy-back /opt/mysqlbackup/full/full_incre_20160912_235237/

    当数据恢复至 DATADIR 目录以后,还需要确保所有数据文件的属主和属组均为正确的用 户,

    如 mysql,否则,在启动 mysqld 之前还需要事先修改数据文件的属主和属组。 赋予 mysql 账号权限

    # chown -R mysql:mysql /usr/local/mysql/data/

    启动 mysql 服务

    # systemctl start mysqld

    登录 mysql 界面,查看数据是否已经恢复

    附:Xtrabackup 的“流”及“备份压缩”功能

    Xtrabackup 对备份的数据文件支持“流”功能,即可以将备份的数据通过 STDOUT 传 输给 tar 程序进行归档,而不是默认的直接保存至某备份目录中。要使用此功能,仅需 要使用--stream 选项即可。

    如:

    # innobackupex --user=root --password="123456" --stream=tar /opt/mysqlbackup/full/ | gzip >/opt/mysqlbackup/full/full_`date +%F_%H%M%S`.tar.gz

  • 相关阅读:
    带宽利用率提升50%,腾讯云联网架构方案解析
    重构实践:基于腾讯云Elasticsearch搭建QQ邮箱全文检索
    存算分离下写性能提升10倍以上,EMR Spark引擎是如何做到的?
    秒级去重:ClickHouse在腾讯海量游戏营销活动分析中的应用
    降本提效,贝壳搜索推荐架构统一之路
    亿级用户,腾讯看点信息流推荐系统的架构挑战
    优秀程序员,如何提高架构能力?
    如何创建体元栅格?
    导出属性表字段结构
    去除镶嵌数据集中影像的黑边或白边
  • 原文地址:https://www.cnblogs.com/ljl1366136/p/9392360.html
Copyright © 2020-2023  润新知