前情摘要

自己作死干了一件特别蠢的事情(具体略)

然后开始研究如何进行增量备份

增量备份

原理

mysql 有个 binlog 的功能,会记录所有的用户的操作,可以依靠这个,配合全备份,将数据库回滚到某一个特殊的时刻。hhh

简单来说,比如我们每周做一次全备份,每天做一次增量备份,当数据库发生问题的时候,我们就可以先将数据库回滚到上一周我们的全备份的时间,然后再通过每天的增量备份(其实就是模拟所有的数据库操作,全部执行一遍),将数据恢复到我们想要的时间点。

配置

mysql 的 binlog 功能需要在配置文件中打开,在 my.cnf 或者 mysqld.cnf 中添加以下几行:server-id = 1

# binlog存放路径

log_bin = /var/log/mysql/mysql-bin.log

# binlog记录的格式,有row、statement、mixed三种选项

binlog-format = row

# binlog写缓冲区设置大小,由于是内存,写速度非常快,可以有效提高binlog的写效率,如果数据库中经常出现大事务,可以酌情提高该参数。

binlog_cache_size = 32m

# 最大缓存区大小

max_binlog_cache_size = 512m

# binlog文件最大的大小

max_binlog_size = 1000m

# 需要备份的数据库名,如果备份多个数据库,重复设置这个选项即可

binlog-do-db=game

binlog-do-db=platform

# 不需要备份的数据库,如果备份多个数据库,重复设置这个选项即可

binlog-ignore-db=

重启mysql服务,在对应的文件夹下(这里是/var/log/mysql)会看到 mysql-bin.000001 和 mysql-bin.index 两个文件,第一个就是我们需要的 binlog 文件,里面会记录我们的操作,第二个负责记录 binlog 的名称,可以用来判断当前最新的 binlog 是哪一个

一些相关的操作

开启了binlog之后,就可以进行一些尝试了,可以先去数据库做一些修改操作。(因为binlog的格式选择的是row,所以select语句是不会被记录的)mysql> UPDATE ....

mysql> DELETE ....

// 查看当前log的备份情况

mysql> show master logs;

// 查看最新的备份文件的情况

mysql> show master status;

// 将当前的log写入磁盘,并创建新的binlog文件

mysql> flush log;

binlog 文件可以使用 mysqlbinlog 命令查看// 查看binlogfile即可看到这份log中记录的数据库操作

mysqlbinlog mysql-bin.000011 > /tmp/binlogfile

// 获取指定位置范围的记录

mysqlbinlog --start-position=1285 --stop-position=1681 mysql-bin.000011 > /tmp/binlogfile

// 获取指定时间范围内的记录,常用

mysqlbinlog --start-date="2012-10-15 16:30:00" --stop-date="2012-10-15 17:00:00"

全备份

全备份没什么好说的,mysqldump一条命令就可以了mysqldump -uroot -ppwd --quick --all-databases --flush-logs --delete-master-logs --single-transaction > $dumpFile

注意里面的一些参数,尤其是flush-logs和single-transaction两个参数,建议开启

自动化脚本

全备份#!/bin/bash

# 全备份路径

backDir=/var/log/mysql/backup/weekly

# 日志文件

logFile=/var/log/mysql/backup/bak-all.log

# 获取当前时间,用于命名

nowDate=`date +%Y%m%d`

beginTime=`date +"%Y%m%d %H:%M:%S"`

# 进入备份文件夹

cd $backDir

dumpFile=$nowDate.sql

dumpFileTgz=$nowDate.sql.tgz

# mysqldump 导出所有数据库

echo dumping...

mysqldump -uroot -ppwd --quick --all-databases --flush-logs --delete-master-logs --single-transaction > $dumpFile

echo compressing...

# 压缩文件

tar czvf $dumpFileTgz $dumpFile

rm $dumpFile

endTime=`date +"%Y%m%d %H:%M:%S"`

echo begin:$beginTime end:$endTime $dumpFileTgz succ >> $logFile

# 清楚之前的增量备份

cd $backDir/../daily

rm -f *

增量备份脚本#!/bin/bash

# 增量备份存放路径

backDir=/var/log/mysql/backup/daily

# binlog存放路径

binDir=/var/log/mysql/

# 日志文件

logFile=/var/log/mysql/backup/bak-daily.log

# binlog.index 文件路径

binIndex=/var/log/mysql/mysql-bin.index

# 将当前所有的日志写到磁盘,会新建一个00000*的binlog文件

mysqladmin -uroot -phhxxttxs flush-logs

# 获取当前有几条binlog文件(需要保证是从1开始的)

count=`wc -l $binIndex | awk '{print $1}'`

nextNum=0

for file in `cat $binIndex`

do

# 获取文件名,去除文件夹名

base=`basename $file`

# 遍历每个binlog文件,如果是最新的不做操作,否则备份

nextNum=`expr $nextNum + 1`

if [ $nextNum -eq $count ]

then

echo $base skip! >> $logFile

else

dest=$backDir/$base

# file already exist

if(test -e $dest)

then

echo $base exist! >> $logFile

else

cp $binDir/$base $backDir

echo $base copyed >> $logFile

fi

fi

done

echo `date +"%Y%m%d %H:%M:%S"` Backup succ! >> $logFile

做一下定时就好了

具体恢复操作

当发现数据丢失时确认丢失数据的开始时间

找到距离这个时间最近的全量备份

mysql -uuser -p < all.sql

依次运行从全备份到丢失时间之间的增量备份

mysqlbinlog mysql-bin.000123 –start-date=”” –end-date=”” > /tmp/tmpfile

mysql -uuser -p < /tmp/tmpfile

通过以上,就可以将数据还原到需要的还原点。

记得定期查看备份的log文件,以防出现问题,全备份需要定时清理

mysql的增量备份方法_Mysql 增量备份,全部备份实现方法以及自动化脚本相关推荐

  1. mysql的增量备份方法_mySQL 增量备份方案(转)

    1.在 /etc/my.cnf 下面设置开启bin-log 编辑 vim /etc/my.cnf [mysqld] binlog_format       = MIXED                ...

  2. mysql第五章事务_mysql 第五章 备份恢复

    mysql 第五章 备份恢复 一.备份策略***** 1.每周一次全备,每天一次增量备 2.每天检查备份是否成功 3.每季度进行备份恢复演练 4.设置 -master-data=2 (记录备份的GTI ...

  3. mysql选出重复的字段_mysql查询表里的重复数据方法:

    INSERT INTO hk_test(username, passwd) VALUES ('qmf1', 'qmf1'),('qmf2', 'qmf11') delete from hk_test  ...

  4. mysql增量备份实例_MySQL增量备份与恢复实例

    本次操作的MySQL版本为5.5.40 for Linux (x86_64). 增量备份要确保打开了二进制日志,参考mysql的日志系统: 1 mysql> show variables lik ...

  5. mysql还原数据库名一样_MySQL数据库的多种备份与多种还原

    一.备份 1.mysqldump 方法备份 mysqldump备份很简单,格式如下: mysqldump -u用户名 -p密码 数据库名> XX.sql 路径 例如: mysqldump -ur ...

  6. mysql如何进行视图恢复_mysql事务 视图 索引 备份和恢复

    事务 1.事务: 概念:是作为单个逻辑工作单元执行的一系列操作 多个操作作为一个整体向系统提交,要么都执行,要么都不执行 事务是一个不可分割的工作逻辑单元 默认情况下 , 每条单独的SQL语句视为一个 ...

  7. mysql sql 备份数据_mysql怎么进行数据库备份和还原,以及自动备份

    要加分哦 我可是把整个代码都贴出来了 用着可好用 我正用的 有两个 一个简单的下面是代码 备份原数据库路径: 备份目标数据库路径: Function CopyFiles(TempSource,Temp ...

  8. mysql主从 主机宕机_MySQL主从宕机的解决方法

    测试系统:centos6.5系统 测试环境IP地址划分: master: 192.168.80.130 slave:192.168.80.143 slave:192.168.80.146 首先模拟(M ...

  9. mysql创建库几种方法_MySQL创建数据库的两种方法

    本文为大家分享了两种mysql创建数据库的方法,供大家参考,具体内容如下 第一种方法:使用 mysqladmin 创建数据库使用普通用户,你可能需要特定的权限来创建或者删除 mysql 数据库. 所以 ...

最新文章

  1. 深度学习——Xavier初始化方法
  2. MIT教授Tomaso Poggio演讲与专访:智能背后的科学与工程 | 腾讯AI Lab学术论坛
  3. UNITY调用安桌方法出现 JNI: Init'd AndroidJavaClass with null ptr!
  4. 解决/usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.15' not found错误的解决
  5. jq设置html的css属性,jQuery css() 方法
  6. DMTF云计算开放管理标准内容
  7. 使用ipop共享串口提高工作效率
  8. vb access mysql数据库教程_VB操作access数据库
  9. 介绍几款iPhone手机原型设计的工具
  10. 基于PHP+小程序(MINA框架)+Mysql数据库的汽车维修保养小程序系统设计与实现
  11. springboot中学成绩管理毕业设计源码100854
  12. [BZOJ 5339] 教科书般的亵渎
  13. arcgis runtime for android 100.13.0 入门系列,三、加载shp,kml,tpk文件,图层定位,toolkit工具
  14. 分布式事务之柔性事务
  15. flutter取消动态字体大小
  16. Java--网上银行登录及存取款业务模拟系统
  17. lol无限火力服务器瘫痪,LOL无限火力:玩家找到秒进“BUG”,现在还未修复赶紧去...
  18. oracle 表信息查询,oracle 表信息查询
  19. 2022-2028中国干墙砂光机市场现状研究分析与发展前景预测报告
  20. XRP突破在即?瑞波公司投资5亿美元只为增加XRP用例

热门文章

  1. 基于 Flink 的超大规模在线实时反欺诈系统的建设与实践
  2. 彻底搞清楚map和flatmap
  3. 当分区数量与reducer task数量不一致时,会怎么样。
  4. leetcode 978. Longest Turbulent Subarray | 978. 最长湍流子数组(Java)
  5. leetcode 557. 反转字符串中的单词 III(Java版)
  6. 【数据结构】B树的理解
  7. 牛客网_PAT乙级_1026跟奥巴马一起编程(15)
  8. 密码学系列之:memory-bound函数
  9. Windows 上配置Docker Desktop 的k8s
  10. zoj 3209 Dancing links/hust 1017