多數應用場景下,我們需要對重要數據進行備份、并放置到一個安全的地方,以備不時之需。
常見的 MySQL 數據備份方式有,直接打包復制對應的數據庫或表文件(物理備份)、mysqldump 全量邏輯備份、xtrabackup 增量邏輯備份等。
常見的數據存儲方式有,本機存儲、FTP 上傳到遠程服務器、云存儲(如阿里云OSS、七牛云存儲等)、甚至本地也行。
我們可能不想每次都手動去備份,也不想每次都那么耗時間的去下載,也不想就放在服務器上丟了,因為我們需要異地備份。那我們可以嘗試,寫個腳本定時備份數據庫,然后自動上傳到指定服務器或云存儲。
這里,我們說說 Linux 服務器下備份 MySQL 并上傳到七牛云存儲的方式。
準備工作
•Linux 系統
•crontab 服務
需保證 crond 服務處于啟動自啟動狀態。
•gzip 命令
需系統能正常執行 gzip 命令,用于壓縮文件。
•mysqldump 命令
需系統能正常執行 mysqldump 命令,用于邏輯備份數據。mysqldump 備份的數據,系由可執行的 SQL 組成,不存在版本不兼容的問題。
•qshell 工具
qshell 是七牛云官方利用七牛文檔上公開的 API 實現的一個方便開發者測試和使用七牛 API 服務的命令行工具。
具體文檔和下載地址: https://developer.qiniu.com/kodo/tools/1302/qshell
•七牛云賬號
存儲數據的前提當然是先有一個七牛的賬號,七牛對個人提供10G的免費存儲空間,可供我們個人使用。注冊地址:
https://portal.qiniu.com/signup?code=3looatwobaxci
•七牛存儲空間
有了七牛云的賬號后,還需在控制臺手動創建一個空間(bucket)來存放數據。
qshell 配置
我們從官方地址中下載的 qshell 是個包含支持多個系統平臺的壓縮包,選擇我們對應系統的那個二進制文件,賦予其可執行權限。也可以放置到 /usr/local/bin/ 等目錄下,方便直接調用 qshell 命令。
配置七牛賬號,ak、sk 在七牛云控制臺 > 個人中心 > 密鑰管理內。
qshell account ak sk
該命令會將 ak/sk 賬號寫入 ~/.qshell/account.json,此后就不用再配置了。
我們這里用的 qshell 命令是 rput,即以分片上傳的方式上傳一個文件,使用文檔:
https://github.com/qiniu/qshell/blob/master/docs/rput.md
qshell rput Bucket> Key> LocalFile> true
qshell 的其他詳細功能使用,可自行參考其文檔。
腳本內容
#!/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 "數據庫 [$dbname] 備份完成" >> $logFile
echo "$bakDir/$bakFile" >> $logFile
echo "開始上傳備份文件至七牛云存儲" >> $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
腳本中的數據庫配置、日志文件、存放路徑、Bucket>等需自行修改,并存在。database/$bakFile,表示的是 Key>,即在七牛存儲中的路徑文件名,可自定義。
腳本文件需可執行權限,然后可以執行腳本進行測試。
定時任務
# 每天凌晨2點執行備份腳本
* 2 * * * /opt/backup/baksql.sh
如果定時任務未執行,可查看日志 /var/log/cron 排查問題,或者查看 crond 是否處于運行狀態。
總結
以上所述是小編給大家介紹的定時備份 Mysql并上傳到七牛的方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!
您可能感興趣的文章:- shell腳本實現mysql定時備份、刪除、恢復功能
- CentOS下mysql定時備份Shell腳本分享
- MySQL定時備份方案(利用Linux crontab)
- 淺析mysql 定時備份任務
- MySQL定時備份數據庫操作示例
- MySQL數據庫定時備份的實現方法
- linux實現定時備份mysql數據庫的簡單方法
- linux實現mysql數據庫每天自動備份定時備份
- Mysql數據庫定時備份腳本分享
- Windows下MySQL定時備份腳本的實現
- mysql自動定時備份數據庫的最佳方法(windows服務器)
- 在Windows環境下使用MySQL:實現自動定時備份