xtrabackup备份工具

1、启动数据库

#初始化数据库

docker run --name mysql1 -d -e MYSQL_ROOT_PASSWORD=root --restart=always  mysql:8.0.35

mkdir -p /docker/mysql/{conf,data}

mkdir -p /docker/backup/{full,inc}

cd /docker/mysql

#mysql全局配置文件,不同版本的位置会不一样

docker cp mysql1:/etc/my.cnf  conf/

#mysql其它配置目录,查看全局配置文件

docker cp mysql1:/etc/mysql/conf.d  ./

#拷贝mysql.sock

docker cp mysql1:/var/run/mysqld ./

#数据目录增加权限

chcon -Rt svirt_sandbox_file_t /docker/mysql/data

#关闭测试数据库

docker rm -f mysql1

#启动数据库

docker run --name mysql -p 3306:3306 -p 33060:33060 -d -v /docker/mysql/data/:/var/lib/mysql/ -v /docker/mysql/conf/my.cnf:/etc/my.cnf -v /docker/mysql/mysqld/:/var/run/mysqld/  -v /docker/mysql/conf.d/:/etc/mysql/conf.d/ -v /docker/backup/:/backup/ -e MYSQL_ROOT_PASSWORD=root --restart=always  mysql:8.0.35

2、启动xtrabackup

#官方地址

https://docs.percona.com/percona-xtrabackup/8.0/apt-download-deb.html

#下载地址

https://downloads.percona.com/downloads/Percona-XtraBackup-8.0/Percona-XtraBackup-8.0.35-30/binary/debian/jammy/x86_64/percona-xtrabackup-80_8.0.35-30-1.jammy_amd64.deb?_gl=1*1ix9j2u*_gcl_au*MTU3NDE4OTQ2Ni4xNzAyMDI1NDY3

#构建镜像

mkdir -p xtrabackup/software

#Dockerfile

FROM ubuntu:22.04

ADD software /software

RUN cp /etc/apt/sources.list /etc/apt/sources.list.bak \

        && sed -i "s/archive\.ubuntu\.com/mirrors\.163\.com/g" /etc/apt/sources.list \

        && apt update \

&& apt install -y /software/*.deb \

&& rm -rf /software \

        && cp /etc/apt/sources.list.bak /etc/apt/sources.list

cd xtrabackup

docker build -t xtrabackup:8.0.35 .

#启动xtrabackup

docker run -id --name my_back --restart=always --volumes-from mysql my_backup:8.0.35

#同步系统时间

docker run -id --name my_back -v /etc/localtime:/etc/localtime:ro --restart=always --volumes-from mysql xtbackup:8.0.35

#查看xtrabackup使用帮助

docker exec -i mback1 bash -c  'xtrabackup'

3、数据库备份

3.1、全量备份

docker exec -i my_back bash -c 'xtrabackup --defaults-file=/etc/my.cnf --backup --apply-log-only --no-server-version-check  --datadir=/var/lib/mysql/ --target-dir=/backup/full/`date +%F` --user=root --password=root'

–apply-log-only 此选项使准备备份时仅执行重做阶段。防止回滚,如果没有配置这个参数,增量备份内容会没有用,这对于增量备份非常重要(#--apply-log    #跳过“回滚”阶段,只做“重做”--redo-only)

--no-server-version-check 忽略版本

--incremental-basedir #增量备份基目录(上次备份的路径)

3.2、压缩备份

docker exec -i my_back bash -c 'xtrabackup --defaults-file=/etc/my.cnf --backup --no-server-version-check  --datadir=/var/lib/mysql/ --compress --parallel=5 --databases=test --target-dir=/backup/test-`date +%F` --user=root --password=root'

--compress   压缩

--parallel=5  文件线程

--compress-zstd-level=8  压缩级别(1-19,默认1),级别越大,文件越小

3.3、解压缩

--decompress --parallel=5

docker exec -i my_back bash -c 'xtrabackup --decompress --parallel=5 --target-dir=/backup/test-2023-12-21'

解压过程中,同样可以指定 --parallel 参数,进行并行解压。

解压后,默认不会删除压缩文件。如果需要删除,可以指定 --remove-original 参数。

即便压缩文件没有被删除,当使用 --copy-back 将备份拷贝到数据目录时,默认也不会拷贝这些压缩文件

3.4、增量备份,先全量备份

#增量备份1

docker exec -i my_back bash -c 'xtrabackup --defaults-file=/etc/my.cnf --backup --apply-log-only --no-server-version-check  --datadir=/var/lib/mysql/   --incremental-basedir=/backup/full/2023-12-24 --target-dir=/backup/inc/2023-12-2401  --user=root --password=root'

#增量备份2

docker exec -i my_back bash -c 'xtrabackup --defaults-file=/etc/my.cnf --backup --apply-log-only --no-server-version-check  --datadir=/var/lib/mysql/   --incremental-basedir=/backup/full/2023-12-24 --target-dir=/backup/inc/2023-12-2402  --user=root --password=root'

#增量备份3

..............................

3.5、全量恢复准备

docker exec -i my_back bash -c 'xtrabackup --defaults-file=/etc/my.cnf --prepare --apply-log-only -use-memory=2G  --target-dir=/backup/full/2023-12-24'

3.6、增量合并到全量

#增量恢复按照1、2、3的顺序

docker exec -i my_back bash -c 'xtrabackup  --defaults-file=/etc/my.cnf --prepare --apply-log-only  --target-dir=/backup/full/2023-12-24  --incremental-dir=/backup/inc/2023-12-24'

3.7、再次全量恢复准备

docker exec -i my_back bash -c 'xtrabackup --defaults-file=/etc/my.cnf --prepare  -use-memory=2G  --target-dir=/backup/full/2023-12-24'

3.8、停止数据库,删除data目录下所有文件

docker stop mysql

rm -rf /docker/mysql/data/*

3.9、全量恢复,如果没有增量备份,只需要执行3.1、3.7、3.8、3.9即可

docker exec -i my_back bash -c 'xtrabackup --defaults-file=/etc/my.cnf   --use-memory=2G --copy-back --parallel=10  --target-dir=/backup/full/2023-12-24'

3.10、全量、增量压缩备份和恢复

#全量压缩备份

docker exec -i mback1 bash -c 'xtrabackup --defaults-file=/etc/my.cnf --backup --apply-log-only --no-server-version-check  --datadir=/var/lib/mysql/ --compress --parallel=5   --compress-zstd-level=8 --target-dir=/backup/full/`date +%F-%H-%M` --user=root --password=root'

#增量压缩备份

docker exec -i mback1 bash -c 'xtrabackup --defaults-file=/etc/my.cnf --backup --apply-log-only --no-server-version-check  --datadir=/var/lib/mysql/  --compress --parallel=5   --compress-zstd-level=8 --incremental-basedir=/backup/full/2023-12-25-03-39 --target-dir=/backup/inc/2023-12-25-01  --user=root --password=root'

#全量解压缩

docker exec -i mback1 bash -c 'xtrabackup --decompress --parallel=5 --target-dir=/backup/full/2023-12-25-03-39'

#增量解压缩

docker exec -i mback1 bash -c 'xtrabackup --decompress --parallel=5 --target-dir=/backup/inc/2023-12-25-01'

#全量恢复准备

docker exec -i my_back bash -c 'xtrabackup --defaults-file=/etc/my.cnf --prepare --apply-log-only -use-memory=2G  --target-dir=/backup/full/2023-12-25-03-39'

#增量合并全量

docker exec -i my_back bash -c 'xtrabackup  --defaults-file=/etc/my.cnf --prepare --apply-log-only  --target-dir=/backup/full/2023-12-25-03-39  --incremental-dir=/backup/inc/2023-12-25-01'

#全量恢复准备

docker exec -i my_back bash -c 'xtrabackup --defaults-file=/etc/my.cnf --prepare  -use-memory=2G  --target-dir=/backup/full/2023-12-25-03-39'

#全量恢复

docker exec -i my_back bash -c 'xtrabackup --defaults-file=/etc/my.cnf   --use-memory=2G --copy-back --parallel=10  --target-dir=/backup/full/2023-12-25-03-39'

4、定时备份

crontab设置定时执行备份,30 23 * * 6 sh /backup-mysql.sh

#!/bin/bash

#全量备份

docker exec -i mback1 bash -c 'xtrabackup --defaults-file=/etc/my.cnf --backup --apply-log-only --no-server-version-check  --datadir=/var/lib/mysql/ --compress --parallel=5   --compress-zstd-level=8 --target-dir=/backup/full/`date +%F` --user=root --password=root'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值