day08-03-mariadb备份恢复之物理备份(XBK)

mariabackup跟随mariadb同时安装好在数据库目录/bin下,不需要单独安装

[root@localhost winstar_traffic]# ll /opt/mysql/bin/mariabackup 
-rwxr-xr-x 1 mysql mysql 248407376 Nov 10 19:05 /opt/mysql/bin/mariabackup

  • https://mariadb.com/kb/en/library/incremental-backup-and-restore-with-mariabackup/

  • 全量备份

    #全量备份, 需要指定新目录,文件直接放在目录里,不像xtra那样自动新建以日期命名的目录;
    mariabackup --defaults-file=/etc/my.cnf --backup  --user=backupuser  --password='tany' -S /tmp/mysql.sock --target-dir=/data/backup
    
    #第一次增量备份;
    mariabackup --defaults-file=/etc/my.cnf --backup  --user=root  --password='root' -S /tmp/mysql.sock --incremental-basedir=/data/backup/inc1 --target-dir=/data/backup
    
    #第二次增量备份;
    mariabackup --defaults-file=/etc/my.cnf --backup --history --user=root  --password='root' -S /tmp/mysql.sock --incremental-basedir=/data/backup/inc1 --target-dir=/data/backup/inc2
    
    #第三次增量备份;
    mariabackup --defaults-file=/etc/my.cnf --backup --history --user=root  --password='root' -S /tmp/mysql.sock --incremental-basedir=/data/backup/inc2 --target-dir=/data/backup/inc3
    
    service mysqld stop		#恢复前,停止mysql;
    mv /data/mysql /data/mysql.bak	#清除原来数据文件;
    cp -r /data/backup /data/backup.bak		#备份备份文件;
    cd /data/backup
    mv backup2 ../			#调整目录位置;
    mv backup3 ../		
    
    #调整目录位置,备份时指定备份目录/data/backup*更方便;
    
    --databases='testbak'		#备份某个/某些数据库, 支持正则表达式
    --tables='tab_*'			#备份某个数据库的某张表,支持正则表达式
    databases-exclude			#指定不需要备份的数据库;
    tables-exclude				#指定不需要备份的表
    
  • 准备恢复

    mariabackup --prepare --apply-log-only --target-dir=/data/backup  #先做全量的准备;
    mariabackup --prepare --apply-log-only --target-dir=/data/backup --incremental-dir=/data/backup2		#每一个增量都做这一步操作,把文件与全量备份合并;
    mariabackup --prepare --apply-log-only --target-dir=/data/backup --incremental-dir=/data/backup3		#不需要再对全量准备一次(xtrabackup需要);
    
  • 恢复数据

    mariabackup --copy-back --target-dir=/data/backup/
    ll /data/mysql
    chown -R mysql:mysql /data/mysql		#修改目录权限,不然无法登陆;
    service mysqld start
    

如果想在从库上备份,并且想记录从库的show slave status的POS点,以便后续再接一个从库,
那么你可以这样搞:

mariabackup --defaults-file=/etc/my.cnf -S /tmp/mysql3306.sock --backup --slave-info --safe-slave-backup --target-dir=/data/bak/ --user=root --password=123456

注:/data/bak/xtrabackup_slave_info文件,记录从库show slave status的POS点。

压缩备份:

参数:
  --stream=name       Stream all backup files to the standard output in the
                      specified format.Supported format is 'mbstream' or
                      'xbstream'.
                      Number of threads for parallel data compression. The
                      cannot be used together with --stream.
  --parallel=#        Number of threads to use for parallel datafiles transfer 更多的线程数量,提高备份效率
  
   --compress[=name]   This option instructs xtrabackup to compress backup
                      copies of InnoDB data files. It is passed directly to the
                      xtrabackup child process. Try 'xtrabackup --help' for
                      more details.
  --compress-threads=# 
                      This option specifies the number of worker threads that
                      will be used for parallel compression. It is passed
                      directly to the xtrabackup child process. Try 'xtrabackup
                      --help' for more details.
  --compress-chunk-size=# 
                      Size of working buffer(s) for compression threads in
                      bytes. The default value is 64K. 

使用—compress选项可以对备份数据进行压缩,所有备份数据都会被压缩,包括事务日志和元数据文件
使用—compress选项对备份进行压缩时,使用的压缩算法为”quicklz”,压缩出的文件的后缀名为”.qp”。”quicklz”是一个压缩库,官网如下:http://www.quicklz.com/

备份经过压缩以后,在还原备份数据之前,则需要先进行解压操作。可以使用—decompress选项对压缩备份的目录进行解压操作,不过,即使是使用—decompress选项进行解压操作,也仍然需要安装qpress,所以,如果在压缩备份时使用了—compress选项,那么解压备份的前提就是安装了qpress。使用—decompress选项时,可以配合—parallel选项,加速解压操作的进度。

innobackupex --user=root --password='' --parallel=8 --decompress /tmp/backup/2018-02-09_02-18-30

如果在备份时使用了—compress选项,那么需要先解压才能进行apply-log与copy-back操作,解压时必须安装了qpress。

命令:

压缩备份:
mariabackup --defaults-file=/etc/my.cnf --user=root --password='root' -S /path/socket/mysql.sock  --backup --target-dir=/path/backup/full --parallel=4 --stream=xbstream | gzip - > /path/backup/20210111_full.xbstream.gz

解压:
gzip -d /path/backup/20210111_full.xbstream.gz
xbstream -x < /path/backup/20210111_full.xbstream.gz -C /dest_path/dir


每周一次全量,其余增量脚本

#!/bin/bash

LOCALDIR=/data/mysqlbak


WEEKDAY=`date +%u`
INTERVARNUM=`expr $WEEKDAY - 1`
TISHWEEKFULL=`date -d "$INTERVARNUM day ago" +%F`
YESTERDAY=`date -d "1 day ago" +%F`
TODAY=`date +%F`
FULL=/$LOCALDIR/$TISHWEEKFULL/full
INCR=/$LOCALDIR/$TISHWEEKFULL/incr/$TODAY
YESTERDAYDIR=/$LOCALDIR/$TISHWEEKFULL/incr/$YESTERDAY

if [ ! -d $FULL ] ;then

echo "没有lsn信息,开始一次全备"

     mkdir -p $FULL
     /usr/bin/mariabackup --backup --slave-info --kill-long-queries-timeout=120 --kill-long-query-type=select  --target-dir=$FULL/

exit 0
fi

mkdir -p $INCR

if [ ! -d $YESTERDAYDIR ]  ;then
 /usr/bin/mariabackup --backup    --slave-info --kill-long-queries-timeout=120 --kill-long-query-type=select         --target-dir=$INCR/  --incremental-basedir=$FULL
exit 0
fi

 /usr/bin/mariabackup --backup    --slave-info --kill-long-queries-timeout=120 --kill-long-query-type=select         --target-dir=$INCR/  --incremental-basedir=$YESTERDAYDIR
posted @ 2022-11-24 20:24  oldSimon  阅读(28)  评论(0编辑  收藏  举报