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
分类:
MySQL
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了