mysql备份
mysql备份分为普通备份和增量备份,本篇主要介绍普通备份和增量备份的方法.(linux下)
普通备份:
单个数据库备份: mysqldump -uroot -p密码 数据库名 > /tmp/bak.sql (注意 : 不要进入mysql数据库)
所有数据库备份: mysqldump -uroot -p密码 --all-databases --events > /tmp/bak.sql (注意 : 不要进入mysql数据库)
增量备份:
增量备份主要通过二进制日志文件进行增量备份。mysql数据库会以二进制形式自动把用户对mysql数据库的操作记录到文件,当用户希望恢复的时候可以使用备份文件进行恢复。
修改配置文件: vim /etc/my.cnf---->log-bin=mysql-log
存储数据结构的文件目录:/usr/local/mysql/data
增量备份文件:/usr/local/mysql/data/mysql-bin.000001
恢复数据可以通过两种方式:
1.通过时间:mysqlbinlog --start-datetime="2018-07-19 17:17:23" --stop-datetime="2018-07-19 17:18:50" /usr/local/mysql/data/mysql-bin.000001 | mysql -uroot -p123456
2.通过位置:mysqlbinlog --start-position=250 --stop-position=520 /usr/local/mysql/data/mysql-bin.000001 | mysql -uroot -p123456
通过linux下的计划任务可以方便地进行备份.以下为备份步骤:
1.手动创建文件夹
/home/mysql
/home/mysql/backup
/home/mysql/backup/daily
2.在backup目录中创建两个脚本文件.一个为全量备份的文件,一个为增量备份的文件
touch quan.sh
touch zeng.sh
编辑全量备份文件写入下面的代码:
#!/bin/bash # Program # use mysqldump to Fully backup mysql data per week! # History # Path BakDir=/home/mysql/backup LogFile=/home/mysql/backup/bak.log Date=`date +%Y%m%d` Begin=`date +"%Y年%m月%d日 %H:%M:%S"` cd $BakDir DumpFile=$Date.sql GZDumpFile=$Date.sql.tgz /usr/local/mysql/bin/mysqldump -uroot -p123456 --quick --events --all-databases --flush-logs --delete-master-logs --single-transaction > $DumpFile /bin/tar -zvcf $GZDumpFile $DumpFile /bin/rm $DumpFile Last=`date +"%Y年%m月%d日 %H:%M:%S"` echo 开始:$Begin 结束:$Last $GZDumpFile succ >> $LogFile cd $BakDir/daily /bin/rm -f *
编辑增量备份文件写入下面的代码:
#!/bin/bash # Program # use cp to backup mysql data everyday! # History # Path BakDir=/home/mysql/backup/daily BinDir=/usr/local/mysql/data LogFile=/home/mysql/backup/bak.log BinFile=/usr/local/mysql/data/mysql-bin.index /usr/local/mysql/bin/mysqladmin -uroot -p123456 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"` $Next Bakup succ! >> $LogFile
(注:代码中的文件目录和之前创建的目录有关系,用户名密码也需要修改)
启动计划任务
crontab -e 0 3 * * 0 /bin/bash -x ~/mysql/quan.sh > /dev/null 2> &1 crontab -e 0 3 * * 1-6 /bin/bash -x ~/mysql/zeng.sh > /dev/null 2> &1
启动后要重启计划任务:
/etc/init.d/crond restart 或 service crond restart
浙公网安备 33010602011771号