mysql备份,mysql日增量备份

#!/bin/bash
################environment start#############
timenow=$(date +"%Y-%m-%d-%H-%M")
backdirs=/backup/mysql
bindir=/var/lib/mysql
binindex=gogo-bin.index
logdir=/backup/src/log
logname=mysqlbackup.log
deltime=$(date "-d 8 day ago" +"%y%m%d" )
tmpa=/backup/src/tmp/databaseline.dat
tmpb=/backup/src/tmp/database.name
tmpdel=/backup/src/tmp/del.txt
name=root
passwd=
################environment end###############
################function start################
function checkenvdir()
{
if [ -d /backup ];then
if [ -d /backup/mysql ];then
echo 1
else
mkdir /backup/mysql
fi
if [ -d /backup/src ];then
if [ -d /backup/src/tmp ];then
echo 2
else mkdir /backup/src/tmp
fi
if [ -d /backup/src/log ];then
echo 3
else mkdir /backup/src/log
fi
else
mkdir /backup/src
mkdir /backup/src/tmp
mkdir /backup/src/log
fi
else
mkdir /backup
mkdir /backup/mysql
mkdir /backup/src
mkdir /backup/src/tmp
mkdir /backup/src/log
fi
}
function createnew()
{
$mysqllogin -e "purge master logs before ${deltime}" || echo $(date +"%Y-%m-%d-%H-%M") clear binlog flail>>$logdir/$logname
binfiles=`cat $bindir/$binindex |awk -F "/" '{print $2}'`
for j in $binfiles
do
binname=$bindir/$j
done
echo $(date +"%Y-%m-%d-%H-%M") this binlog is $binname >>$logdir/$logname
$mysqladminlogin flush-logs && nextbinfiles=`cat $bindir/$binindex |awk -F "/" '{print $2}'`
for k in $nextbinfiles
do
nextbinname=$bindir/$k
done
if [ $binname = $nextbinname ];then
echo $(date +"%Y-%m-%d-%H-%M") create new bin-log failed>>$logdir/$logname
else
echo $(date +"%Y-%m-%d-%H-%M") create new bin-log success>>$logdir/$logname
fi
echo $(date +"%Y-%m-%d-%H-%M") next binlog is $nextbinname>>$logdir/$logname
}
function checkpasswd()
{
if [ -z $passwd ];then
mysqllogin="mysql -u$name "
mysqladminlogin="mysqladmin -u$name "
mysqlshowlogin="mysqlshow -u$name "
mysqldumplogin="mysqldump -u$name "
else
mysqllogin="mysql -u$name -p$passwd "
mysqladminlogin="mysqladmin -u$name -p$passwd "
mysqlshowlogin="mysqlshow -u$name -p$passwd "
mysqldumplogin="mysqldump -u$name -p$passwd "
fi
}
function clearfile()
{
find $backdirs -mtime +15 >$tmpdel
tdfiles=`cat $tmpdel`
for x in $tdfiles
do
if [ $x = /backup/mysql ];then
echo nothing
else
tdfile=$x
rm -rf $tdfile
fi
done
}
################function end##################
################pro end#######################
checkenvdir
clearfile
checkpasswd
createnew
if [ $(date +"%u") = 3 ];then
backdir=$backdirs/${timenow}all
mkdir $backdir
lines=`$mysqlshowlogin | wc -l |cut -d " " -f1`
$mysqlshowlogin >$tmpa
sed -n -e 4,$[lines-1]p $tmpa|cut -d "|" -f2 >$tmpb
databasesfile=`cat $tmpb`
for i in $databasesfile
do
filename=$i
$mysqldumplogin --single-transaction --master-data=2 --databases $filename > $backdir/$filename${timenow}.sql || echo $(date +"%Y-%m-%d-%H-%M") backup $filename flail>>$logdir/$logname
done
cp $binname $backdir/${timenow} || echo $(date +"%Y-%m-%d-%H-%M") local backup flail>>$logdir/$logname
else
backdir=$backdirs/${timenow}
mkdir $backdir
cp $binname $backdir/${timenow} || echo $(date +"%Y-%m-%d-%H-%M") local backup flail>>$logdir/$logname
fi
################pro end#######################
主要思想:
以全备份一次+备份全备份后的日志记录 实现数据增量备份
每天刷新一次数据库日志 实现数据日增量备份
脚本文件路径/backup/src/mysql.sh
##############################################
#主要设置日志文件路径与数据库的账号和密码 ####
################environment start#############
timenow=$(date +"%Y-%m-%d-%H-%M")
#备份数据的目录
backdirs=/backup/mysql
#日志文件的路径
bindir=/var/lib/mysql
#日志文件的文件名
binindex=mysqld-relay-bin.index
#shell的运行记录(主要记录本次执行的)
logdir=/backup/src/log
logname=mysqlbackup.log
#临时文件 每次运行会被重写
tmpa=/backup/src/tmp/databaseline.dat
tmpb=/backup/src/tmp/database.name
tmpdel=/backup/src/tmp/del.txt
#数据库的账号与密码
name=root
passwd=
################environment end###############
2.文件备份目录
/backup
|---mysql
|---以日期为名字的文件夹(全备份的文件名有all标记)
3.文件恢复【恢复是一定要按照时间顺序】
顺序:
方法:
1.先备份现状
(用mysqldump -uroot --single-transaction --master-data=2 --databases 数据库名 > /tmp/backup.sql)
2.删除数据库 drop database 数据库名;
3.恢复全备份是的状态 mysql -uroot < /backup/mysql/2010-02-02-02-02/name.sql (这里用绝对路径)
4.使用mysqlbinlog导出对应的数据库日志文件
导出整天mysqlbinlog -d 数据库名 日志路径 >/tmp/jjjjj.sql
导出部分时间的
mysqlbinlog --start-date="2010-04-20 9:55:00" --stop-date="2010-04-20 10:05:00" -d 数据库名 日志路径 > /tmp/mysql_restore.sql
5.将导出的sql文件导入数据库
mysql -uroot < /tmp/jjjjj.sql
mysql -uroot < /tmp/mysql_restore.sql
###
导出日志对应的数据库的某段时间记录语句
mysqlbinlog --start-date="2010-04-20 9:55:00" --stop-date="2010-04-20 10:05:00" -d 数据库名 /var/log/mysql/bin.123456 > /tmp/mysql_restore.sql
导出该日志对应的数据库的前段时间记录语句
mysqlbinlog --stop-date="2010-04-20 10:05:00" -d 数据库名 日志文件 > /tmp/mysql_restore.sql
导出对应的数据库的记录语句
mysqlbinlog -d 数据库名 日志文件 > /tmp/mysql_restore.sql
###
Tags: 

延伸阅读

最新评论

发表评论