全量备份
#!/bin/bash
date_bak=$(date +%H%M%S)
file_date=$(date +%y%m%d)
mysqldump=/usr/local/mysql/bin/mysqldump
mulu=/backup/sqlbackup/all/$file_date
if [ ! -d $mulu ];then
mkdir -p $mulu
fi
$mysqldump -uroot -p123456 --quick --events --all-databases --flush-logs --delete-master-logs --single-transaction > ${mulu}/all${dat
e_bak}.sqlsleep 5
参数:
--quick,-q
该选项在导出大表时很有用,它强制 MySQLdump 从服务器查询取得记录直接输出而不是取得所有记录后将它们缓存到内存中。
--events, -E
导出事件
--all-databases , -A
导出全部数据库。
--flush-logs
开始导出之前刷新日志,这一项必须带上。
请注意:假如一次导出多个数据库(使用选项—databases或者—all-databases),将会逐个数据库刷新日志。除使用—lock-all-tables或者—master-data外。在这种情况下,日志将会被刷新一次,相应的所以表同时被锁定。因此,如果打算同时导出和刷新日志应该使用—lock-all-tables 或者—master-data 和—flush-logs。
--delete-master-logs
master备份后删除日志. 这个参数将自动激活—master-data。
增量备份的脚本。
#!/bin/bash
export LANG=en_US.UTF-8
BakDir=/backup/sqlbackup/add
LogFile=$BakDir/binlog.log
BinDir=/usr/local/mysql/data
BinFile=/usr/local/mysql/data/mysql-bin.index
mysqladmin=/usr/local/mysql/bin/mysqladmin
$mysqladmin flush-logs
#这个是用于产生新的mysql-bin.00000*文件
Counter=`wc -l $BinFile |awk '{print $1}'`
NextNum=0
#这个for循环用于比对$Counter,$NextNum这两个值来确定文件是不是存在或最新的。
for file in `cat $BinFile`
do
base=`basename $file`
#basename用于截取mysql-bin.00000*文件名,去掉./mysql-bin.000005前面的./
NextNum=`expr $NextNum + 1`
if [ $NextNum -eq $Counter ]
then
echo $base skip! >> $LogFile
else
dest=$BakDir/$base
if test -e $dest
#test -e用于检测目标文件是否存在,存在就写exist!到$LogFile去。
then
echo $base exist! >> $LogFile
else
cp $BinDir/$base $BakDir
echo $base copying >> $LogFile
fi
fi
done
echo `date +"%Y年%m月%d日 %H:%M:%S"` Bakup succ! >> $LogFile
sleep 5
注:有借鉴http://www.eryajf.net/1497.html