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' |
1万+

被折叠的 条评论
为什么被折叠?



