閱讀本文大約須要 10 分鐘javascript
實戰-將MySQL備份上傳到私有云(3)python
傳送門:mysql
實戰-MySQL定時增量備份(2)github
前兩篇文章聊了 MySQL 的全量備份與增量備份,咱們也學會了數據庫的備份與恢復。這也加強了咱們數據庫的安全性。假如,咱們整臺數據庫服務器被劫持了,或者遇到了其餘毀滅性的災難,即便備份了也沒個毛用,由於備份文件也在同一臺服務器啊。那麼咱們就會想如何備份的同時,上傳到其餘私有云,這樣咱們就不用擔憂了。因而便有了本文。sql
OK,學習了上兩篇文章,咱們已經能夠輕鬆地備份數據庫,也獲得瞭如下腳本文件。而在下面腳本的最後幾行,我添加了幾行將備份文件上傳到私有云的代碼。這裏我註釋掉了,如要使用請取消註釋。OK,如今讓咱們一塊兒打怪升級。shell
#!/bin/bash
#獲取當前時間
date_now=$(date "+%Y%m%d-%H%M%S")
backUpFolder=/home/db/backup/mysql
username="root"
password="123456"
db_name="zone"
#定義備份文件名
fileName="${db_name}_${date_now}.sql"
#定義備份文件目錄
backUpFileName="${backUpFolder}/${fileName}"
echo "starting backup mysql ${db_name} at ${date_now}."
/usr/bin/mysqldump -u${username} -p${password} --lock-all-tables --flush-logs ${db_name} > ${backUpFileName}
#進入到備份文件目錄
cd ${backUpFolder}
#壓縮備份文件
tar zcvf ${fileName}.tar.gz ${fileName}
# use nodejs to upload backup file other place
#NODE_ENV=$backUpFolder@$backUpFileName node /home/tasks/upload.js
date_end=$(date "+%Y%m%d-%H%M%S")
echo "finish backup mysql database ${db_name} at ${date_end}."
# 使用 nodejs 上傳備份文件到 私有云
#NODE_ENV=$backUpFolder@$backUpFileName /root/node/v8.11.3/bin/node /usr/local/upload.js
# 使用 python 上傳備份文件到 私有云
#python /use/local/upload.py $backUpFolder $backUpFileName
複製代碼
# 使用 python 上傳備份文件到 私有云
#python /use/local/upload.py $backUpFolder $backUpFileName
複製代碼
$backUpFolder #備份文件的所在目錄
$backUpFileName #備份文件名
複製代碼
這兩個參數爲傳給 upload.py 的參數。數據庫
# 使用 nodejs 上傳備份文件到 私有云
#/root/node/v8.11.3/bin/node /usr/local/upload.js $backUpFolder $backUpFileName
複製代碼
這兩個參數爲傳給 upload.js 的參數。
##備份到私有云-python
這裏的私有云使用的是七牛雲,使用其餘私有云請自行替換。如下腳本中,替換你本身的 access_key、secret_key、bucket_name(存儲倉庫名) 便可使用。
from qiniu import Auth, put_file, etag
import sys
print('參數個數爲:', len(sys.argv), '個參數。')
print('參數列表:', str(sys.argv))
# backUpFolder,獲取備份文件的目錄
backUpFolder = sys.argv[1]
# backUpFileName,獲取備份文件的文件名
backUpFileName = sys.argv[2]
import qiniu.config
# 須要填寫你的 Access Key 和 Secret Key
access_key = 'your_key'
secret_key = 'your_key'
# 構建鑑權對象
q = Auth(access_key, secret_key)
# 要上傳的空間
bucket_name = 'test'
# 上傳到七牛後保存的文件名
key = backUpFileName
# 生成上傳 Token,能夠指定過時時間等
token = q.upload_token(bucket_name, key, 3600)
# 要上傳文件的本地路徑
localfile = backUpFolder + backUpFileName
ret, info = put_file(token, key, localfile)
print(info)
assert ret['key'] == key
assert ret['hash'] == etag(localfile)
複製代碼
這裏的私有云使用的是七牛雲,使用其餘私有云請自行替換。如下腳本中,替換你本身的 access_key、secret_key、bucket(存儲倉庫名) 便可使用。
let qiniu = require("qiniu");
let arguments = process.argv.splice(2);
console.log(process.argv)
console.log('所傳遞的參數是:', arguments[0]);
console.log('所傳遞的參數是:', arguments[1]);
let file = arguments[1];
let filePath = arguments[0] + '/' + file;
console.log(filePath);
bucket = "test"//你的存儲空間名
//須要填寫你的 Access Key 和 Secret Key
let accessKey = 'access_key';
let secretKey = 'secret_key';
let config = new qiniu.conf.Config();
// 空間對應的機房,選擇機房得看七牛的文檔:https://developer.qiniu.com/kodo/sdk/1289/nodejs#form-upload-file
config.zone = qiniu.zone.Zone_z0;
let mac = new qiniu.auth.digest.Mac(accessKey, secretKey);
let options = {
scope: bucket,
};
let putPolicy = new qiniu.rs.PutPolicy(options);
let uploadToken=putPolicy.uploadToken(mac);
let localFile = filePath;
let formUploader = new qiniu.form_up.FormUploader(config);
let putExtra = new qiniu.form_up.PutExtra();
let key = file;
// 文件上傳
formUploader.putFile(uploadToken, key, localFile, putExtra, function (respErr, respBody, respInfo) {
if (respErr) {
throw respErr;
}
if (respInfo.statusCode == 200) {
console.log(respBody);
} else {
console.log(respInfo.statusCode);
console.log(respBody);
}
});
複製代碼
上圖爲我本地運行腳本文件上傳 README.md 的截圖。上傳成功。
github 中的私有倉庫須要付費,能夠選擇碼雲來做爲私有倉庫,其私有倉庫的免費的。
#!/bin/bash
#獲取當前時間
date_now=$(date "+%Y%m%d-%H%M%S")
backUpFolder=/home/db/backup/mysql
username="root"
password="123456"
db_name="zone"
#定義備份文件名
fileName="${db_name}_${date_now}.sql"
#定義備份文件目錄
backUpFileName="${backUpFolder}/${fileName}"
echo "starting backup mysql ${db_name} at ${date_now}."
/usr/bin/mysqldump -u${username} -p${password} --lock-all-tables --flush-logs ${db_name} > ${backUpFileName}
#進入到備份文件目錄
cd ${backUpFolder}
#壓縮備份文件
tar zcvf ${fileName}.tar.gz ${fileName}
# use nodejs to upload backup file other place
#NODE_ENV=$backUpFolder@$backUpFileName node /home/tasks/upload.js
date_end=$(date "+%Y%m%d-%H%M%S")
echo "finish backup mysql database ${db_name} at ${date_end}."
git add .
git commit -m 'commit by script'
git push
複製代碼