多數應用場景下,咱們須要對重要數據進行備份、並放置到一個安全的地方,以備不時之需。常見的 MySQL 數據備份方式有,直接打包複製對應的數據庫或表文件(物理備份)、
mysqldump
全量邏輯備份、xtrabackup
增量邏輯備份等。mysql常見的數據存儲方式有,本機存儲、FTP 上傳到遠程服務器、雲存儲(如阿里雲OSS、七牛雲存儲等)、甚至本地也行。git
咱們可能不想每次都手動去備份,也不想每次都那麼耗時間的去下載,也不想就放在服務器上丟了,由於咱們須要異地備份。那咱們能夠嘗試,寫個腳本定時備份數據庫,而後自動上傳到指定服務器或雲存儲。github
這裏,咱們說說 Linux 服務器下備份 MySQL 並上傳到七牛雲存儲的方式。sql
Linux
系統crontab
服務需保證 crond 服務處於啓動&自啓動狀態。shell
gzip
命令需系統能正常執行 gzip 命令,用於壓縮文件。數據庫
mysqldump
命令需系統能正常執行 mysqldump
命令,用於邏輯備份數據。mysqldump
備份的數據,系由可執行的 SQL 組成,不存在版本不兼容的問題。json
qshell
工具qshell
是七牛雲官方利用七牛文檔上公開的 API 實現的一個方便開發者測試和使用七牛 API 服務的命令行工具。七牛雲存儲
具體文檔和下載地址: https://developer.qiniu.com/k...安全
存儲數據的前提固然是先有一個七牛的帳號,七牛對我的提供10G的免費存儲空間,可供咱們我的使用。註冊地址:
https://portal.qiniu.com/sign...服務器
有了七牛雲的帳號後,還需在控制檯手動建立一個空間(bucket)來存放數據。
咱們從官方地址中下載的 qshell 是個包含支持多個系統平臺的壓縮包,選擇咱們對應系統的那個二進制文件,賦予其可執行權限。也能夠放置到 /usr/local/bin/
等目錄下,方便直接調用 qshell
命令。
配置七牛帳號,ak
、sk
在七牛雲控制檯 > 我的中心 > 密鑰管理內。
qshell account ak sk
該命令會將 ak/sk 帳號寫入 ~/.qshell/account.json
,此後就不用再配置了。
咱們這裏用的 qshell
命令是 rput
,即以分片上傳的方式上傳一個文件,使用文檔: https://github.com/qiniu/qshe...
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點執行備份腳本 0 2 * * * /opt/backup/baksql.sh
若是定時任務未執行,可查看日誌 /var/log/cron
排查問題,或者查看 crond
是否處於運行狀態。
原文地址: https://shockerli.net/post/my...
更多文章請訪問個人我的博客: https://shockerli.net