MySQL增量备份和全量备份

1 全量备份

1.1 创建用于备份的目录

mkdir /root/mysql.backup

1.2 创建存入备份文件的目录

mkdir /root/mysql.backup/data

1.3 进入备份目录,创建备份脚本

cd /root/mysql.backup
vim mysqlBackuoShell.sh
#!/bin/bash 
   
#保存备份个数,31条 
number=31 
#备份保存路径 
backup_dir=/root/mysql.backup/data 
#日期 
dd=`date +%Y-%m-%d_%H_%M_%S`
#备份工具 
tool=mysqldump 
#用户名 
username=root 
#密码 
password=Abc123456.
#将要备份的数据库 
database_name=test
   
#运行内容,结果用gzip压缩下
$tool -u $username -p$password --single-transaction --master-data=2 --flush-logs -B $database_name|gzip > $backup_dir/$database_name-$dd.sql.gz
   
#写创建备份日志 
echo "create $backup_dir/$database_name-$dd.sql.gz" >> $backup_dir/log.txt 
   
#找出需要删除的备份 
delfile=`ls -l -crt  $backup_dir/*.sql.gz | awk '{print $9 }' | head -1` 
   
#判断现在的备份数量是否大于$number 
count=`ls -l -crt  $backup_dir/*.sql.gz | awk '{print $9 }' | wc -l` 
   
if [ $count -gt $number ] 
then 
  rm $delfile  //删除最早生成的备份,只保留number数量的备份 
  #写删除文件日志 
  echo "delete $delfile" >> $backup_dir/log.txt 
fi

1.4 给脚本赋予执行权限

chmod +x  mysqlBackuoShell.sh

1.5 创建定时脚本

vim mysqlRollBack.cron

内容如下

# 每天凌晨三点进行一次全量备份
0 3 * * * /data/mysqlbackup/mysqlBackuoShell.sh

1.6 启动定时任务

crontab mysqlRollBack.cron

1.7 查看定时任务是否成功

crontab -l

在这里插入图片描述

1.8 删除定时任务

如果不想执行定时任务,直接删除就行了

crontab -r

1.9 编辑定时任务

如果想要修改执行时间,可以编辑

crontab -e

2 增量备份

2.1 查看是否开启binlog日志

show variables like '%log_bin%';

在这里插入图片描述

2.2 如果没开启,则修改配置文件

vim /etc/my.cnf
#节点Id,注意集群中不能重复,单节点不配置也可以
server-id=123
#开启binlog日志,指定其存放位置
log-bin=/var/lib/mysql/mysql-bin
#开启binlog自动过期
expire_logs_days=10

2.3 重启MysQL服务

service mysqld restart

2.4 查看binlog日志是否成功开启

show variables like '%log_bin%';

在这里插入图片描述

3 模拟删库恢复

3.1 先查询当前所有的二进制日志

show master logs;

在这里插入图片描述

3.2 查看当前数据库中user表中的数据

在这里插入图片描述

3.3 手动执行一次全量备份

./mysqlBackuoShell.sh

3.4 查看是否备份成功

在这里插入图片描述

3.5 再次查询当前所有的二进制日志

这时查看多出了一条mysql-bin.000019,说明刚才全量备份后,重新建立了二进制文件,备份后的数据修改操作日志只会存入最新的这条二进制文件中

show master logs;

在这里插入图片描述

3.5 对数据库进行修改操作

向user表中新增一条数据(name=王五),此时新增这条数据的操作日志会存入最新的那条二进制文件中(mysql-bin.000019)
在这里插入图片描述

3.6 删除数据库

此时删库的操作也将存入最新的二进制文件中(mysql-bin.000019)
在这里插入图片描述
此时MySQL服务中已经没有test这个数据库
在这里插入图片描述

3.7 恢复操作

1.首先刷新二进制日志,此时会新建一条新的二进制文件(mysql-bin.000020),之后所有操作都将存入这条最新的二进制文件中,接下来我们只需要分析mysql-bin.000019这个二进制文件删库的位置

flush logs;

在这里插入图片描述

2.分析二进制文件 mysql-bin.000019,查看删库的日志位置

show binlog events in 'mysql-bin.000019';

在这里插入图片描述

发现删库操作在621这个位置,所以我们只需要把数据恢复621之前的位置(485)就可以了
3. 先进行全量恢复
进入存放备份文件的目录

cd /root/mysql.backup/data/

解压备份文件

gzip -d 备份文件

在这里插入图片描述
执行恢复命令

mysql -uroot -p -v  </root/mysql.backup/data/test-2023-03-08_14_32_02.sql

此时上一次全量备份的数据已经恢复完成,最新增加的那条(name=王五)还没恢复
在这里插入图片描述
4 增量恢复,恢复上一次全量恢复后到删库之前的数据
进入二进制文件存放位置,执行增量恢复操作

mysqlbinlog 常用参数选项解释:
--start-position=875 起始pos点
--stop-position=954 结束pos点
--start-datetime="2016-9-25 22:01:08" 起始时间点
--stop-datetime="2019-9-25 22:09:46" 结束时间点
--skip-gtids是忽略GTIDs报错
-d 指定数据库
mysqlbinlog --stop-position=485 -d test  mysql-bin.000019 | mysql -uroot -pAbc123456.

此时最新的那条数据(name=王五)已经恢复过来了
在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值