工作原理就是把每次完整備份的binlog 和postion取出,做增量備份的時候取當時的binlog和postion,使用mysqlbinlog 把這之間的資料讀出到另乙個檔案。
一、完整備份
vi full_mysqldump.sh
#!/bin/sh
###########
#########
#########dir_info############
date=`date +%y%m%d`
back_dir="/home/profiles/liuhaifeng/fullbackup"
file_dir="/home/profiles/liuhaifeng"
#############################3mysql_back#########################
if [ ! -d $back_dir$date ];then
mkdir -p $back_dir$date
fi/usr/local/mysql/bin/mysql -uroot -p'123456' -h 127.0.0.1 -p 3306 -e "flush tables with read lock"
/usr/local/mysql/bin/mysqldump -uroot -p'123456' -h 127.0.0.1 -p 3306 --default-character-set=gbk --opt --triggers -r --hex-blob --flush-logs --master-data=2 --all-databases > $back_dir$date/fullbackup.sql
/usr/local/mysql/bin/mysql -u root -p'123456' -h 127.0.0.1 -p 3306 -e "unlock tables"
##########################
################get postion###############
sed -n "22p" a.sql | awk -f'=|,|;' '' > $file_dir/postion
################# ftp to 16.1 ###############
################# ftp info ###############
host="192.168.16.1"
user="user"
passwd="password"
ftp_dir="database"
ftp_db()
#####################transfer infl#############
cd $back_dir$date
if [ ! -f fullbackup.sql ]; then
echo "mysqldump back file faild !!! please check"
exit 1
fi/bin/tar zcf fullbackup_$date.tar.gz fullbackup.sql
sleep 5
ftp_db fullbackup_$date.tar.gz
二、做增量備份,根據上面完整備份所獲得的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 '' $file_dir/postion`
startpostion=`awk '' $file_dir/postion`
cd $file_dir
mysql -uroot -p123456 -s /tmp/mysql.sock3306 -h 192.168.16.3 -e "show master status\g;"|awk '' > 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/" $back_dir/mysql-bin-bj1.index`
stopline=`wc -l $back_dir/mysql-bin-bj1.index |awk ''`
for i in `seq $startline $stopline`
dobinlog=`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()
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三、做好計畫任務
把增量備份指令碼 和 完全備份指令碼按照想要的時間寫在計畫任務中,做定時的增量備份。
當然還原的時候需要按照順序依次還原。
mysql增量備份檔案 mysql增量備份
突然說要我研究下增量備份,表示在此之前真的不知道這是什麼意思,網上搜說 是指在一次全備份或上一次增量備份後,以後每次的備份只需備份與前一次相比增加或者被修改的檔案。我通俗理解就是 在前一次的備份基礎上去增刪改。然後就花費了我一下午的時間,中間的心酸就不提了,正式來吧 1 首先進去cmd以管理員身份進...
mysql增量備份
一 環境描述 使用rsync進行mysql的增量備份 192.168.0.2為備份伺服器 192.168.0.3為需要經常備份的mysql資料庫 二 主要配置 1.備份伺服器配置 useradd mysql db d data bak passwd rsync server 密碼我配置的為 123 ...
mysqldump備份 mysql增量備份
一 mysql資料庫自帶備份命令 mysqldump 1 備份 mysqldump u使用者名稱 p 密碼 資料庫名 備份的檔名 如 1 mysqldump uroot p 123 zdh opt mysql bak.sql 2 mysqldump uroot p 123 b zdh opt mys...