目录
一、备份分类:
1、物理备份
1.1、介绍
1.2、方法
2、逻辑备份
二、备份策略
1、完全备份(全量备份):
2、差异备份:
3、增量备份:
3.1、增量备份产生的原因
3.2、增量备份的方法
3.3、增量备份的策略
三、常见的备份方法
1、物理冷备(完全备份)
1.1、特点
1.2、步骤
2、专用备份工具mydump或mysqlhotcopy (完全备份,逻辑备份)
3、启用二进制日志进行增量备份
4、第三方工具备份
四、完全恢复加增量恢复组合
1、优势:
2、步骤demo:
2.1、编写增量备份脚本
2.2、编写完全备份脚本
2.3、将两个编写的脚本添加到计划性任务中
对数据库操作系统的物理文件(如数据文件、日志文件等)的备份。
(1)冷备份(脱机备份) :是在关闭数据库的时候进行的
(2)热备份(联机备份) :数据库处于运行状态,依赖于数据库的日志文件
(3)温备份:数据库锁定表格(不可写入但可读)的状态下进行备份操作
对数据库逻辑组件(如:表等数据库对象)的备份,即以sql语句的形式,把库、表结构、表数据保存下来。
每次对数据库进行完整的备份。
备份自从上次完全备份之后被修改过的文件。
只有在上次完全备份或者增量备份后被修改的文件才会被备份。
(1)全量备份中备份数据中有重复数据
(2)全量备份 备份时间与恢复时间过长
MySQL没有提供直接的增量备份方法,可通过MySQL提供的二进制日志间接实现增量备份。
(1)一般恢复:所有备份的二进制日志内容全部恢复
(2)基于位置恢复:数据库在某一时间点可能既有错误的操作也有正确的操作,可以基于精准的位置跳过错误的操作;
(3)基于时间点恢复:跳过某个发生错误的时间点实现数据恢复。
优点:备份时数据库处于关闭状态,直接打包数据库文件;备份速度快,恢复时也是最简单的;
缺点:数据存在大量的重复;占用大量的备份空间;备份与恢复时间长。
(1)关闭MySQL数据库
systemctl stop mysqld #先关闭服务
mkdir /backup/ #创建备份目录
(2)使用tar命令直接打包数据库文件夹
rpm -q xz #使用xz工具进行压缩,检查xz工具是否已安装
yum install xz -y #如果没安装,可以先yum安装
cd /usr/local/mysql/
tar Jcf /backup/mysql_all_$(date +%F).tar.xz data #打包数据库文件。/usr/local/mysql/data 为数据库文件存放目录
(3)直接替换现有MySQL目录即可
cd /backup/
tar Jxf mysql_all_2022-10-25.tar.xz -C /opt/
mv /opt/data/ /usr/local/mysql/
见下一篇MySQL备份和恢复(二)mysqldump-CSDN博客
进行增量备份,需要刷新二进制日志,见mysql-binlog(三)binlog用于数据恢复_mysqlbinlog通过 position 恢复3-CSDN博客
(1)免费的MySQL热备份软件Percona XtraBackup
(2)mysqldump常用的逻辑备份工具 (导出为sql脚本)
(3)mysqlhotcopy仅拥有备份MyISAM和ARCHIVE表
完全备份和不完全备份都各有各的优点,公司对数据库备份大部分会采用的方式为完全备份+增量备份 。完全备份:磁盘占用大,但是操作简便不易出错 ;增量备份:磁盘占用小,可针对短时间的备份,但是一旦全有增量备份组成的备份,操作难度会大大提高,易出错。
如对核心t_user表进行备份,要求每周二凌晨两点半(维护时间)进行一次完全备份,每天的凌晨一点对其进行增量备份。
#!/bin/bash
logs_path="/opt/sql_bak"
[ -d $logs_path ] || mkdir -p $logs_path
/usr/local/mysql/bin/mysqladmin -u root -wtyy flush-logs
lastlogs=`sed -n '$p' /usr/local/mysql/data/mysql-bin.index | awk -F '/' '{print $2}'`
mv /usr/local/mysql/data/$lastlogs /opt/sql_bak/binlog_`date +%Y%m%d`
#!/bin/bash
home_path="/opt/sql_bak/backup_sql"
[ -d $home_path ] || mkdir -p /opt/sql_bak/backup_sql
/usr/local/mysql/bin/mysqldump -u root -wtyy test t_user> /$home_path/infos_$(date +%Y%m%d).sql
/usr/local/mysql/bin/mysqldump -u root -wtyy --databases test > /$home_path/tests_$(date +%Y%m%d).sql
crontab -e
00 1 * * * /opt/addbak.sh
30 2 * * 2 /opt/backup.sh