前言
數據是無價的,我們通常會把重要的業務數據存放在數據庫中,并需要對數據庫做定時的自動備份工作,防止數據異常丟失,造成無法挽回的損失。
小程序云開發提供了方便的云數據庫供我們直接使用,云開發使用了騰訊云提供的云數據庫,擁有完善的數據保障機制,無需擔心數據丟失。但是,我們還是不可避免的會擔心數據庫中數據的安全,比如不小心刪除了數據集合,寫入了臟數據等。
還好,云開發控制臺提供了數據集合的導出,導入功能,我們可以手動備份數據庫。不過,總是手動備份數據庫也太麻煩了點,所有重復的事情都應該讓代碼去解決,下面我們就說說怎么搞定云開發數據庫自動備份。
通過查閱微信的文檔,可以發現云開發提供了數據導出接口databaseMigrateExport
POST https://api.weixin.qq.com/tcb/databasemigrateexport?access_token=ACCESS_TOKEN
通過這個接口,結合云函數的定時觸發功能,我們就可以做數據庫定時自動備份了。梳理一下大致的流程:
創建一個定時觸發的云函數 云函數調用接口,導出數據庫備份文件 將備份文件上傳到云存儲中以供使用1. 獲取 access_token
調用微信的接口需要 access_token,所以我們首先要獲取 access_token。通過文檔了解到使用 auth.getAccessToken 接口可以用小程序的 appid 和 secret 獲取 access_token。
// 獲取 access_tokenrequest.get( `https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${appid}&secret=${secret}`, (err, res, body) => { if (err) { // 處理錯誤 return; } const data = JSON.parse(body); // data.access_token });2. 創建數據庫導出任務
獲取 access_token 后,就可以使用 databaseMigrateExport 接口導出數據進行備份。
databaseMigrateExport 接口會創建一個數據庫導出任務,并返回一個 job_id,這個 job_id 怎么用我們下面再說。顯然數據庫的數據導出并不是同步的,而是需要一定時間的,數據量越大導出所要花費的時間就越多,個人實測,2W 條記錄,2M 大小,導出大概需要 3~5 S。
調用 databaseMigrateExport 接口需要傳入環境 Id,存儲文件路徑,導出文件類型(1 為 JSON,2 為 CSV),以及一個 query 查詢語句。
因為我們是做數據庫備份,所以這里就導出 JSON 類型的數據,兼容性更好。需要備份的數據可以用 query 來約束,這里還是很靈活的,既可以是整個集合的數據,也可以是指定的部分數據,這里我們就使用 db.collection('data').get() 備份 data 集合的全部數據。同時我們使用當前時間作為文件名,方便以后使用時查找。
request.post( `https://api.weixin.qq.com/tcb/databasemigrateexport?access_token=${accessToken}`, { body: JSON.stringify({ env, file_path: `${date}.json`, file_type: '1', query: 'db.collection("data").get()' }) }, (err, res, body) => { if (err) { // 處理錯誤 return; } const data = JSON.parse(body); // data.job_id });
新聞熱點
疑難解答