程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL binlog 長途備份辦法詳解

MySQL binlog 長途備份辦法詳解

編輯:MySQL綜合教程

MySQL binlog 長途備份辦法詳解。本站提示廣大學習愛好者:(MySQL binlog 長途備份辦法詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是MySQL binlog 長途備份辦法詳解正文


之前備份binlog時,都是先在當地停止備份緊縮,然後發送到長途辦事器中。然則這個中照樣有必定風險的,由於日記的備份都是周期性的,假如在某個周期中,辦事器宕機了,硬盤破壞了,便可能招致這段時光的binlog就喪失了。

並且,之前用劇本對長途辦事器停止備份的方法,有個缺陷:沒法對MySQL辦事器以後正在寫的二進制日記文件停止備份。所以,只能比及MySQL辦事器全體寫完能力停止備份。而寫完一個binlog的時光其實不固定,這就招致備份周期的不肯定。

從MySQL5.6開端,mysqlbinlog支撐將長途辦事器上的binlog及時復制到當地辦事器上。

mysqlbinlog的及時二進制復制功效並不是簡略的將長途辦事器的日記復制過去,它是經由過程MySQL 5.6頒布的Replication API及時獲得二進制事宜。實質上,就相當於MySQL的從辦事器。與通俗辦事器相似,主辦事器產生事宜後,普通都邑在0.5~1秒內停止備份。

備份敕令


mysqlbinlog --read-from-remote-server --raw --host=192.168.244.145 --port=3306 --user=repl --password=repl --stop-never mysql-bin.000001

說明以下:

--read-from-remote-server:用於備份長途辦事器的binlog。假如不指定該選項,則會查找當地的binlog。

--raw:binlog日記會以二進制格局存儲在磁盤中,假如不指定該選項,則會以文本情勢保留。

--user:復制的MySQL用戶,只須要授與REPLICATION SLAVE權限。

--stop-never:mysqlbinlog可以只從長途辦事器獲得指定的幾個binlog,也可將赓續生成的binlog保留到當地。指定此選項,代表只需長途辦事器不封閉或許銜接未斷開,mysqlbinlog就會赓續的復制長途辦事器上的binlog。

mysql-bin.000001:代表從哪一個binlog開端復制。

除以上選項外,還有以下幾個選項須要留意:

--stop-never-slave-server-id:在備份長途辦事器的binlog時,mysqlbinlog實質上就相當於一個從辦事器,該選項就是用來指定從辦事器的server-id的。默許為-1。

--to-last-log:代表mysqlbinlog不只可以或許獲得指定的binlog,還能獲得厥後生成的binlog,獲得完了,才終止。假如指定了--stop-never選項則會隱式翻開--to-last-log選項。

--result-file:用於設置長途辦事器的binlog,保留到當地的前綴。比方關於mysql-bin.000001,假如指定--result-file=/test/backup-,則保留到當地後的文件名為/test/backup-mysql-bin.000001。留意:假如將--result-file設置為目次,則必定要帶上目次分隔符“/”。比方--result-file=/test/,而不是--result-file=/test,否則保留到當地的文件名為/testmysql-bin.000001。

缺乏:

這個方法有個成績,關於慣例的主從復制來講,假如主從直接的銜接斷開了,則從會主動再次銜接,而關於mysqlbinlog,假如斷開了,其實不會主動銜接。

處理計劃:

可經由過程劇本來填補上述缺乏。

#!/bin/sh
BACKUP_BIN=/usr/bin/mysqlbinlog
LOCAL_BACKUP_DIR=/backup/binlog/
BACKUP_LOG=/backup/binlog/backuplog
REMOTE_HOST=192.168.244.145
REMOTE_PORT=3306
REMOTE_USER=repl
REMOTE_PASS=repl
FIRST_BINLOG=mysql-bin.000001
#time to wait before reconnecting after failure
SLEEP_SECONDS=10
##create local_backup_dir if necessary
mkdir -p ${LOCAL_BACKUP_DIR}
cd ${LOCAL_BACKUP_DIR}
## 運轉while輪回,銜接斷開後期待指准時間,從新銜接
while :
do
 if [ `ls -A "${LOCAL_BACKUP_DIR}" |wc -l` -eq 0 ];then
 LAST_FILE=${FIRST_BINLOG}
 else
 LAST_FILE=`ls -l ${LOCAL_BACKUP_DIR} | grep -v backuplog |tail -n 1 |awk '{print $9}'`
 fi
 ${BACKUP_BIN} --raw --read-from-remote-server --stop-never --host=${REMOTE_HOST} --port=${REMOTE_PORT} --user=${REMOTE_USER} --password=${REMOTE_PASS} ${LAST_FILE}
 echo "`date +"%Y/%m/%d %H:%M:%S"` mysqlbinlog停滯,前往代碼:$?" | tee -a ${BACKUP_LOG}
 echo "${SLEEP_SECONDS}秒後再次銜接並持續備份" | tee -a ${BACKUP_LOG} 
 sleep ${SLEEP_SECONDS}
done

劇本解讀:

1. 現實上界說了一個逝世輪回,假如備份掉敗,則10s後從新銜接。

2. 第一次運轉時需指定FIRST_BINLOG的值,指從哪一個binlog開端復制,普通為mysql-bin.000001。後續履行的時刻就直接獲得備份目次下最新的binlog,從最新的binlog開端復制。

總結:

1. 假如指定了--raw,mysqlbinlog獲得事宜後,其實不會及時落盤,而是先保留在當地辦事器的內存中,每4K刷盤一次。這也就削減了頻仍的日記寫操作。假如此時mysqlbinlog和主辦事器之間的銜接斷開了,則內存中的binlog會立時刷新到磁盤中。

2. 雖然mysqlbinlog相似於從辦事器,但從辦事器上的relaylog倒是及時存盤的,即從辦事器獲得主辦事器發生的事宜後,會及時寫入到relaylog中。

3. 假如不指定--raw,這個時刻會以文本格局存盤,此時,--result-file=/test/不克不及指定為目次,必需明白寫上文件名,比方--result-file=/test/1.sql,此時,mysqlbinlog獲得事宜後,是及時落盤的,不會每4K刷盤一次。

以上所述是小編給年夜家引見的MySQL binlog 長途備份教程詳解的相干常識,願望對年夜家有所贊助,假如年夜家有任何疑問請給我留言,小編會實時答復年夜家的。在此也異常感激年夜家對網站的支撐!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved