一、备份
1、备份原因:服务器损坏、人为误删
2、备份目标:数据一致性、服务可用性
3、备份技术
物理备份(冷备份):
直接复制数据库文件,拷贝数据 优点:快;缺点:服务停止
逻辑备份(热备份):
备份的是建表、建库、插入等 SQL 语句(DDL、DML、DCL),效率较低
4、备份种类
完全备份、增量备份、差异备份
二、XtraBackup
Percona XtraBackup 是 Percona 开发的一个专业数据库备份工具,主要用于MySQL 和 MariaDB 数据库系统。它在数据库备份方面发挥了重要作用。
1、安装 XtraBackup
① 安装 percona 的 yum 仓库
yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
刷新 yum 仓库: yum repolist
查看 yum 仓库里的 xtrabackup 安装包
② 安装 percona-xtrabackup-24.x86_64
yum -y install percona-xtrabackup-24.x86_64
如果安装失败,显示:错误:软件包:percona-xtrabackup-24-2.4.28-1.el7.x86_64 (percona-release-x86_64) 需要:libev.so.4()(64bit)
则要先安装 libv.so()(64bit)
在 http://rpmfind.net/linux/RPM/index.html 里搜索 libev.so.4()(64bit)
找到 rpm -ivh libev-4.04-2.e16.x86_64.rpm
下载后安装
再次执行 yum -y install percona-xtrabackup-24.x86_64 即可成功安装
2、完全备份
语法:innobackupex --user=用户名 --password=密码 /xtrabackup/full
查看备份文件夹:
二进制文件位置:
3、完全恢复
(1) 模拟环境损坏(建议先把文件复制一份再模拟):
先停止数据库:systemctl stop mariadb
删除库文件:rm -rf /var/lib/mysql/*
删除日志文件:rm -rf /var/log/mariadb/mariadb.log
(2) 还原
应用备份的日志文件进行回滚
innobackupex --apply-log /xtrabackup/full/2023-08-17_20-19-58/
恢复文件
innobackupex --copy-back /xtrabackup/full/2023-08-17_20-19-58/
(3) 验证
ls /var/lib/mysql/
记得恢复后要修改属主和属组
4、增量备份
记录上次完整备份后发生变更的数据
(1) 创建一个测试库和测试表
(2) 进行一次完整备份(所有增量备份都要基于完整备份)
先清除之前实验的备份文件:rm -rf /xtrabackup/*
将时间调整到一个比较完整的时间,模拟周一且方便查看
进行完整备份:
innobackupex --user=root /xtrabackup(数据库有设置密码的需要再添一行 --password)
查看备份文件:
(3) 增量备份:周二
更新时间,模拟周二:
往测试表中添加信息:
进行增量备份
innobackupex --user=root --incremental /xtrabackup/ --incremental-basedir=/xtrabackup/2023-05-01_00-03-31
--incremental /xtrabackup/ :进行增量备份
--incremental-basedir=/xtrabackup/2023-05-01_00-03-31:基于周一的备份
查看备份文件
(4) 增量备份:周三
更新日期,并在数据表中添加新内容
基于周二的备份进行增量备份
innobackupex --user=root --incremental /xtrabackup/ --incremental-basedir=/xtrabackup/2023-05-02_00-09-40
查看备份文件:
(5) 增量恢复
① 停止数据库并清理环境:
systemctl stop mariadb
rm -rf /var/lib/mysql/*
② 回滚合并:
回滚到周一的完整备份:
innobackupex --apply-log --redo-only /xtrabackup/2023-05-01_00-03-31
--redo-only:进行增量备份时,只记录事务日志的变化,而不执行这些变化,保持备份的一致性。
周二的增量备份合并到周一:
innobackupex --apply-log --redo-only /xtrabackup/2023-05-01_00-03-31 --incremental-dir=/xtrabackup/2023-05-02_00-09-40
周三的增量备份合并到周一:
innobackupex --apply-log --redo-only /xtrabackup/2023-05-01_00-03-31 --incremental-dir=/xtrabackup/2023-05-03_00-03-38
③ 还原:
还原到周一的备份(此时周一的备份里已经有周二、周三的增量)
innobackupex --copy-back /xtrabackup/2023-05-01_00-03-31
修改属主和属组:
启动数据库,并查看数据:
5、差异备份
增量备份:体积小速度快,但操作频繁
差异备份:基于完整备份之后的所有改变,体积稍大
( 介于完整备份与增量备份之间的备份方法 )
(1) 完整备份周一
修改日期至周一、创建测试表、插入数据、进行完整备份
周一完整备份:innobackupex --user=root /xtrabackup/
(2) 周二
时间调到周二,插入数据,不备份
(3) 周三
时间调到周三,插入数据,基于周一进行差异备份(差异的数据包含周二周三)
差异备份:innobackupex --user=root --incremental /xtrabackup --incremental-basedir=/xtrabackup/2023-05-01_00-03-15
查看备份文件:
(4) 差异恢复:
① 停止数据库,清理环境
systemctl stop mariadb
rm -rf /var/lib/mysql/*
② 回滚合并
回滚周一:innobackupex --apply-log --redo-only /xtrabackup/2023-05-01_00-03-15
合并周三:innobackupex --apply-log --redo-only /xtrabackup/2023-05-01_00-03-15 --incremental-dir=/xtrabackup/2023-05-03_00-02-48
③ 还原
还原到周一:innobackupex --copy-back /xtrabackup/2023-05-01_00-03-15
修改权限并启动查看: