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全量备份与增量备份的更多相关文章

  1. mysql的全量备份与增量备份

    mysql的全量备份与增量备份 全量备份:可以使用mysqldump直接备份整个库或者是备份其中某一个库或者一个库中的某个表. 备份所有数据库:[root@my ~]# mysqldump -uroo ...

  2. liunx系统mysql全量备份和增量备份

    前提 ​ 在互联网项目中最终还是读数据进行操作,都离不开曾删改查,那么数据是重中之重,数据库的备份就显得格外重要. ​ 但是每次都直接导出整个数据库的sql文件,显然是不现实的.对数据库的性能影响比较 ...

  3. Centos 6.9 安装xtrabackup-2.4.8 通用包,yum安装,全量备份,增量备份

    xtrabackup-2.4.8的安装及使用 Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtradb数据库进行热备 ...

  4. xtrabackup实现全量备份和增量备份

    mysql增量和完全备份innobackupex2.1.9版本1 yum安装: 官网地址:https://www.percona.com/doc/percona-xtrabackup/LATEST/i ...

  5. Percona Xtrabackup备份mysql全库及指定数据库(完整备份与增量备份)

    原文地址:http://www.tuicool.com/articles/RZRnq2 Xtrabackup简介 Percona XtraBackup是开源免费的MySQL数据库热备份软件,它能对In ...

  6. Percona备份mysql全库及指定数据库(完整备份与增量备份)

    Percona Xtrabackup备份mysql全库及指定数据库(完整备份与增量备份) Xtrabackup简介 Percona XtraBackup是开源免费的MySQL数据库热备份软件,它能对I ...

  7. 【运维实战】利用tar -g 实现简单全量备份和增量备份(带演示)

    备份产生 全量备份指完全备份,增量备份指针对上次至今的修改进行备份.linux提供tar -g可实现备份功能. 第一次运行 tar -g 备份存放目录/snapshot -czvf  备份存放目录/备 ...

  8. VMware 虚拟化编程(11) — VMware 虚拟机的全量备份与增量备份方案

    目录 目录 前文列表 全量备份数据的获取方式 增量备份数据的获取过程 前文列表 VMware 虚拟化编程(1) - VMDK/VDDK/VixDiskLib/VADP 概念简析 VMware 虚拟化编 ...

  9. 阿里云 如何减少备份使用量? mysql数据库的完整备份、差异备份、增量备份

    RDS for MySQL备份.SQL审计容量相关问题_MYSQL使用_技术运维问题_云数据库 RDS 版-阿里云 https://help.aliyun.com/knowledge_detail/4 ...

随机推荐

  1. Tomcat服务部署及优化

    Tomcat 服务部署及优化 1.Tomcat简介 2.Tomcat 服务安装及部署 3.Tomcat虚拟主机配置 4.Tomcat 优化 1.Tomcat简介: 概述: Tomcat是Java语言开 ...

  2. VBA如何实现筛选条件之“排除某些值”

    小爬一般习惯使用Python来解决爬虫和某些办公自动化场景问题,不过最近却需要实现一个VBA需求:从一堆人员处理的Excel数据记录中,排除某些"用户名称"处理的数据.整个思考过程 ...

  3. pycharm工具使用

    转自: https://blog.csdn.net/u014044812/article/details/78727496   因公司的需求,需要做一个爬取最近上映的电影.列车号.航班号.机场.车站等 ...

  4. PHP面试常考内容之面向对象(2)

    PHP面试专栏正式起更,每周一.三.五更新,提供最好最优质的PHP面试内容.继上一篇"PHP面试常考内容之面向对象(1)"发表后,今天更新(2),需要(1)的可以直接点击文字进行跳 ...

  5. 猜猜我在哪里-linux查找命令

    文章目录 find findfs locate slocate which whereis pwd pwdx find: # 这是一个很强大的查找命令 findfs: # 依据卷标(LABEL)和UU ...

  6. python3发邮件脚本

    官方文档中建议保存token,且token是每2小时更新一次. 所以token先保存在本地token.txt文件夹中,设定计划任务每1小时删除一下token.txt.虽然造成了浪费,对于发消息不多的人 ...

  7. [自动化]基于kolla-ceph的自动化部署ceph集群

    kolla-ceph来源: 项目中的部分代码来自于kolla和kolla-ansible kolla-ceph的介绍: 1.镜像的构建很方便, 基于容器的方式部署,创建.删除方便 2.kolla-ce ...

  8. 华为模拟器 AP AC配置

    组网示意图: 前提条件:1)所有设备工作正常2)依据上述组网建立测试环境 1)正确配置AC使AP发放SSID:'SSID-Temp1'.'SSID-Temp2'和'SSID-Temp3',且对应业务v ...

  9. 浅谈bi工具的含义和不同类型

    ​什么是BI工具? 商业智能(BI)工具是利用一组方法和技术来准备,呈现和帮助分析数据的工具.通过此过程,数据将转化为可操作的业务信息,帮助决策者和最终用户做出更有效的数据驱动决策. 商业智能使用的一 ...

  10. 财务数据分析工具的选择:Excel还是大数据BI?

    ​财务数据分析一般都采用什么工具?跟财务数据分析的哪些指标有关?要怎样展现财务数据间的紧密关联? 财务报表分析比较复杂,一般来说主要包括以下项目: 1. 趋势:在多个时间段内为财务报表中的关键项目创建 ...