多數(shù)應(yīng)用場(chǎng)景下,我們需要對(duì)重要數(shù)據(jù)進(jìn)行備份、并放置到一個(gè)安全的地方,以備不時(shí)之需。
常見的 MySQL 數(shù)據(jù)備份方式有,直接打包復(fù)制對(duì)應(yīng)的數(shù)據(jù)庫或表文件(物理備份)、mysqldump 全量邏輯備份、xtrabackup 增量邏輯備份等。
常見的數(shù)據(jù)存儲(chǔ)方式有,本機(jī)存儲(chǔ)、FTP 上傳到遠(yuǎn)程服務(wù)器、云存儲(chǔ)(如阿里云OSS、七牛云存儲(chǔ)等)、甚至本地也行。
我們可能不想每次都手動(dòng)去備份,也不想每次都那么耗時(shí)間的去下載,也不想就放在服務(wù)器上丟了,因?yàn)槲覀冃枰惖貍浞荨D俏覀兛梢試L試,寫個(gè)腳本定時(shí)備份數(shù)據(jù)庫,然后自動(dòng)上傳到指定服務(wù)器或云存儲(chǔ)。
這里,我們說說 Linux 服務(wù)器下備份 MySQL 并上傳到七牛云存儲(chǔ)的方式。
準(zhǔn)備工作
•Linux 系統(tǒng)
•crontab 服務(wù)
需保證 crond 服務(wù)處于啟動(dòng)自啟動(dòng)狀態(tài)。
•gzip 命令
需系統(tǒng)能正常執(zhí)行 gzip 命令,用于壓縮文件。
•mysqldump 命令
需系統(tǒng)能正常執(zhí)行 mysqldump 命令,用于邏輯備份數(shù)據(jù)。mysqldump 備份的數(shù)據(jù),系由可執(zhí)行的 SQL 組成,不存在版本不兼容的問題。
•qshell 工具
qshell 是七牛云官方利用七牛文檔上公開的 API 實(shí)現(xiàn)的一個(gè)方便開發(fā)者測(cè)試和使用七牛 API 服務(wù)的命令行工具。
具體文檔和下載地址: https://developer.qiniu.com/kodo/tools/1302/qshell
•七牛云賬號(hào)
存儲(chǔ)數(shù)據(jù)的前提當(dāng)然是先有一個(gè)七牛的賬號(hào),七牛對(duì)個(gè)人提供10G的免費(fèi)存儲(chǔ)空間,可供我們個(gè)人使用。注冊(cè)地址:
https://portal.qiniu.com/signup?code=3looatwobaxci
•七牛存儲(chǔ)空間
有了七牛云的賬號(hào)后,還需在控制臺(tái)手動(dòng)創(chuàng)建一個(gè)空間(bucket)來存放數(shù)據(jù)。
qshell 配置
我們從官方地址中下載的 qshell 是個(gè)包含支持多個(gè)系統(tǒng)平臺(tái)的壓縮包,選擇我們對(duì)應(yīng)系統(tǒng)的那個(gè)二進(jìn)制文件,賦予其可執(zhí)行權(quán)限。也可以放置到 /usr/local/bin/ 等目錄下,方便直接調(diào)用 qshell 命令。
配置七牛賬號(hào),ak、sk 在七牛云控制臺(tái) > 個(gè)人中心 > 密鑰管理內(nèi)。
qshell account ak sk
該命令會(huì)將 ak/sk 賬號(hào)寫入 ~/.qshell/account.json,此后就不用再配置了。
我們這里用的 qshell 命令是 rput,即以分片上傳的方式上傳一個(gè)文件,使用文檔:
https://github.com/qiniu/qshell/blob/master/docs/rput.md
qshell rput Bucket> Key> LocalFile> true
qshell 的其他詳細(xì)功能使用,可自行參考其文檔。
腳本內(nèi)容
#!/bin/sh
# mysql data backup script
#
# use mysqldump --help,get more detail.
dbname=your_dbname
user=your_db_username
password=your_db_password
bakDir=/opt/backup/sql
logFile=/opt/backup/mysqlbak.log
datetime=`date +%Y%m%d%H%M%S`
keepDay=7
echo "-------------------------------------------" >> $logFile
echo $(date +"%y-%m-%d %H:%M:%S") >> $logFile
echo "--------------------------" >> $logFile
cd $bakDir
bakFile=$dbname.$datetime.sql.gz
mysqldump -u$user -p$password $dbname | gzip > $bakFile
echo "數(shù)據(jù)庫 [$dbname] 備份完成" >> $logFile
echo "$bakDir/$bakFile" >> $logFile
echo "開始上傳備份文件至七牛云存儲(chǔ)" >> $logFile
/usr/local/bin/qshell rput Bucket> database/$bakFile $bakFile true | sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g" >> $logFile 2>1
echo "刪除${keepDay}天前的備份文件" >> $logFile
find $bakDir -ctime +$keepDay >> $logFile
find $bakDir -ctime +$keepDay -exec rm -rf {} \;
echo " " >> $logFile
echo " " >> $logFile
腳本中的數(shù)據(jù)庫配置、日志文件、存放路徑、Bucket>等需自行修改,并存在。database/$bakFile,表示的是 Key>,即在七牛存儲(chǔ)中的路徑文件名,可自定義。
腳本文件需可執(zhí)行權(quán)限,然后可以執(zhí)行腳本進(jìn)行測(cè)試。
定時(shí)任務(wù)
# 每天凌晨2點(diǎn)執(zhí)行備份腳本
* 2 * * * /opt/backup/baksql.sh
如果定時(shí)任務(wù)未執(zhí)行,可查看日志 /var/log/cron 排查問題,或者查看 crond 是否處于運(yùn)行狀態(tài)。
總結(jié)
以上所述是小編給大家介紹的定時(shí)備份 Mysql并上傳到七牛的方法,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
您可能感興趣的文章:- shell腳本實(shí)現(xiàn)mysql定時(shí)備份、刪除、恢復(fù)功能
- CentOS下mysql定時(shí)備份Shell腳本分享
- MySQL定時(shí)備份方案(利用Linux crontab)
- 淺析mysql 定時(shí)備份任務(wù)
- MySQL定時(shí)備份數(shù)據(jù)庫操作示例
- MySQL數(shù)據(jù)庫定時(shí)備份的實(shí)現(xiàn)方法
- linux實(shí)現(xiàn)定時(shí)備份mysql數(shù)據(jù)庫的簡單方法
- linux實(shí)現(xiàn)mysql數(shù)據(jù)庫每天自動(dòng)備份定時(shí)備份
- Mysql數(shù)據(jù)庫定時(shí)備份腳本分享
- Windows下MySQL定時(shí)備份腳本的實(shí)現(xiàn)
- mysql自動(dòng)定時(shí)備份數(shù)據(jù)庫的最佳方法(windows服務(wù)器)
- 在Windows環(huán)境下使用MySQL:實(shí)現(xiàn)自動(dòng)定時(shí)備份