Mysql定時(shí)數(shù)據(jù)庫(kù)備份實(shí)現(xiàn)的保姆級(jí)教程
MySQL 是一種全球廣泛使用的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),它存儲(chǔ)的數(shù)據(jù)不僅非常寶貴,而且往往無(wú)法替代。因此,確保這些重要數(shù)據(jù)的安全至關(guān)重要,定期進(jìn)行備份就顯得尤為重要。為了進(jìn)一步增強(qiáng)數(shù)據(jù)的安全性,我們建議采用跨服務(wù)器備份策略,即將數(shù)據(jù)備份到不同的物理或虛擬服務(wù)器上。這樣做可以作為一個(gè)額外的安全保障,有效防止因單點(diǎn)故障而導(dǎo)致的數(shù)據(jù)丟失風(fēng)險(xiǎn)。簡(jiǎn)單來(lái)說(shuō),就是把重要文件同時(shí)保存在幾個(gè)不同的地方,這樣即使一個(gè)地方出了問(wèn)題,其他地方還有備份,從而更好地保護(hù)我們的資料安全。
一、需要解決的問(wèn)題
想要實(shí)現(xiàn)mysql數(shù)據(jù)跨服務(wù)器備份,需要先解決如下問(wèn)題:
1、如何傳輸文件?
在Linux系統(tǒng)中,我們可以利用scp
命令來(lái)實(shí)現(xiàn)文件和目錄的安全傳輸。scp
是“secure copy”的縮寫,它基于SSH協(xié)議,能夠在遠(yuǎn)程服務(wù)器之間提供加密的文件拷貝服務(wù),確保數(shù)據(jù)傳輸?shù)陌踩?。?jiǎn)易語(yǔ)法如下:
scp file_source file_target
此處,我們是從本地復(fù)制文件到遠(yuǎn)程,所以,大概命令就如下:
scp /opt/backup/mysql/database.sql root@12.17.11.170:/opt/backup/mysql
上面命令的意思就是將本地文件/opt/backup/mysql/database.sql復(fù)制到12.17.11.170服務(wù)器的/opt/backup/mysql目錄下。所以,執(zhí)行這個(gè)命令之前,要保證本地對(duì)應(yīng)目錄和文件都存在。12.17.11.170服務(wù)器上的對(duì)應(yīng)目錄也應(yīng)該存在。
2、如何備份數(shù)據(jù)庫(kù)?
備份數(shù)據(jù)庫(kù)我們使用mysql自帶的備份命令mysqldump即可?;菊Z(yǔ)法如下:
mysqldump -h [IP] -u[mysql用戶] -p[mysql密碼] [數(shù)據(jù)庫(kù)] >腳本名
3、如何建立一個(gè)定時(shí)任務(wù)?
我們可以利用Linux系統(tǒng)的crontab定時(shí)任務(wù),去實(shí)現(xiàn)固定時(shí)間自動(dòng)執(zhí)行腳本?;菊Z(yǔ)法如下:
[定時(shí)頻率表達(dá)式] sh [sh腳本文件]
上述問(wèn)題,解決后,我們就不難得出實(shí)施的步驟。
二、實(shí)施步驟
1、建立SSH公鑰,實(shí)現(xiàn)無(wú)密碼登錄
我們使用scp命令傳輸文件的時(shí)候,是需要輸入對(duì)方服務(wù)器的密碼的。這里,我們?yōu)榱瞬皇褂妹艽a登錄,來(lái)采取建立公鑰的方式,達(dá)到免登錄的效果。
1)服務(wù)器A上添加ssh公匙
ssh-keygen -t rsa
直接按回車建默認(rèn)目錄生成即可。如果再提示已經(jīng)生成過(guò)shh公鑰,則取消,去/root/.ssh目錄下查看即可。 產(chǎn)生如下兩個(gè)文件:
2)將id_rsa.pub文件拷貝到服務(wù)器B的/root/.ssh目錄下,并命名authorized_keys,如果B服務(wù)器已經(jīng)有authorized_keys文件,就直接將id_rsa.pub文件內(nèi)容直接拷貝到authorized_keys中即可。
2、編寫備份數(shù)據(jù)庫(kù)腳本
1)、創(chuàng)建如下sh腳本文件backupsql.sh
#!/bin/bash #備份路徑 BACKUP=/opt/backup/mysql #當(dāng)前時(shí)間 DATETIME=$(date +%Y-%m-%d) echo "===備份開(kāi)始===" echo "備份文件存放于${BACKUP}/$DATABASE-$DATETIME.sql" #數(shù)據(jù)庫(kù)地址 HOST=localhost #數(shù)據(jù)庫(kù)用戶名 DB_USER=root #數(shù)據(jù)庫(kù)密碼 DB_PW=zhuoye521 #創(chuàng)建備份目錄 #[ ! -d "${BACKUP}/$DATETIME" ] && mkdir -p "${BACKUP}/$DATETIME" #后臺(tái)系統(tǒng)數(shù)據(jù)庫(kù) DATABASE=zhuoye echo $DATABASE-$DATETIME #mysqldump -u${DB_USER} -p${DB_PW} --single-transaction --host=$HOST -q -R --databases $DATABASE | gzip > ${BACKUP}/$DATETIME/$DATABASE.sql mysqldump -h localhost -u${DB_USER} -p${DB_PW} ${DATABASE} >${BACKUP}/$DATABASE-$DATETIME.sql echo "===導(dǎo)出成功,開(kāi)始傳輸===" #壓縮成tar.gz包 cd $BACKUP #tar -zcvf $DATETIME.tar.gz $DATETIME #備份到服務(wù)器B scp $DATABASE-$DATETIME.sql root@12.17.11.170:/opt/backup/mysql #刪除備份目錄 #rm -rf ${BACKUP}/$DATETIME #刪除10天前備份的數(shù)據(jù),這邊可以自行更改 #find $BACKUP -mtime +10 -name "*.sql" -exec rm -rf {} \; echo "===數(shù)據(jù)庫(kù)備份到服務(wù)器成功==="
注意:要保證A、B服務(wù)器上都已經(jīng)有/opt/backup/mysql這個(gè)目錄。
腳本賦權(quán):
chmod 775 backupsql.sh
2)、執(zhí)行腳本文件可以在B服務(wù)器上/opt/backup/mysql成功出現(xiàn)sql腳本,即腳本無(wú)問(wèn)題。
這一步手動(dòng)執(zhí)行不僅是驗(yàn)證你的腳本是不是能夠正確產(chǎn)生并傳輸?shù)紹服務(wù)器的指定目錄,還因?yàn)槭状螆?zhí)行的時(shí)候會(huì)需要手動(dòng)確認(rèn)一次。如下圖,輸入yes即可:
如果你不手動(dòng)執(zhí)行一次,可能導(dǎo)致定時(shí)任務(wù)每次執(zhí)行的時(shí)候都會(huì)卡到這個(gè)需要確認(rèn)是否繼續(xù)的步驟。
注意:細(xì)心點(diǎn)你會(huì)發(fā)現(xiàn)navicate導(dǎo)出的sql腳本要比我們使用mysqldump導(dǎo)出的腳本要大,這并不是因?yàn)槟愕臄?shù)據(jù)缺失了,而是使用mysqldump導(dǎo)出的sql文件中會(huì)把盡可能多的數(shù)據(jù)放到一條“insert”語(yǔ)句中,而navicat導(dǎo)出的sql文件每條“insert”語(yǔ)句只對(duì)應(yīng)一條數(shù)據(jù)。這也就是,使用mysqldump導(dǎo)出的備份腳本,在執(zhí)行的時(shí)候速度更快的原因。
3、編寫定時(shí)任務(wù)
1)、編輯定時(shí)任務(wù)文件
crontab -e
2)、輸入如下內(nèi)容,后保存退出
#表示每天23:59自動(dòng)執(zhí)行代碼。需要注意的是前面是分鐘,后面是小時(shí)
59 23 * * * sh /opt/backup/mysql/backupsql.sh
3)、重啟服務(wù)
service crond restart
注:如果重啟失敗,可能就是你第二步的時(shí)間寫錯(cuò)了。要注意前面是分鐘,后面是小時(shí),不要寫反了!
總結(jié)
到此這篇關(guān)于Mysql定時(shí)數(shù)據(jù)庫(kù)備份實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Mysql定時(shí)數(shù)據(jù)庫(kù)備份內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
ssm框架如何調(diào)用mysql存儲(chǔ)過(guò)程
這篇文章主要介紹了ssm框架如何調(diào)用mysql存儲(chǔ)過(guò)程,首先是建表,創(chuàng)建存儲(chǔ)過(guò)程,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-05-05linux mysql5.5升級(jí)至mysql5.7的步驟與踩到的坑
這篇文章主要介紹了linux mysql5.5升級(jí)至mysql5.7的詳細(xì)步驟,后面腳本之家小編為大家整理了多個(gè)補(bǔ)充,大家可以參考一下2021-01-01MySql開(kāi)發(fā)之自動(dòng)同步表結(jié)構(gòu)
這篇文章主要給大家介紹了關(guān)于MySql開(kāi)發(fā)之自動(dòng)同步表結(jié)構(gòu)的相關(guān)資料,這樣可以避免在開(kāi)發(fā)中由于修改數(shù)據(jù)庫(kù)字段導(dǎo)致的數(shù)據(jù)庫(kù)表不一致問(wèn)題,需要的朋友可以參考下2021-05-05MySQL無(wú)法啟動(dòng)幾種常見(jiàn)問(wèn)題小結(jié)
在群里看到有新同學(xué)還在問(wèn)MySQL無(wú)法啟動(dòng)的問(wèn)題,于是總結(jié)了幾個(gè)常見(jiàn)情況與解決方法,需要的朋友可以參考下2013-09-09mysql字符串的‘123’轉(zhuǎn)換為數(shù)字的123的實(shí)例
下面小編就為大家?guī)?lái)一篇mysql字符串的‘123’轉(zhuǎn)換為數(shù)字的123的實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-01-01