mysql全量备份与增量备份
mysql全量备份与增量备份
1.全量备份
全量备份就是把数据库中所有的数据进行备份。
备份所有库:
mysqldump -uroot -p456 -S /data/3306/mysql.sock -F -A -B |gzip >/server/backup/mysqlbak_$(date+%F).sql.gz

备份一个库:
mysqldump -uroot -p456 -S /data/3306/mysql.sock -F -B oldboy|gzip >/server/backup/mysqlbak_$(date+%F).sql.gz

2.增量备份
从上次全备之后,到下次全备之前更新的新数据。对于mysql来说,binlog日志就是mysql的增量数据。
1)按天备份
| 周一00点全量备份 | 周二00点全量备份 |
| 01.sql.gz | 02.sql.gz |
| 周一增量备份 | 周二增量备份 |
|
mysql-bin.000021 mysql-bin.000022 mysql-bin.000023 ... |
mysql-bin.000035 mysql-bin.000036 mysql-bin.000037 ... |
优点:
恢复时间:短,维护成本:低
缺点:
占用空间:多,占用资源:多,经常锁表影响用户体验
2)按周备份
| 周六00点全量备份 | ||
| 01.sql.gz | ||
| 周一增量备份 | 周二增量备份 | 周三增量备份 |
|
mysql-bin.000021 mysql-bin.000022 mysql-bin.000023 ... |
mysql-bin.000035 mysql-bin.000036 mysql-bin.000037 ... |
mysql-bin.000043 mysql-bin.000044 mysql-bin.000045 ... |
优点:
占用空间:小,占用资源:少,无需锁表用户体验相对好
缺点:
恢复时间:长、复杂,维护成本:高
3.从企业的角度看全量和增量
1)对于中小公司,全量一般每天一次,在业务量低估时执行全备并锁表;
2)对于单台数据库如何实现增量。利用rsync(配合定时任务频率高点,或者inotify主从复制)把所有binlog备份到远程服务器。但是尽量还是要做主从复制!
3)对于大公司,有可能会做周备,其他时间都是增量;
4)一主多从,会有一个从库做备份,延迟同步;
>>>需要mysql的mysqldump全量备份场合:
迁移或升级数据库;
增加从库的时候;
由于硬件或异常情况导致的主库或从库宕机,主从可互相切换,无需备份;但是由于人为操作导致主库误删,主从都会执行,此时需要备份;
做跨机房灾备,需要全量备份到异地。
>>>需要mysql的增量恢复场合:
人为操作导致主库误删(如drop),主从都会执行,此时需要增量备份;
只有一个主库的情况下需要增量恢复。
4.实战----模拟操作失误导致数据丢失进行恢复的过程
>>>思路一:
mysql -uroot -p456 -S /data/3306/mysql.sock
mysql> use oldboy
mysql> show tables;
mysql> select * from student;
mysql> quit
date -s '2018/10/05'
history |grep mysqld
mysqldump -uroot -p456 -S /data/3306/mysql.sock -F -B --master-data=2 oldboy|gzip >/server/backup/bak_$(date+%F).sql.gz #假设现在是00点,一般全量备份只要指定为master-data=2,master-data的作用就是为拿到开始恢复的位置点,以便后面的增量备份有所依据,其他全备已存在不用更新;建立从库才需要指定master-data=1告诉从库从主库的哪个位置进行更新,只需做全备无需增量备份。最好记录切割前的mysql-bin位置点(可以通过锁表看下master.info中记录的信息)
mysql -uroot -p456 -S /data/3306/mysql.sock
mysql> use oldboy
mysql> desc student;
mysql> insert into student(name) values('oldboy101');
mysql> insert into student(name) values('oldboy102'); #模拟00点到早上10点的增量
mysql> select * from student;
mysql> drop database oldboy; #模拟早上10点做的误操作,应用开始出现故障
mysql> quit
通过防火墙禁止web等应用向主库写数据或者主库锁表,让主库暂时停止更新,进行数据恢复
ll /server/backup
gzip -d bak_2018-10-05.sql.gz
grep -i "change" bak_2018-10-05.sql #如果先前忘记查看位置点,可以尝试在此找到,假设为000014
mysqladmin -uroot -p456 -S /data/3306/mysql.sock flush-logs #刷新binlog,将恢复的目标定到上步找到的位置,下面一个binlog则是新产生的了
cd /data/3306/
cp mysql-bin.000014 /server/backup/
cd /server/backup/
mysqlbinlog -d oldboy mysql-bin.000014 >bin.sql
vi bin.sql 将drop database oldboy这句删掉,并保存文件
mysql -uroot -p456 -S /data/3306/mysql.sock
mysql -uroot -p456 -S /data/3306/mysql.sock <bak_2018-10-05.sql
mysql -uroot -p456 -S /data/3306/mysql.sock oldboy <bin.sql
mysql -uroot -p456 -S /data/3306/mysql.sock
mysql> use oldboy
mysql> select * from student; #发现恢复成功
{补充:
mysql> show variables like '%log_bin%'; #有个参数sql_log_bin,如果关掉此参数,则利用mysqldump进行恢复的时候,就不会记录新的binlog日志mysql-bin.000015中}
>>>思路二:
1)停止一个从库,然后在主库刷新binlog,把mysql-bin.000014恢复成bin.sql(去掉drop语句的)
2)把全备bak_2018-10-05.sql及10点前的增量bin.sql恢复到从库
3)此时数据丢失多少?10点刷新binlog以后的数据,即mysql-bin.000015
4)停止主库,快速把mysql-bin.000015解析为SQL,恢复到从库 #避免主键冲突问题,尽量使停库时间缩到最短,尽量减少应用停止的时间
5)切换到从库提供服务
>>>增量恢复小结:
人为SQL造成的误操作;
需准备全备和增量;
恢复时建议对外停止更新;
恢复全量,然后把增量日志中有问题的SQL语句删除,恢复数据库
>>>增量恢复的核心思想:
流程制度控制,否则将面临服务和数据故障的风险;
可以通过延迟备份来解决,或者通过监控,或者通过制定黑、白名单(where子句)机制来控制;
选择停库修复,定义可量化的目标,满足业务需求的最低限制
5.mysqlbinlog增量备份
作用:解析mysql的binlog日志 #mysql-bin.0000XX,mysql-bin.index记录了所有mysql-bin文件
mysql内部增删改查等对mysql数据库有更新记录的文件,即mysql-bin文件
-d 指定单独的数据库恢复 #适用于对单个库做了误操作,只需恢复此库的备份恢复操作
--start-position --stop-position 指定位置恢复 mysqlbinlog mysql-bin.000020 --start-position=365 --stop-position=456 -r pos.sql
--start-datetime --stip-datetime 指定时间点恢复 mysqlbinlog mysql-bin.000020 --start-datetime='2018-10-06 15:00:00' --stop-datetime='2018-10-06 15:09:00' -r time.sql
【思考】
>>mysql出现同步延迟原因是什么?如何解决?
当主库的TPS并发较高时,产生的DDL(修改类的sql语句)数量,超过了slave机器sql线程所能承受的能力,那么延时就会产生了。
>>解决方式
数据库的读写分离软件,mysql-proxy和amoeba;
了解mysql高可用MMM技术;
mysql半同步应用,xtrabackup物理备份;
mysql+heartbeat+drbd高可用;
mysql全量备份与增量备份的更多相关文章
- mysql的全量备份与增量备份
mysql的全量备份与增量备份 全量备份:可以使用mysqldump直接备份整个库或者是备份其中某一个库或者一个库中的某个表. 备份所有数据库:[root@my ~]# mysqldump -uroo ...
- liunx系统mysql全量备份和增量备份
前提 在互联网项目中最终还是读数据进行操作,都离不开曾删改查,那么数据是重中之重,数据库的备份就显得格外重要. 但是每次都直接导出整个数据库的sql文件,显然是不现实的.对数据库的性能影响比较 ...
- Centos 6.9 安装xtrabackup-2.4.8 通用包,yum安装,全量备份,增量备份
xtrabackup-2.4.8的安装及使用 Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtradb数据库进行热备 ...
- xtrabackup实现全量备份和增量备份
mysql增量和完全备份innobackupex2.1.9版本1 yum安装: 官网地址:https://www.percona.com/doc/percona-xtrabackup/LATEST/i ...
- Percona Xtrabackup备份mysql全库及指定数据库(完整备份与增量备份)
原文地址:http://www.tuicool.com/articles/RZRnq2 Xtrabackup简介 Percona XtraBackup是开源免费的MySQL数据库热备份软件,它能对In ...
- Percona备份mysql全库及指定数据库(完整备份与增量备份)
Percona Xtrabackup备份mysql全库及指定数据库(完整备份与增量备份) Xtrabackup简介 Percona XtraBackup是开源免费的MySQL数据库热备份软件,它能对I ...
- 【运维实战】利用tar -g 实现简单全量备份和增量备份(带演示)
备份产生 全量备份指完全备份,增量备份指针对上次至今的修改进行备份.linux提供tar -g可实现备份功能. 第一次运行 tar -g 备份存放目录/snapshot -czvf 备份存放目录/备 ...
- VMware 虚拟化编程(11) — VMware 虚拟机的全量备份与增量备份方案
目录 目录 前文列表 全量备份数据的获取方式 增量备份数据的获取过程 前文列表 VMware 虚拟化编程(1) - VMDK/VDDK/VixDiskLib/VADP 概念简析 VMware 虚拟化编 ...
- 阿里云 如何减少备份使用量? mysql数据库的完整备份、差异备份、增量备份
RDS for MySQL备份.SQL审计容量相关问题_MYSQL使用_技术运维问题_云数据库 RDS 版-阿里云 https://help.aliyun.com/knowledge_detail/4 ...
随机推荐
- JAVA多线程学习七-线程池
为什么用线程池 1.创建/销毁线程伴随着系统开销,过于频繁的创建/销毁线程,会很大程度上影响处理效率 例如: 记创建线程消耗时间T1,执行任务消耗时间T2,销毁线程消耗时间T3 如果T1+T3> ...
- finally块
/* finally 块: finally块的 使用前提是必须要存在try块才能使用. finally块的代码在任何情况下都会执行的,除了jvm退出的情况. finally非常适合做资源释放的工作,这 ...
- iOS开发笔记,简单实现视频音频的边下边播
总是在网上看别人的博文,受益匪浅,从没自己写过,今天分享一点小经验,第一次写技术博客,希望对同行的ios猿们有所帮助. 先介绍一下自己的情况:一年ios开发,http协议不太懂,大约知道断点下载h ...
- gpg 使用入门
1. 生成秘钥 gpg --full-generate-key 等价于 gpg --full-gen-key Real name: yellowconvict为该秘钥的名字,也称为 USER-ID 在 ...
- tomcat 配置https证书 ssl
修改tomcat-conf-server.xml,原配置文件是 <Connector connectionTimeout="20000" port="8080&qu ...
- 在 .NET 平台使用 ReflectionDynamicObject 优化反射调用代码
基于封装的原则,API 的设计者会将部分成员(属性.字段.方法等)隐藏以保证健壮性.但总有需要直接访问这些私有成员的情况. 为了访问一个类型的私有成员,除了更改 API 设计还有就是使用反射技术: p ...
- 对于计算正确率时 logits.argmax(dim=1),torch.eq(pre_label,label)
额 好像是一句非常简单的代码 ,但是作为新手 ,我是完全看不懂哎 前十眼. 首先 这里的logits是一个 (a,b)维的张量.其中a是你的全连接输出维度,b是一个batch中的样本数量. 我们经过 ...
- [旧][Android] Retrofit 源码分析之执行流程
备注 原发表于2016.04.23,资料已过时,仅作备份,谨慎参考 前言 由于是第一次自己翻看源代码进行学习,加上基础不好,在看源代码的过程中简直痛苦不堪,但同时也暴露出了自己的许多问题.我觉得学习源 ...
- 为什么有些BI工具做数据可视化项目频频失败?
现如今数据可视化可谓是非常之火,随着硬件价格的一降再降,仿佛做数据可视化项目,你没有数据大屏,你就没有逼格.理想很丰满,现实很骨感,并不是每一个数据可视化项目都能够成功.数据可视化项目的进行,无外乎是 ...
- 【C#反射】动态创建类型实例
转载自:https://www.cnblogs.com/dytes/archive/2012/06/29/2569488.html .NET中除了构造函数外,还有多种方式可以创建类型的实例.下面总结了 ...