为什么要备份
灾难恢复:硬件故障、软件故障、自然灾害、黑客攻击、误操作测试等数据丢失场景
备份注意要点
能容忍最多丢失多少数据
恢复数据需要在多长时间内完成
需要恢复哪些数据
还原要点
做还原测试,用于测试备份的可用性
还原演练
还原演练
备份和恢复
备份类型
完全备份,部分备份
部分备份:只备份数据子集,如部分库或表
完全备份、增量备份、差异备份
增量备份:仅备份最近一次完全备份或增量备份(如果存在增量)以来变化的数据,备份较快,还原复杂
增量备份示意图
还原逻辑
、
测试
差异备份:仅备份最近一次完全备份以来变化的数据,
还原次序,还原第一次周日的完全备份,在还原最后一次备份,出故障时间点到最后一次备份期间用二进制恢复
备份较慢,还原简单注意:二进制日志文件不应该与数据文件放在同一磁盘
备份和恢复
冷、温、热备份
冷备:读写操作均不可进行
冷备演练
1.停服务
1.systemctl stop mariadb
2.tar -Jcvf all.bak /var/lib/mysql/
3.备份二进制日志
tar -Jcvf binlog.bak /data/czq/
4. 迁移到另外一台机器
scp -r ./backup/ 192.168.111.23:/data/
安装数据库
还原二进制文件
温备:读操作可执行;但写操作不可执行,mysqldump 备份还原演练
演练场景描述:每天下午2点做全量备份,某天18点数据库故障,从2点-18点有数据变化,
实验前提:二进制日志启用,并且二进制文件单独存放
初始化数据库工作
1 假设下午两点全量备份
mysqldump -A --master-data=2 > /data/all.sql
说明:master-data 记录备份时间点二进制位置7925
数据库修改 备份后对hellodb数据库操作
insert students (name,age)values('a',20);
insert students (name,age)values('b',30);
模拟故障
假设到了18点,数据库故障
2 删除库 rm -rf /var/lib/mysql/*
3 还原演练
确保无用户访问数据库
1)systemctl restart mariadb
2)mysql > show master logs; 查看当前二进制位置
3)根据/data/all.sql中日志位置和2)定位需要的二进制日志范围
mysqlbinlog --start-position=7925 mysql-bin.000003 > /data/inc.sql
注意:要不走想对路径,要不走绝对路径 ,要不找不到
mysqlbinlog mysql.000004 >> /data/inc.sql
mysqlbinlog mysql.000005 >> /data/inc.sql
-
还原一定要把二进制关闭,要不在还原的时候还会继续生成二进制日志
mysql > set sql_log_bin=off;
mysql>source /data/all.sql
mysql>source /data/inc.sql -
mysql > set sql_log_bin=on;
-
做检查确认数据库恢复成功,恢复用户访问
测试:
我们看到 我们插入的数据已经环境,到此物理损坏演练完毕
演练*实验:恢复误删除的表
场景描述每天下午两点做数据库全量备份,但是下班18点误操作把学生表删除了
还原逻辑,去二进制掉删除表的命令
演练步骤:
1.全量备份
insert students (name,age)values('c',40);
insert students (name,age)values('d',50);
=等到18点========
删表
=删除后其它用户操作其它表=============================================================================
恢复演练
1.不让用户访问
2.
1.
1.还原到18:10的二进制日志
mysqlbinlog --start-position=1590073 mysql-bin.000006 > /data/incdate +%F
.sql
打开二进制的sql删除学生表的删除
注释或着删除
初始化数据库
4) 还原一定要把二进制关闭,要不在还原的时候还会继续生成二进制日志
mysql > set sql_log_bin=off;
mysql>source /data/all_2020-10-24.sql
mysql>source /data/inc2020-10-24.sql
- mysql > set sql_log_bin=on;
测试,我们看到已经还原成功,到此演练结束
分库备份脚本演练,
场景应用:上边的演练主要是对整个数据库进行备份,有时候在企业中要对单独的数据库进行备份,所以我们可以编写分库备份脚本
([root@centos7 ~]#for db in mysql -e 'show databases'|grep -Ev '^(information_schema|performance_schema|Database)$'
;do mysqldump -B $db --single-transaction --master-data=2 |gzip > /data/czq/$db.sql.gz ;done)
或者脚本改成这样,先查询出所有数据库作为标准输出,然后用sed替换,传给bash执行
[root@centos7 ~]#mysql -e 'show databases'|grep -Ev '^(information_schema|performance_schema|Database)$'|sed -rn 's@(.*)@mysqldump -B \1 --single-transaction --master-data=2 |gzip > /data/\1.sql.gz@p'|bash
热备实验:xtrabackup 备份还原
热备:读写操作均可执行
MyISAM:温备,不支持热备
InnoDB:都支持
xtrabackup 基本概念原理
架构图是两条线,一个是脚本,一个是exe文件,配合执行,2.4版本二条线合并成一条线
1.安装
备份过程大概分三步,以下下是原理图
1.备份
2.数据整合
3.还原
新版xtrabackup完全,增量备份及还原演练
1.备份演练 主机:192.168.111.129
mkdir /backup/
xtrabackup --backup --target-dir=/backup/
2.恢复演练:目标主机:192.168.111.156 恢复
目标主机装备份软件,装数据库服务,启动
1)初始化
2)预准备:确保数据一致,提交完成的事务,回滚未完成的事务
1)xtrabackup --prepare --target-dir=/backup/
2)复制到数据库目录
注意:数据库目录必须为空,MySQL服务不能启动
xtrabackup --copy-back --target-dir=/backup/
到此还原成功
热备实验:xtrabackup 增量备份以及还原
备份服务器
1.全量备份
xtrabackup --backup --target-dir=/backup/base
2.模拟数据更新
insert students (name,age)values('e',60);
insert students (name,age)values('f',70);
3,第一次增量备份是基于全量备份的
xtrabackup --backup --target-dir=/backup/inc1 --incrementalbasedir=/backup/base
该数据继续增量
xtrabackup --backup --target-dir=/backup/inc2 --incrementalbasedir=/backup/inc1
4.拷贝到远程主机
还原
1,预处理
xtrabackup --prepare --apply-log-only --target-dir=/backup/base
变大了