欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL中binlog備份腳本的方法

 更新時間:2023年04月20日 08:37:50   作者:瀟湘隱者  
這篇文章主要介紹了MySQL中binlog備份腳本分享,這里主要介紹一下我寫的MySQL二進制日志的備份腳本,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

關(guān)于MySQL的二進制日志(binlog),我們都知道二進制日志(binlog)非常重要,尤其當(dāng)你需要point to point災(zāi)難恢復(fù)的時侯,所以我們要對其進行備份。關(guān)于二進制日志(binlog)的備份,可以基于flush logs方式先切換binlog,然后拷貝&壓縮到到遠(yuǎn)程服務(wù)器或本地服務(wù)器的其他存儲上,例如掛載的NAS存儲,也可以使用mysqlbinlog實現(xiàn)binlog的備份,可以實現(xiàn)MySQL二進制日志(binlog)的本地備份或遠(yuǎn)程備份。最后將MySQL二進制日志(binlog)的備份文件收到磁帶。各個公司的備份策略或備份工具有所不同,這里不做展開,我們主要考慮MySQL二進制日志(binlog)備份方案/策略盡可能盡善盡美,在一些極端情況下少丟失數(shù)據(jù)。例如,第一種方式,這種備份方式都是周期性的,如果在某個周期中,遇到一些極端情況,例如服務(wù)器宕機了,硬盤損壞了,就可能導(dǎo)致這段時間的binlog丟失了。而且這個周期時間太長,二進制日志(binlog)丟失的風(fēng)險就越大,如果這個周期太短,頻繁切換binlog也不好。所以還是使用mysqlbinlog來備份二進制日志(binlog),這里主要介紹一下我寫的MySQL二進制日志的備份腳本,這個腳本參考了如何遠(yuǎn)程備份MySQL binlog[1]中的腳本,但是在其基礎(chǔ)上做了很多改進和完善:

  • 參考資料中的腳本由于使用了循環(huán)操作,不適合在作業(yè)中調(diào)用。一般需要手工執(zhí)行腳本,讓其在后臺運行。遇到服務(wù)器重啟或其他異常情況,此腳本可能出現(xiàn)未能執(zhí)行的情況。

  • 增加了mysql_binlog_backup_job.sh腳本,作業(yè)會定期調(diào)用此腳本,此腳本會判斷mysqlbinlog是否還在執(zhí)行二進制日志備份。如果遇到了數(shù)據(jù)庫服務(wù)器重啟等情況,也不會擔(dān)心MySQL的二進制日志(binlog)的備份停掉的問題。

  • 不用手工指定第一個binlog文件參數(shù),采用從數(shù)據(jù)庫讀取binlog的值.如果是在本地服務(wù)器執(zhí)行binlog的備份,還可以從二進制日志索引文件中獲取(參考腳本注釋部分)

  • 使用mysql_config_editor配置賬號密碼,避免在腳本中使用數(shù)據(jù)庫用戶的明文密碼。

  • 郵件告警處理。

在使用腳本前,必須配置mailx,創(chuàng)建數(shù)據(jù)庫連接賬號

create?user?bkuser@'xxx.xxx.xxx.xxx'?identified?by?"******";
grant??replication?client?on?*.*?to?bkuser@'%';
grant??replication?slave?on?*.*?to?bkuser@'%';

這個根據(jù)實際情況調(diào)整,例如我就是使用Xtrabackup的賬號來備份MySQL的binlog。 另外,如果在MySQL數(shù)據(jù)庫服務(wù)器本機備份binlog,那么就在本機安全加密登錄,如果是在遠(yuǎn)程服務(wù)器備份binlog的話,就在遠(yuǎn)程服務(wù)器配置

$?mysql_config_editor?set??--login-path=server1_dbbackup?-h?xxx.xxx.xxx.xxx?-ubkuser?-p?-P?3306
Enter?password:

mysql_binlog_backup_job.sh腳本

#!/bin/sh

#########################################################################################
#???????????????????????????????????????????????????????????????????????????????????????#
#?This?script?is?used?for?mysql?binlog?backup.??????????????????????????????????????????#
#???????????????????????????????????????????????????????????????????????????????????????#
#?#######################################################################################
#???????????????????????????????????????????????????????????????????????????????????????#
#?ScriptName????????????:????mysql_binlog_backup_job.sh?????????????????????????????????#
#?Author????????????????:????瀟湘隱者?????????????????????????????????????????????????????#
#?CerateDate????????????:????2017-04-14?????????????????????????????????????????????????#
#?Description???????????:???????????????????????????????????????????????????????????????#
#---------------------------------------------------------------------------------------#
#?????????????????????????作業(yè)中調(diào)用此腳本,然后此腳本去調(diào)用mysql_binlog_backup.sh執(zhí)行??????#
#?????????????????????????MySQL的二進制日志備份(將MySQL的二進制日志備份到NAS存儲或備份存#
#?????????????????????????儲上),此腳本還會判斷mysqlbinlog是否在一直在備份二進制日志,??#
#?????????????????????????如果是的話,則退出當(dāng)前腳本。如果mysqlbinlog已經(jīng)由于服務(wù)器重???#
#?????????????????????????啟等原因退出了,則會重新調(diào)用mysql_binlog_backup.sh????????????#
#***************************************************************************************#
#?Version????????Modified?Date????????????Description???????????????????????????????????#
#***************************************************************************************#
#?V.1.0??????????2016-06-20?????create?the?script?for?mysql?binlog?backp????????????????#
#?V.1.1??????????2016-07-26?????fix?some?bug????????????????????????????????????????????#
#?V.1.2??????????2023-04-14?????$FIRST_BINLOG從MySQL中獲取,即使遠(yuǎn)程備份也不用手工??????#
#???????????????????????????????設(shè)定,本地備份也可以這種方式,本地備份默認(rèn)從?????????????#
#????????????????????????????????mysql?binlog?index?file讀取????????????????????????????#
#########################################################################################

#mysql?binlog備份文件的保留天數(shù)
KEEPY_DAYS=7
FIRST_BINLOG=''
LOG_DATE=$(date?+%Y_%m_%d_%H_%M_%S)
BACKUP_DATE=$(date?+%Y_%m_%d_%H_%M_%S)
LOCAL_BACKUP_DIR=/dbbackup/mysql_backup/db_backup/binlog_backup
#MYSQL_BINLOG_INDEX=/data/bin_logs/mysql_binlog.index
MYSQL_CMD=/opt/mysql/mysql8.0/bin/mysql
BACKUP_LOG_PATH=/dbbackup/mysql_backup/logs
ERROR_LOG=${BACKUP_LOG_PATH}/binlog_backup_error_${BACKUP_DATE}.log
FILE_TYPE="mysql_binlog.*"
SQL_TEXT='show?binary?logs'
MAIL_TO="xxxx@xxx.com.cn"
MAIL_FROM="xxxx@xxx.com.cn"
MYSQL_LOGIN_PATH=server1_dbbackup
error()
{
?echo?"$1"?1>&2
?echo?"$1"?>>?${ERROR_LOG}
?echo?"$1"?|?mailx?-s?"The?binlog?backup?on?the?server?`hostname`?failed?,please?check?the?log!"?-r?${MAIL_FROM}?${MAIL_TO}
?exit?1
}

##目錄不存在則創(chuàng)建目錄
if?[?!?-d?$BACKUP_LOG_PATH?];then
???????mkdir?-p?$BACKUP_LOG_PATH
fi

if?[?!?-x?/bin/mailx?];then
????error?"{LOG_DATE}:mailx?did?not?exists!"?
fi

if?[?!?-x?$MYSQL_CMD?];then
???error?"{LOG_DATE}:?mysql?client?did?not?exists!"?
fi
#SQL_RESULT=`mysql?-h${REMOTE_HOST}?-P${PORT}?-u${USER_NAME}?-p${PASSWORD}?${DATABASE_NAME}?-Bse?"${SQL_TEXT}"`
SQL_RESULT=`$MYSQL_CMD?--login-path=${MYSQL_LOGIN_PATH}?-Bse?"${SQL_TEXT}"`
FIRST_BINLOG=`echo?${SQL_RESULT}?|?awk?'{print?$1}'`
echo?$FIRST_BINLOG

if?[?!?$FIRST_BINLOG?];then
???error?"${LOG_DATE}:?please?check?the?mysql?binlog"??
fi

##create?local_backup_dir?if?this?folder?is?not?exists
if?[?!?-d?${LOCAL_BACKUP_DIR}?];then
??mkdir?-p?${LOCAL_BACKUP_DIR}
fi
if?[?!?-e?${MYSQL_BINLOG_INDEX}?];then
??error?"${LOG_DATE}:mysql?binlog?index?file?did?not?exists,?please?check?it!"?
fi

#刪除KEEPY_DAYS天之前的binlog備份文件
find?${LOCAL_BACKUP_DIR}?-name?"${FILE_TYPE}"?-type?f?-mtime?+$KEEPY_DAYS?-delete
#刪除30天前的錯誤日志
find?${BACKUP_LOG_PATH}?-name?"binlog_backup_error*.log"???-mtime?30?-delete
process_num=$(ps?-ef?|?grep?-w?mysqlbinlog?|?grep?-v?grep?|wc?-l)

if?[?${process_num}?-ge?1?];then
???????exit?1?
else
??#如果是在本機備份binlog到NAS存儲或備份存儲上,從二進制文件的索引獲取當(dāng)前MySQL數(shù)據(jù)庫最小的binlog文件
??#如果是遠(yuǎn)程備份二進制日志(binlog)的話,則使用下面注釋的腳本獲取
??#FIRST_BINLOG=$(head?-1?${MYSQL_BINLOG_INDEX})
??#FIRST_BINLOG=$(find?${LOCAL_BACKUP_DIR}?-name?"mysql_binlog.*"??-printf?"%p\t%C@\n"?|?sort?-k2?-g?|head?-1?|?awk?'{print?$1}'?|?awk?-F?"/"?'{print?$NF}')?
??echo?${FIRST_BINLOG}
??nohup?sh?/dbbackup/mysql_backup/scripts/mysql_binlog_backup.sh?${FIRST_BINLOG}?${LOCAL_BACKUP_DIR}?${FILE_TYPE}?&
fi

mysql_binlog_backup.sh腳本

#!/bin/sh

#########################################################################################
#???????????????????????????????????????????????????????????????????????????????????????#
#?This?script?is?used?for?mysql?binlog?local?or?remote?backup.??????????????????????????#
#???????????????????????????????????????????????????????????????????????????????????????#
#?#######################################################################################
#???????????????????????????????????????????????????????????????????????????????????????#
#?ScriptName????????????:????mysql_binlog_backup.sh?????????????????????????????????????#
#?Author????????????????:????Kerry??????????????????????????????????????????????????????#
#?CerateDate????????????:????2017-04-14?????????????????????????????????????????????????#
#?Description???????????:???????????????????????????????????????????????????????????????#
#---------------------------------------------------------------------------------------#
#?????????????????????????此腳本參考了https://www.cnblogs.com/ivictor/p/5502240.html????#
#?????????????????????????的腳本,在它的基礎(chǔ)上做了一些改進,例如,ivitcor中腳本備份binlog#
#?????????????????????????如果服務(wù)器重啟了,則必須手動執(zhí)行腳本.......???????????????????#
#***************************************************************************************#
#?Version????????Modified?Date????????????Description???????????????????????????????????#
#***************************************************************************************#
#?V.1.0??????????2016-06-20?????create?the?script?for?mysql?binlog?backp????????????????#
#?V.1.1??????????2016-07-26?????fix?some?bug????????????????????????????????????????????#
#########################################################################################

BACKUP_BIN=/opt/mysql/mysql8.0/bin/mysqlbinlog
BACKUP_LOG_PATH=/dbbackup/mysql_backup/logs
LOG_DATE=$(date?+%Y_%m_%d_%H_%M_%S)
BACKUP_LOG=${BACKUP_LOG_PATH}/binlog_backup.log
ERROR_LOG=${BACKUP_LOG_PATH}/binlog_backup_error_${LOG_DATE}.log
#復(fù)制二進制日志的主機,可以遠(yuǎn)程MySQL數(shù)據(jù)庫也可以是本機
MYSQL_LOGIN_PATH=server1_dbbackup
#time?to?wait?before?reconnecting?after?failure
SLEEP_SECONDS=10
MAIL_TO="xxx@xxx.com.cn"
MAIL_FROM="xxx@xxx.com.cn"

error()
{
?echo?"$1"?1>&2
?echo?"$1"?>>?${ERROR_LOG}
?echo?"$1"?|?mailx?-s?"The?binlog?backup?on?the?server?`hostname`?failed?,please?check?the?log!"?-r?${MAIL_FROM}?${MAIL_TO}
?exit?1
}
##目錄不存在則創(chuàng)建目錄
if?[?!?-d?$BACKUP_LOG_PATH?];then
???????mkdir?-p?$BACKUP_LOG_PATH
fi


if?[?"$#"?-ne?3];then???
????error?"${LOG_DATE}:you?must?input?3?arguments"?
fi

if?[?!?$1?];then
????error?"${LOG_DATE}:first_binlog?arguments?is?null"?
else
????FIRST_BINLOG=$1
fi

if?[?!?$2?];then
????error?"${LOG_DATE}:local_backup_dir?arguments?is?null"?
else
????LOCAL_BACKUP_DIR=$2
fi

if?[?!?$3?];then
????error?"${LOG_DATE}:file_type?arguments?is?null"?
else
????FILE_TYPE=$3
fi
##檢查mysqlbinlog二進制文件是否存在
if?[?!?-x?${BACKUP_BIN}?];then
???????error?"${LOG_DATE}:mysqlbinlog?did?not?exists,?please?check?it!"?
fi
cd?${LOCAL_BACKUP_DIR}

##?運行while循環(huán),連接斷開后等待指定時間,重新連接
while?:
do
??#如果當(dāng)前備份二進制日志目錄為空,則使用MySQL實例最小的二進制日志文件名
??if?[?`ls?-A?"${LOCAL_BACKUP_DIR}"?|wc?-l`?-eq?0?];then
?????LAST_BINLOG_FILE=${FIRST_BINLOG}
??else
?????#LAST_FILE=`ls?-l?${LOCAL_BACKUP_DIR}?|?grep?-v?backuplog?|tail?-n?1?|awk?'{print?$9}'`
?????#echo?${LOCAL_BACKUP_DIR}
?????#echo?${FILE_TYPE}
?????#取mysqlbinlog備份的最后一個binlog文件名
?????LAST_BINLOG_FILE=`find?${LOCAL_BACKUP_DIR}?-name?"${FILE_TYPE}"??-printf?"%p\t%C@\n"?|?sort?-k2?-g?|tail?-1?|?awk?'{print?$1}'?|?awk?-F?"/"?'{print?$NF}'`
??fi
??#${BACKUP_BIN}?--login-path=${MYSQL_LOGIN_PATH}?--read-from-remote-server?--raw?--stop-never?--host=${REMOTE_HOST}?--port=${REMOTE_PORT}??${LAST_BINLOG_FILE}
??${BACKUP_BIN}?--login-path=${MYSQL_LOGIN_PATH}?--read-from-remote-server?--raw?--stop-never???${LAST_BINLOG_FILE}
??echo?"`date?+"%Y/%m/%d?%H:%M:%S"`?mysqlbinlog停止,返回代碼:$?"?|?tee?-a?${BACKUP_LOG}
??echo?"${SLEEP_SECONDS}秒后再次連接并繼續(xù)備份"?|?tee?-a?${BACKUP_LOG}??
??sleep?${SLEEP_SECONDS}
done

配置作業(yè)

*/10?*?*?*?*?/dbbackup/mysql_backup/scripts/mysql_binlog_backup_job.sh?>>?/dbbackup/mysql_backup/logs/mysql_binlog_back.log?2>&1

參考資料

https://www.cnblogs.com/ivictor/p/5502240.html

到此這篇關(guān)于MySQL中binlog備份腳本分享的文章就介紹到這了,更多相關(guān)MySQL中binlog備份腳本內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SQL性能優(yōu)化方法及性能測試

    SQL性能優(yōu)化方法及性能測試

    這篇文章主要介紹了SQL性能優(yōu)化方法及性能測試,文章圍繞主題展開詳細(xì)內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下,希望對你的學(xué)習(xí)有所幫助
    2022-05-05
  • RedHat6.5安裝MySQL5.7教程詳解

    RedHat6.5安裝MySQL5.7教程詳解

    這篇文章主要為大家詳細(xì)介紹了RedHat6.5下MySQL5.7的安裝教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • MySql 存儲引擎和索引相關(guān)知識總結(jié)

    MySql 存儲引擎和索引相關(guān)知識總結(jié)

    這篇文章主要介紹了MySql 存儲引擎和索引相關(guān)知識總結(jié),文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • 一文帶你學(xué)透SQL語言的核心之DML操作

    一文帶你學(xué)透SQL語言的核心之DML操作

    DML(Data?Manipulation?Language)是SQL語言的核心部分,其主要用于對數(shù)據(jù)庫的數(shù)據(jù)進行增刪改查,在學(xué)習(xí)數(shù)據(jù)時,學(xué)習(xí)DML操作是必不可少的一部分,本文就帶大家詳細(xì)了解SQL語言的核心DML操作,需要的朋友可以參考下
    2023-06-06
  • MySQL 如何查找并刪除重復(fù)記錄的實現(xiàn)

    MySQL 如何查找并刪除重復(fù)記錄的實現(xiàn)

    這篇文章主要介紹了MySQL 如何查找并刪除重復(fù)記錄的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • Mysql之如何實現(xiàn)全外連接

    Mysql之如何實現(xiàn)全外連接

    這篇文章主要介紹了Mysql之如何實現(xiàn)全外連接問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • MYSQL子查詢和嵌套查詢優(yōu)化實例解析

    MYSQL子查詢和嵌套查詢優(yōu)化實例解析

    本文通過實例向大家介紹了MYSQL子查詢和嵌套查詢優(yōu)化的相關(guān)內(nèi)容,附代碼示例,具有一定參考價值。希望對大家使用MySQL有所幫助。
    2017-10-10
  • 解決MySQL登錄報錯1130:1130?Host?***.***.***.***?is?not?allowed?to?connect?to?this?MySQL?server

    解決MySQL登錄報錯1130:1130?Host?***.***.***.***?is?not?allowe

    有時候在登錄到MySQL服務(wù)器時會遇到1130錯誤,這是因為無法連接到MySQL服務(wù)器或其他一些原因,這篇文章主要給大家介紹了關(guān)于解決MySQL登錄報錯1130:1130?Host?***.***.***.***?is?not?allowed?to?connect?to?this?MySQL?server的相關(guān)資料,需要的朋友可以參考下
    2023-12-12
  • MySQL分組查詢、排序查詢、分頁查詢以及執(zhí)行順序

    MySQL分組查詢、排序查詢、分頁查詢以及執(zhí)行順序

    MySQL數(shù)據(jù)查詢是數(shù)據(jù)庫操作中最常見的操作之一,它可以幫助我們從數(shù)據(jù)庫中獲取所需的數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于MySQL分組查詢、排序查詢、分頁查詢以及執(zhí)行順序的相關(guān)資料,需要的朋友可以參考下
    2024-02-02
  • mysql 獲取昨天日期、今天日期、明天日期以及前一個小時和后一個小時的時間

    mysql 獲取昨天日期、今天日期、明天日期以及前一個小時和后一個小時的時間

    這篇文章主要介紹了mysql 獲取昨天日期、今天日期、明天日期以及前一個小時和后一個小時的時間,需要的朋友可以參考下
    2018-01-01

最新評論