mysql 做增量備份

2021-07-11 09:46:58 字數 3620 閱讀 5181

工作原理就是把每次完整備份的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...