mysql数据灾难恢复方案
物理备份:指对数据库操作系统的物理文件(数据文件、日志文件)等的备份;
冷备份:必须在数据库关闭的状态下进行备份,能够更好的保证数据库的完整性;
热备份:能够在数据库处于正常运行的情况下备份,能够更高的保证服务的可用性;
逻辑备份:指对数据库的逻辑组件(数据库、表、数据对象)进行备份;
完全备份:将数据进行完整的备份,包含完整的库、表、索引、视图等,需要花费更长的时间
差异备份:备份自上次完全备份到现在发生改变的数据库内容,备份的文件比完整备份的文件小,备份的速度更快;
增量备份:备份至上次完全备份或增量备份后被修改的数据库内容
查看某个二进制日志文件的变化
show binlog events in "mysql_binlog.000002";
故障恢复
全量数据恢复
source /home/mysql/xxx.sql
增量数据部分恢复
mysqlbinlog --start-position=1 --stop-position=795 /home/mysql/mysql_binlog.000002 |mysql -uroot -p密码
增量数据全部恢复
mysqlbinlog /home/mysql/mysql_binlog.000001 |mysql -uroot -p密码
查看二进制的内容
mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql_binlog.000002
新增用户赋予权限用来用备份(这部可以忽略)
脚本代码 增量保留,并且删除一个月之前的binlog文件
backupDir=/home/mysql/binlog
BinDir=/var/lib/mysql
LogFile=/home/mysql/log/binlog.log
BinFile=/var/lib/mysql/mysql_binlog.index
mysqladmin -uroot -p123456 flush-logs
#读取mysql_binlog.index 文件
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=$backupDir/$base
if(test -e $dest)
#test -e用于检测目标文件是否存在,存在就写exist!到$LogFile去。
then
echo $base exist! >> $LogFile
else
mv $BinDir/$base $backupDir
echo $base copying >> $LogFile
fi
fi
done
echo `date +"%Y年%m月%d日 %H:%M:%S"` Backup success! >> $LogFile
echo "delet a mothon ago log data";
#1个月清空一次log文件
find /home/mysql/binlog/ -mtime +30 -name "*.log*" -exec rm -rf {} \;
echo "delete success";
脚本代码 全量保存 一个月删除一次
#需要备份的数据库
dbNames=(db1 db2 db3 db4)
Date=$(date --date="now" +%Y%m%d)
ODate=$(date --date="-1 month" +%Y%m%d)
newDir=/home/mysql/data/$Date
#需要删除的目录
oldDir=/home/mysql/data/$ODate
#数据库密码
password=123456
#删除过期备份数据
if [ -d $oldDir ]
then
echo "当前的路径为"$oldDir
#rm -rf $oldDir
fi
#创建新备份文件加,如果创建不会重新创建
if [ ! -d $newDir ]
then
mkdir $newDir
fi
#对需要备份的数据库进行备份
for dbname in ${dbNames[*]}
do
dumpFile=$dbname-$Date.sql.gz
mysqldump -uroot -p$password $dbname | gzip > $newDir/$dumpFile
done
echo "succ";
生成环境数据备份策略
在数据库压力小的时段继续全量备份,根据自已公司的业务情况,设置某个时间端进行全量备份
数据更新频繁且比较重要,可以选择增量备份,记住定期删除日志文件
我采取的备份方案:
编辑任务 contab -e
重启crontab加载配置 service crond reload 就能开启定时任务备份
至此mysql如何进行备份实战就至此结束了,觉得我的文章有用的就分享给身边的小伙伴。