SQL数据库备份管理
数据库备份简介
- 备份目标:数据的一致性、服务的可用性
- 备份技术
(1)物理备份/冷备份
直接复制数据库文件,适用于大型数据库环境,不受存储引擎的限制,但不能恢复到不同的MySQL版本,使用这种方法拷贝数据,优点快,缺点服务停止。
tar,cp,scp
(2)逻辑备份/热备份
备份的是建表、建库、插入等操作所执行SQL语句(DDL、DML、DCL),适用于中小型数据库,缺点是效率相对较低。
mysqldump,mydumper
(3)备份模式
- 完全备份
- 增量备份
连续恢复
特点:因每次仅备份自上一次备份(注意是上一次,不是第一次)以来有变化的文件,所以备份体积小,备份速度快,但是恢复的时候,需要按备份时间顺序,逐个备份版本进行恢复,恢复时间长。 - 差异备份
跳跃恢复
特点:占用空间比增量备份大,比完整备份小,恢复时仅需要恢复第一个完整版本和最后一次的差异版本(包含所有的差异),恢复速度介于完整备份和增量备份之间。
全量备份&增量备份
- 数据库备份工具percona安装
- percona-xtrabackup24(mysql 57)
- percpna-xtrabackup80(mysql 80)
(1) 安装yum仓库 - 下载yum仓库
wget https://repo.percona.com/yum/percona-release-latest.noarch.rpm
yum install -y percona-release-latest.noarch.rpm
- 查看yum仓库安装是否成功
yum repolist
(2)安装XtraBackup命令
yum install percona-xtrabackup-80 -y
注意:xtrabackup8.0只支持mysql 8.0以上的版本,mysql 5.7或以下需要使用xtrabackup 8.0以下的版本
(3)全备
mkdir -p /data/backup/
xtrabacup --defaults-file=/etc/my.cnf --backup --target-dir=/data/backup/base/ -uroot -p密码 -H localhost -P 3306 --no-server-version-check
(4)恢复
- 删库
systemctl stop mysqld
rm -rf /var/lib/mysql/*
- 准备备份文件
xtrabackup --prepare --target-dir=/data/backup/base/
- 开始恢复
xtrabackup --defaults-file=/etc/my.cnf --copy-back --target-dir=/data/backup/base/
- 授权
chown -R mysql.mysql /var/lib/mysql
- 重启并登陆数据库
systemctl restart mysqld
mysql -uroot -p"旧密码"
(5)增备1
- 数据修改
insert into school.t3 values (333);
- 开始增量备份
xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/data/backup/inc1/ --incremental-basedir=/data/backup/base/ -uroot -p密码 -H localhost -P 3306 --no-server-version-check
(6)增备2
- 数据修改
insert into school.t3 values (444);
- 开始增量备份
xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/data/backup/inc2/ --incremental-basedir=/data/backup/inc1/ -uroot -p密码 -H localhost -P 3306 --no-server-version-check
(7)恢复增量备份
注意:最后一次把增量备份恢复到全部不要加 --apply-log-only
xtrabackup --defaults-file=/etc/my.cnf --prepare --apply-log-only --target-dir=/data/backup/base
xtrabackup --defaults-file=/etc/my.cnf --prepare --apply-log-only --target-dir=/data/backup/base/ --incremental-dir=/data/backup/inc1/
xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/data/backup/base/ --incremental-dir=/data/backup/inc2
这几步 --defaults-file=""选项可以不用加
(8)恢复到数据目录
全库级恢复要先停止数据库并清空数据目录
xtrabackup --defaults-file=/etc/my.cnf --copy-back --target-dir=/data/backup/base/
chown -R mysql.mysql /var/lib/mysql
差异备份
- 全备
mkdir -p /data/backup
xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/data/backup/base/ -uroot -p密码 -H localhost -P 3306 --no-server-version-check
- 增备1
(1)数据修改
(2)备份数据
xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/data/backup/inc1/ --incremental-basedir=/data/backup/base/ -uroot -p密码 -H localhost -P 3306 --no-server-version-check
- 增备2
(1)数据修改
(2)备份数据
xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/data/backup/inc2/ --incremental-basedir=/data/backup/base/ -uroot -p密码 -H localhost -P 3306 --no-server-version-check
- 恢复增量备份
注意: 注意最后一次把增量备份恢复到全部不要加 --apply-log-only
(1)应用完整备份
xtrabackup --defaults-file=/etc/my.cnf --prepare --apply-log-only --target-dir=/data/backup/base/
(2)应用增量
xtrabckup --defaults-file=/etc/my.cnf --prepare --target-dir=/data/backup/base/ --incremental-dir=/data/backup/inc2
- 恢复到数据目录
(1)停止数据库,删除数据
systemctl stop mysqld
rm -rf /var/lib/mysql/*
(2)开始恢复
xtrabackup --defaults-file=/etc/my.cnf --copy-back --target-dir=/data/backup/base/
chown -R mysql.mysql /var/lib/mysql
压缩备份
- 压缩
xtrabackup --defaults-file=/etc/my.cnf --backup --compress --target-dir=/data/backup/compressed/ -uroot -p密码 -H localhost -P 3306 --no-server-version-check
如果要加速压缩,可以使用--compress-threads,--compress-threads=4 使用四个线程同时进行压缩。
2. 解压缩
注意:解压缩需要有qpress命令,可以通过yum安装
xtrabackup --defaults-file=/etc/my.cnf --decompress --target-dir=/data/backup/compressed/
注释:
- --parallel可与--decompress选项一起使用以同时解压缩多个文件
- 使用--decompress压缩的备份集在准备备份之前需要解压,解压工具是qpress。解压后的原文件不会被删除,可以使用--remove-original选项清除。
- 准备备份文件
xtrabackup --prepare --target-dir=/data/backup/comprssed
- 删库
- 开始恢复
xtrabackup --defaults-file=/etc/my.cnf --copy-back --target-dir=/data/backup/compressed