首先在这里我要感谢我的同事 @mamiya_c3 哥的指教。。。QQQ

最近数据库的数据猛然增多,以前的每天一个正备份的方式显然压力越来越大,对备份的数据传输考验也随之加大,所以考虑改成每周二服务器维护的时候坐全备份,剩下每天做增量备份。

工作原理就是把每次完整备份的binlog 和postion取出,做增量备份的时候取当时的binlog和postion,使用mysqlbinlog 把这之间的数据读出到另一个文件。

注:本文中可能有个别地方会有些纰漏,请大家自行调试,因为下面的脚本是我用在真实环境中copy过来的,只是临时改了里面个别的参数,例如文件夹位置,密码等。。。。如有问题敬请谅解

一、完整备份

vi full_mysqldump.sh

#!/bin/sh

###########

#########

#########DIR_INFO############

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

BACK_DIR="/home/profiles/liuhaifeng/fullbackup"

FILE_DIR="/home/profiles/liuhaifeng"

#############################3MYSQL_BACK#########################

if [ ! -d $BACK_DIR$date ];then

mkdir -p $BACK_DIR$date

fi

/usr/local/mysql/bin/mysql -uroot -p'123456' -h 127.0.0.1 -P 3306 -e "FLUSH TABLES WITH READ LOCK"

/usr/local/mysql/bin/mysqldump -uroot -p'123456' -h 127.0.0.1 -P 3306 --default-character-set=gbk --opt --triggers -R --hex-blob --flush-logs --master-data=2 --all-databases > $BACK_DIR$date/fullbackup.sql

/usr/local/mysql/bin/mysql -u root -p'123456' -h 127.0.0.1 -P 3306 -e "UNLOCK TABLES"

##########################

################get postion###############

sed -n "22p" a.sql | awk -F'=|,|;' '{print $2,$4}' > $FILE_DIR/postion

################# FTP TO 16.1 ###############

################# FTP    INFO ###############

HOST="192.168.16.1"

USER="user"

PASSWD="password"

FTP_DIR="database"

ftp_db()

{

ftp -n << ! >/dev/null 2>&1 &

open $HOST

user $USER $PASSWD

binary

prompt

cd $FTP_DIR

put $1

bye

!

echo "sql backup suecss!!"

}

##############################################

#####################TRANSFER INFL#############

cd $BACK_DIR$date

if [ ! -f fullbackup.sql ]; then

echo "mysqldump back file faild !!! please check"

exit 1

fi

/bin/tar zcf fullbackup_$date.tar.gz fullbackup.sql

sleep 5

ftp_db fullbackup_$date.tar.gz

二、做增量备份,根据上面完整备份所获得的postion以及binlog 与服务器当前的postion和binlog做增量备份,备份后把当前的postion以及binlog 存到postion文件中,留坐下一次增量备份的其实点。

vi  zl_backup.sh

#!/bin/sh

#####for zengliang backup########

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

OLDDATE=`date --date='10 days ago' +%Y%m%d`

BACK_DIR="/data/mysql2/"

FILE_DIR="/home/profiles/liuhaifeng"

startbinlog=`awk '{print $1}' $FILE_DIR/postion`

startpostion=`awk '{print $2}' $FILE_DIR/postion`

cd $FILE_DIR

mysql -uroot -p123456 -S /tmp/mysql.sock3306 -h 192.168.16.3 -e "show master status\G;"|awk '{print $2}' > nowpostion

stopbinlog=`sed -n '3p' $FILE_DIR/nowpostion`

stoppostion=`sed -n '4p' $FILE_DIR/nowpostion`

if [ "$startbinlog" == "$stopbinlog" ]; then

mysqlbinlog --start-position=$startpostion --stop-position=$stoppostion $BACK_DIR$startbinlog >> ch_zlback_$DATE.sql

else

startline=`awk "/$startbinlog/{print NR}" $BACK_DIR/mysql-bin-bj1.index`

stopline=`wc -l $BACK_DIR/mysql-bin-bj1.index |awk '{print $1}'`

for i in `seq $startline $stopline`

do

binlog=`sed -n "$i"p  $BACK_DIR/mysql-bin-bj1.index |sed 's/.\///g'`

case "$binlog" in

"$startbinlog")

mysqlbinlog --start-position=$startpostion $BACK_DIR$binlog >> ch_zlback_$DATE.sql

;;

"$stopbinlog")

mysqlbinlog --stop-position=$stoppostion $BACK_DIR$binlog >> ch_zlback_$DATE.sql

;;

*)

mysqlbinlog $BACK_DIR$binlog >> ch_zlback_$DATE.sql

esac

done

fi

####for ftp######

HOST="192.168.16.1"

USER="user"

PASSWD="password"

FTP_DIR="database"

ftp_db()

{

ftp -n << ! >/dev/null 2>&1 &

open $HOST

user $USER $PASSWD

binary

prompt

cd $FTP_DIR

put $1

bye

!

echo "sql backup suecss!!"

}

if [ -f ch_zlback_$DATE.sql ];then

tar czf ch_zlback_$DATE.tar.gz ch_zlback_$DATE.sql

sleep 3

ftp_db ch_zlback_$DATE.tar.gz

echo "$stopbinlog $stoppostion" > $FILE_DIR/postion

rm -rf ch_zlback_$OLDDATE.sql ch_zlback_$OLDDATE.tar.gz

else

echo "$DATE backup fail!!!!"

fi

三、做好计划任务

把增量备份脚本 和 完全备份脚本按照想要的时间写在计划任务中,做定时的增量备份。

当然还原的时候需要按照顺序依次还原。

mysql 如何做增量备份_mysql 做增量备份相关推荐

  1. mysql定时增量备份_Mysql日常自动备份和增量备份脚本

    序 你是否在寻找一个MySQL备份脚本? 适合对象 本文是在Linux下,mysql 4.1.14版本下测试的,经过适当修改可能适合mysql 4.0,5.0及其其他版本. 本文适合于没有启动复制功能 ...

  2. mysql数据库增量复制_mysql数据库增量备份

    增量备份 增量备份是由一个二进制日志mysqlbinlog实现的,该日志有一旦开启后,用户的每条语句除了select,都会被记录在该日志当中,. 一.开启该日志: #vim /etc/my.cnf m ...

  3. 升级mysql服务器二进制备份_MySQL二进制日志备份和恢复详解

    基本概念 定义: 二进制日志包含了所有更新了数据或者已经潜在更新了数据(例如,没有匹配任何行的一个DELETE)的所有语句. 作用: 1.二进制日志的主要目的是在恢复使能够最大可能地更新数据库,因为二 ...

  4. 拷贝 var lib mysql 备份_mysql复制与备份

    备份策略: 完全+差异+binlog 完全+增量+binlog binlog最好能实时备份到另一个节点上. 完全备份,多久一次? 数据变化量:有20%,建议使用完全备份. 可用的备份存储空间: 数据变 ...

  5. mysql 大表 备份_MySQL大表备份的简单方法

    MySQL大表备份是一个我们常见的问题,下面就为您介绍一个MySQL大表备份的简单方法,希望对您学习MySQL大表备份方面能有所帮助. 这里所说的大表是超过4G以上的表,我目前见到过最大为60多G的单 ...

  6. mysql冷区域热区域_mysql的数据备份方式,及热备与冷备的优缺点对比

    一.按照数据库的运行状态分类: (1)热备:在数据库运行时,直接进行备份,对运行的数据库没有影响 (2)冷备:在数据库停止运行的时候进行备份,这种备份方式最为简单,只需要拷贝数据库物理文件即可. (3 ...

  7. mysql 实时备份_MySQL实现实时备份[转]

    本文转自:http://www.cnblogs.com/vforbox/p/4860422.html 环境介绍 1.两台服务器进行主从同步复制(安装可以通过google查询相关资料或者看笔者的这篇免安 ...

  8. 远程工具连接mysql备份_MySQL远程连接 备份还原

    连接远程数据库 mysql -h 数据库地址 -P 端口号 -u 用户名 -p mysql -h 127.0.0.1 -P 3307 -uroot -p 备份数据库, 热备份 mysqldump -h ...

  9. mysql数据库相互备份_MySQL的本地备份和双机相互备份脚本

    先修改脚本进行必要的配置,然后以root用户执行. 1. 第一执行远程备份时先用 first参数. 2. 本地备份用local参数 3. 远程备份不用参数 注意:需要在另一主机上的Mysql用户用添加 ...

最新文章

  1. 【linux】嵌入式中 crontab的使用
  2. matlab中rsa,matlab - Matlab中的RSA代码 - 堆栈内存溢出
  3. nginx访问502 gateway,*1 connect() failed (111: Connection refused) while connecting to upstream
  4. 【名额有限】云开发AI拓展能力等你来体验!
  5. javascript基础与编写习惯
  6. TCP 慢启动 拥塞控制
  7. 更改TFS项目中的SharePoint网站端口
  8. gmt绘制江苏省高程异常图
  9. linux下运行springboot项目jar包
  10. linux ext4 inode,Ext4文件系统中inode数量的限制
  11. 结构体中的LNode与*LinkList
  12. 把照片改成指定像素基于PS(证件照修改为制定像素大小)
  13. MAVEN工具篇——maven打包跳过测试
  14. FutureTask.get(timeOut)执行原理浅析
  15. 代码审查工具FxCop建议采用的规则总结
  16. CentOS 7 忘记root密码重置密码
  17. [渝粤教育] 中国矿业大学 中国传统手工艺与文化创意设计 参考 资料
  18. 如何确定一笔用户的BTC转入记录
  19. excel表的下载模板
  20. easyuefi只能在基于uefi启动的_只需2个命令,就能将win10 BIOS启动方式转换为UEFI,你见过吗!...

热门文章

  1. 学习python第十一节课:函数(三)
  2. 存word到oracle,Word、Excel、PDF存入oracle 数据库
  3. 七扭八歪解faster rcnn(keras版)(一)
  4. Win10开发环境搭建笔记(过审阉割版)
  5. 在ANTMINER(阉割版BeagleBone Black)运行Debain
  6. ubuntu如何安装壁纸软件Hydra Paper
  7. Sam-ba烧录工具的使用教程
  8. vscode 配置php环境
  9. mmdet3D安装配置指南
  10. 复试中英语口语听力该怎么准备?这些使用方法技巧快收好!