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/binlogBinDir=/var/lib/mysqlLogFile=/home/mysql/log/binlog.logBinFile=/var/lib/mysql/mysql_binlog.indexmysqladmin -uroot -p123456 flush-logs#读取mysql_binlog.index 文件Counter=`wc -l $BinFile |awk '{print $1}'`NextNum=0#这个for循环用于比对$Counter,$NextNum这两个值来确定文件是不是存在或最新的。for file in `cat $BinFile`dobase=`basename $file`#basename用于截取mysql-bin.00000*文件名,去掉./mysql-bin.000005前面的./NextNum=`expr $NextNum + 1`if [ $NextNum -eq $Counter ]thenecho $base skip! >> $LogFileelsedest=$backupDir/$baseif(test -e $dest)#test -e用于检测目标文件是否存在,存在就写exist!到$LogFile去。thenecho $base exist! >> $LogFileelsemv $BinDir/$base $backupDirecho $base copying >> $LogFilefifidoneecho `date +"%Y年%m月%d日 %H:%M:%S"` Backup success! >> $LogFileecho "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 ]thenecho "当前的路径为"$oldDir#rm -rf $oldDirfi#创建新备份文件加,如果创建不会重新创建if [ ! -d $newDir ]thenmkdir $newDirfi#对需要备份的数据库进行备份for dbname in ${dbNames[*]}dodumpFile=$dbname-$Date.sql.gzmysqldump -uroot -p$password $dbname | gzip > $newDir/$dumpFiledoneecho "succ";
生成环境数据备份策略
在数据库压力小的时段继续全量备份,根据自已公司的业务情况,设置某个时间端进行全量备份
数据更新频繁且比较重要,可以选择增量备份,记住定期删除日志文件
我采取的备份方案:
编辑任务 contab -e
重启crontab加载配置 service crond reload 就能开启定时任务备份
至此mysql如何进行备份实战就至此结束了,觉得我的文章有用的就分享给身边的小伙伴。
