用Mysqldump实现全库备份+binlog的数据还原

首先是为mysql做指定库文件的全库备份

vim mysqlbak.sh

#!/bin/bash

#定义数据库目录,要能找到mysqldump

mysqlDir=/usr

#定义用于备份数据库的用户名和密码

user=root

userpwd=123456

dbname=db1

#定义备份目录

databackupdir=/mysqlbak

#定义邮件正文文件

emailfile=$databackupdir/email.txt

#定义邮件地址

email=www@163.com

#定义备份日志文件

logfile=$databackupdir/mysqlbackup.log

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

DATE=`date -I`

echo "" > $emailfile

echo $( date +"%Y-%m-%d %H:%M:%S" ) >> $emailfile

cd $databackupdir

#定义备份文件名

dumpfile=mysql_$DATE.sql

gzdumpfile=mysql_$DATE.sql.tar.gz

#使用mysqldump备份数据库,--flush-logs 产生一个新日志

$mysqlDir/bin/mysqldump -u$user -p$userpwd --flush-logs -x $dbname > $dumpfile

#压缩备份文件

if [ "$?" == 0 ];then

#把备份出来的文件进行压缩,压缩的结果保存在邮件内容中

tar zcvf $gzdumpfile $dumpfile >> $emailfile 2>&1

echo "BackupFileName: $gzdumpfile" >> $emailfile

echo "DataBase Backup Success!" >> $emailfile

#删除压缩前的sql文件

rm -rf $dumpfile

else

echo "Database Backup Fail!" >> $emailfile

fi

#写日志文件

echo "-------------------------------------------------" >> $logfile

cat $emailfile >> $logfile

#发送邮件通知

cat $emailfile| mail -s "Mysql Backup" $email

以上脚本执行后会在备份目录中产生一个tar.gz的文件,此文件为全库备份文件,备份成功后给指定的邮箱地址发送邮件,收件内容为截图内容为备份成功!

接下来是binlog日志的备份脚本

vim binlogbak.sh

#!/bin/bash

#定义数据库目录和数据目录

mysqldir=/usr/local/mysql

datadir=$mysqldir/binlog

#定义用于备份数据库的用户名和密码

user=root

userpwd=123456

#定义备份目录

databackupdir=/mysqlbak

logbackupdir=$databackupdir/logs

#定义邮件正文文件

emailfile=$databackupdir/email.txt

#定义邮件地址

email=www@163.com

#定义备份日志文件

logfile=$databackupdir/mysqlbackup.log

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

echo "" > $emailfile

echo $( date +"%Y-%m-%d %H:%M:%S" ) >> $emailfile

#刷新日志,使数据库使用新的二进制日志文件

/usr/bin/mysqladmin -u$user -p$userpwd flush-logs

cd $datadir

#得到二进制日志列表

filelist=`cat mysql_binlog.index`

icounter=0

for file in $filelist

do

#需要注意的是符号和两个操作项之间的空格毕不可少,下面也是一样

icounter=`expr $icounter + 1`

done

nextnum=0

ifile=0

for file in $filelist

do

binlogname=$file

nextnum=`expr $nextnum + 1`

#跳过最后一个二进制日志 (数据库当前使用的二进制日志文件)

if [ $nextnum -eq $icounter ];then

echo "Skip lastest!" > /dev/null

else

dest=$logbackupdir/$binlogname

#跳过已经备份的二进制日志文件

if [ -e $dest ];then

echo "Skip exist $binlogname!" > /dev/null

else

#备份日志文件到备份目录

cp $binlogname $logbackupdir

if [ "$?" == 0 ];then

ifile=`expr $ifile + 1`

echo "$binlogname Backup Success!" >> $emailfile

fi

fi

fi

done

if [ $ifile -eq 0 ];then

echo "No Binlog Backup!" >> $emailfile

else

echo "Backup $ifile File(s)." >> $emailfile

echo "Backup MySQL Binlog OK!" >> $emailfile

fi

#写日志文件

echo "-------------------------------------------------" >> $logfile

cat $emailfile >> $logfile

#发送邮件通知

cat $emailfile| mail -s "Mysql Backup" $email

以上脚本执行后会在备份目录中产生多个没备份过的binlog日志,文件每日是前一天的增量备份文件,备份成功后给指定的邮箱地址发送邮件,收件内容为截图内容为备份成功!

编写计划任务自动执行,每周1,3,24点全库备份,每天夜里1点日志备份

crontab -e

0 00 * * 1,3 /mysqlbak.sh

0 1 * * * /binlogbak.sh

脚本备份MySQL数据库和binlog日志的更多相关文章

  1. (转)Mysql数据库之Binlog日志使用总结

    使用mysqlbinlog提取二进制日志 原文:http://blog.csdn.net/leshami/article/details/41962243 MySQL binlog日志记录了MySQL ...

  2. Mysql数据库之Binlog日志使用总结

    binlog二进制日志对于mysql数据库的重要性有多大,在此就不多说了.下面根据本人的日常操作经历,并结合网上参考资料,对binlog日志使用做一梳理: 一.binlog日志介绍1)什么是binlo ...

  3. linux shell脚本备份mysql数据库

    #!/bin/sh # 备份数据库 # Mysql 用户名密码 MYSQL_USER=root MYSQL_PASS=root BACKUP_DIR=/data/backup/mysql DATA_D ...

  4. python 脚本备份 mysql 数据库到 OSS

    脚本如下: #!/usr/bin/python ########################################################### ################ ...

  5. (转)Mysql数据库之Binlog日志使用总结CentOS 7.x设置自定义开机启动,添加自定义系统服务

    Centos 系统服务脚本目录: /usr/lib/systemd/ 有系统(system)和用户(user)之分, 如需要开机没有登陆情况下就能运行的程序,存在系统服务(system)里,即: li ...

  6. (转)Mysql数据库之Binlog日志使用总结Linux下用户组、文件权限详解

    Linux下用户组.文件权限详解 原文:http://blog.csdn.net/sdulibh/article/details/51566772 用户组 在linux中的每个用户必须属于一个组,不能 ...

  7. Windows系统定时备份MySQL数据库

    当一个网站投入使用时,定期备份数据库是必要的事.那么,在Windows系统上,我们该如何做呢? 如下语句可以实现备份及还原MySQL数据库: 备份MySQL数据库 mysqldump -uroot - ...

  8. 定时备份mysql数据库的shell脚本

    最近项目需要定时备份mysql数据库的数据,根据需求写了一份定时备份mysql数据库的脚本. -h mysql的地址  默认为localhost -P 端口号  默认为3306 -u 用户  默认为r ...

  9. Linux自动备份MySQL数据库脚本代码

    下面这段Linux的Shell脚本用于每日自动备份MySQL数据库,可通过Linux的crontab每天定时执行 在脚本中可设置需要备份的数据库表清单,并且会将备份文件通过gzip压缩.需要注意的是, ...

随机推荐

  1. python测试开发django-67.templates模板变量取值

    前言 django 的模板里面变量取值是通过句点语法来取值,就是一个点(.)符号.取值的对象也可以是字符串,int类型,list列表,字典键值对,也可以是一个类的实例对象. views视图 比如我在 ...

  2. centos设置开机自启动脚本

    1.新建脚本文件 我这里是为了设置开机自动设置ipv6隧道,所以命名为ipv6tunnel.sh ifconfig sit0 up ifconfig sit0 inet6 tunnel ::66.22 ...

  3. Alibaba Java Coding Guidelines,以后我的Java代码规范,就靠它了

    前言 对于Java代码规范,业界有统一的标准,不少公司对此都有一定的要求.但是即便如此,庞大的Java使用者由于经验很水平的限制,未必有规范编码的意识,而且即便经验丰富的老Java程序员也无法做到时刻 ...

  4. 推荐系统(recommender systems):均值归一化(mean normalization)

    均值归一化可以让算法运行得更好. 现在考虑这样一个情况:一个用户对所有的电影都没有评分,即上图所示 的Eve用户.现在我们要学习特征向量(假设n=2) 以及用户5的向量θ(5),因为用户Eve没有对任 ...

  5. Helm 安装部署Kubernetes的dashboard

    Kubernetes Dashboard 是 k8s集群的一个 WEB UI管理工具,代码托管在 github 上,地址:https://github.com/kubernetes/dashboard ...

  6. day002-Linux基础之常用基本命令讲解

    Linux系统一切皆命令 命令1:pwd 显示当前所在目录命令2:cd(change directory) 切换目录 cd / 回到根目录 cd .. 返回上一级命令3:ls 查看当前目录下的文件 l ...

  7. HttpClient学习研究---第二章:连接管理

    第二章.Connection management连接管理2.1. 2.1.Connection persistence连接持久性The process of establishing a conne ...

  8. The Architectural Principles Behind Vrbo’s GraphQL Implementation

    转自:https://medium.com/expedia-group-tech/graphql-component-architecture-principles-homeaway-ede8a58d ...

  9. artillery强大灵活的负载测试套件

    artillery是基于nodejs 编写的负载测试套件支持http&&socket.io&&websockets&&kinesis&& ...

  10. 【CF765F】Souvenirs

    [CF765F]Souvenirs 题面 洛谷 题解 我们可以发现,对于某个右端点\(i\),左端点\(j\)在由\(i\rightarrow 1\)的过程中,每一段的答案是单调不增的,由这个性质,我 ...