转自:海风的linux之路
最近数据库的数据猛然增多,以前的每天一个正备份的方式显然压力越来越大,对备份的数据传输考验也随之加大,所以考虑改成每周二服务器维护的时候坐全备份,剩下每天做增量备份。
工作原理就是把每次完整备份的binlog 和postion取出,做增量备份的时候取当时的binlog和postion,使用mysqlbinlog 把这之间的数据读出到另一个文件。
做增量备份,根据上面完整备份所获得的postion以及binlog 与服务器当前的postion和binlog做增量备份,备份后把当前的postion以及binlog 存到postion文件中,留坐下一次增量备份的其实点。
vi zl_backup.sh - #!/bin/sh
- #####for zengliang backup########
- DATE=`date +%Y%m%d`
- OLDDATE=`date --date='10 days ago' +%Y%m%d`
- BACK_DIR="/data/mysql2/"
- FILE_DIR="/home/profiles/liuhaifeng"
- startbinlog=`awk '{print $1}' $FILE_DIR/postion`
- startpostion=`awk '{print $2}' $FILE_DIR/postion`
- cd $FILE_DIR
- mysql -uroot -p123456 -S /tmp/mysql.sock3306 -h 192.168.16.3 -e "show master status\G;"|awk '{print $2}' > nowpostion
- stopbinlog=`sed -n '3p' $FILE_DIR/nowpostion`
- stoppostion=`sed -n '4p' $FILE_DIR/nowpostion`
- if [ "$startbinlog" == "$stopbinlog" ]; then
- mysqlbinlog --start-position=$startpostion --stop-position=$stoppostion $BACK_DIR$startbinlog >> ch_zlback_$DATE.sql
- else
- startline=`awk "/$startbinlog/{print NR}" $BACK_DIR/mysql-bin-bj1.index`
- stopline=`wc -l $BACK_DIR/mysql-bin-bj1.index |awk '{print $1}'`
- for i in `seq $startline $stopline`
- do
- binlog=`sed -n "$i"p $BACK_DIR/mysql-bin-bj1.index |sed 's/.\///g'`
- case "$binlog" in
- "$startbinlog")
- mysqlbinlog --start-position=$startpostion $BACK_DIR$binlog >> ch_zlback_$DATE.sql
- ;;
- "$stopbinlog")
- mysqlbinlog --stop-position=$stoppostion $BACK_DIR$binlog >> ch_zlback_$DATE.sql
- ;;
- *)
- mysqlbinlog $BACK_DIR$binlog >> ch_zlback_$DATE.sql
- esac
- done
- fi
复制代码
####for ftp######
- HOST="192.168.16.1"
- USER="user"
- PASSWD="password"
- FTP_DIR="database"
- ftp_db()
- {
- ftp -n << ! >/dev/null 2>&1 &
- open $HOST
- user $USER $PASSWD
- binary
- prompt
- cd $FTP_DIR
- put $1
- bye
- !
- echo "sql backup suecss!!"
- }
- if [ -f ch_zlback_$DATE.sql ];then
- tar czf ch_zlback_$DATE.tar.gz ch_zlback_$DATE.sql
- sleep 3
- ftp_db ch_zlback_$DATE.tar.gz
- echo "$stopbinlog $stoppostion" > $FILE_DIR/postion
- rm -rf ch_zlback_$OLDDATE.sql ch_zlback_$OLDDATE.tar.gz
- else
- echo "$DATE backup fail!!!!"
- fi
复制代码三、做好计划任务 把增量备份脚本 和 完全备份脚本按照想要的时间写在计划任务中,做定时的增量备份。 当然还原的时候需要按照顺序依次还原。
|