Mysql定時數(shù)據(jù)庫備份實現(xiàn)的保姆級教程
MySQL 是一種全球廣泛使用的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),它存儲的數(shù)據(jù)不僅非常寶貴,而且往往無法替代。因此,確保這些重要數(shù)據(jù)的安全至關(guān)重要,定期進行備份就顯得尤為重要。為了進一步增強數(shù)據(jù)的安全性,我們建議采用跨服務器備份策略,即將數(shù)據(jù)備份到不同的物理或虛擬服務器上。這樣做可以作為一個額外的安全保障,有效防止因單點故障而導致的數(shù)據(jù)丟失風險。簡單來說,就是把重要文件同時保存在幾個不同的地方,這樣即使一個地方出了問題,其他地方還有備份,從而更好地保護我們的資料安全。

一、需要解決的問題
想要實現(xiàn)mysql數(shù)據(jù)跨服務器備份,需要先解決如下問題:
1、如何傳輸文件?
在Linux系統(tǒng)中,我們可以利用scp命令來實現(xiàn)文件和目錄的安全傳輸。scp是“secure copy”的縮寫,它基于SSH協(xié)議,能夠在遠程服務器之間提供加密的文件拷貝服務,確保數(shù)據(jù)傳輸?shù)陌踩?。簡易語法如下:
scp file_source file_target
此處,我們是從本地復制文件到遠程,所以,大概命令就如下:
scp /opt/backup/mysql/database.sql root@12.17.11.170:/opt/backup/mysql
上面命令的意思就是將本地文件/opt/backup/mysql/database.sql復制到12.17.11.170服務器的/opt/backup/mysql目錄下。所以,執(zhí)行這個命令之前,要保證本地對應目錄和文件都存在。12.17.11.170服務器上的對應目錄也應該存在。
2、如何備份數(shù)據(jù)庫?
備份數(shù)據(jù)庫我們使用mysql自帶的備份命令mysqldump即可?;菊Z法如下:
mysqldump -h [IP] -u[mysql用戶] -p[mysql密碼] [數(shù)據(jù)庫] >腳本名
3、如何建立一個定時任務?
我們可以利用Linux系統(tǒng)的crontab定時任務,去實現(xiàn)固定時間自動執(zhí)行腳本?;菊Z法如下:
[定時頻率表達式] sh [sh腳本文件]
上述問題,解決后,我們就不難得出實施的步驟。
二、實施步驟
1、建立SSH公鑰,實現(xiàn)無密碼登錄
我們使用scp命令傳輸文件的時候,是需要輸入對方服務器的密碼的。這里,我們?yōu)榱瞬皇褂妹艽a登錄,來采取建立公鑰的方式,達到免登錄的效果。
1)服務器A上添加ssh公匙
ssh-keygen -t rsa
直接按回車建默認目錄生成即可。如果再提示已經(jīng)生成過shh公鑰,則取消,去/root/.ssh目錄下查看即可。 產(chǎn)生如下兩個文件:

2)將id_rsa.pub文件拷貝到服務器B的/root/.ssh目錄下,并命名authorized_keys,如果B服務器已經(jīng)有authorized_keys文件,就直接將id_rsa.pub文件內(nèi)容直接拷貝到authorized_keys中即可。
2、編寫備份數(shù)據(jù)庫腳本
1)、創(chuàng)建如下sh腳本文件backupsql.sh
#!/bin/bash
#備份路徑
BACKUP=/opt/backup/mysql
#當前時間
DATETIME=$(date +%Y-%m-%d)
echo "===備份開始==="
echo "備份文件存放于${BACKUP}/$DATABASE-$DATETIME.sql"
#數(shù)據(jù)庫地址
HOST=localhost
#數(shù)據(jù)庫用戶名
DB_USER=root
#數(shù)據(jù)庫密碼
DB_PW=zhuoye521
#創(chuàng)建備份目錄
#[ ! -d "${BACKUP}/$DATETIME" ] && mkdir -p "${BACKUP}/$DATETIME"
#后臺系統(tǒng)數(shù)據(jù)庫
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 "===導出成功,開始傳輸==="
#壓縮成tar.gz包
cd $BACKUP
#tar -zcvf $DATETIME.tar.gz $DATETIME
#備份到服務器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ù)庫備份到服務器成功==="注意:要保證A、B服務器上都已經(jīng)有/opt/backup/mysql這個目錄。
腳本賦權(quán):
chmod 775 backupsql.sh
2)、執(zhí)行腳本文件可以在B服務器上/opt/backup/mysql成功出現(xiàn)sql腳本,即腳本無問題。
這一步手動執(zhí)行不僅是驗證你的腳本是不是能夠正確產(chǎn)生并傳輸?shù)紹服務器的指定目錄,還因為首次執(zhí)行的時候會需要手動確認一次。如下圖,輸入yes即可:

如果你不手動執(zhí)行一次,可能導致定時任務每次執(zhí)行的時候都會卡到這個需要確認是否繼續(xù)的步驟。
注意:細心點你會發(fā)現(xiàn)navicate導出的sql腳本要比我們使用mysqldump導出的腳本要大,這并不是因為你的數(shù)據(jù)缺失了,而是使用mysqldump導出的sql文件中會把盡可能多的數(shù)據(jù)放到一條“insert”語句中,而navicat導出的sql文件每條“insert”語句只對應一條數(shù)據(jù)。這也就是,使用mysqldump導出的備份腳本,在執(zhí)行的時候速度更快的原因。
3、編寫定時任務
1)、編輯定時任務文件
crontab -e
2)、輸入如下內(nèi)容,后保存退出
#表示每天23:59自動執(zhí)行代碼。需要注意的是前面是分鐘,后面是小時
59 23 * * * sh /opt/backup/mysql/backupsql.sh
3)、重啟服務
service crond restart
注:如果重啟失敗,可能就是你第二步的時間寫錯了。要注意前面是分鐘,后面是小時,不要寫反了!
總結(jié)
到此這篇關(guān)于Mysql定時數(shù)據(jù)庫備份實現(xiàn)的文章就介紹到這了,更多相關(guān)Mysql定時數(shù)據(jù)庫備份內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
phpmyadmin中為站點設置mysql權(quán)限的圖文方法
在一個服務器上一般來講都不止一個站點,更不止一個MySQL(和PHP搭配之最佳組合)數(shù)據(jù)庫。2011-03-03
Mysql中InnoDB與MyISAM索引差異詳解(最新整理)
InnoDB和MyISAM在索引實現(xiàn)和特性上有差異,包括聚集索引、非聚集索引、事務支持、并發(fā)控制、覆蓋索引、主鍵約束、外鍵支持和物理存儲結(jié)構(gòu)等方面,InnoDB更適合事務型應用,而MyISAM適合只讀或讀多寫少的場景,本文介紹Mysql中InnoDB與MyISAM索引差異,感興趣的朋友一起看看吧2025-03-03
MySQL 實現(xiàn)數(shù)據(jù)分片進行數(shù)據(jù)查詢的方案
本文介紹MySQL數(shù)據(jù)分片技術(shù),包括垂直分片和水平分片,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2025-08-08
MySQL常見的底層優(yōu)化操作教程及相關(guān)建議
這篇文章主要介紹了MySQL常見的底層優(yōu)化操作教程及相關(guān)建議,包括對運行操作系統(tǒng)的硬件方面及存儲引擎參數(shù)的調(diào)整等零碎方面的小整理,需要的朋友可以參考下2015-12-12

