腾讯云自动备份?qq云端备份在哪里

微信小程序云开发如何实现数据库自动备份实现

前言

数据是无价的,我们通常会把重要的业务数据存放在数据库中,并需要对数据库做定时的自动备份工作,防止数据异常丢失,造成无法挽回的损失。

小程序云开发提供了方便的云数据库供我们直接使用,云开发使用了腾讯云提供的云数据库,拥有完善的数据保障机制,无需担心数据丢失。但是,我们还是不可避免的会担心数据库中数据的安全,比如不小心删除了数据集合,写入了脏数据等。

还好,云开发控制台提供了数据集合的导出,导入功能,我们可以手动备份数据库。不过,总是手动备份数据库也太麻烦了点,所有重复的事情都应该让代码去解决,下面我们就说说怎么搞定云开发数据库自动备份。

通过查阅微信的文档,可以发现云开发提供了数据导出接口databaseMigrateExport

POST

通过这个接口,结合云函数的定时触发功能,我们就可以做数据库定时自动备份了。梳理一下大致的流程:

创建一个定时触发的云函数

云函数调用接口,导出数据库备份文件

将备份文件上传到云存储中以供使用

1.获取 access_token

调用微信的接口需要 access_token,所以我们首先要获取 access_token。通过文档了解到使用 auth.getAccessToken接口可以用小程序的 appid和 secret获取 access_token。

//获取 access_token

request.get(

`${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(

`${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

}

);

3.查询任务状态,获取文件地址

在创建号数据库导出任务后,我们会得到一个 job_id,如果导出集合比较大,就会花费较长时间,这时我们可以使用 databaseMigrateQueryInfo接口查询数据库导出的进度。

当导出完成后,会返回一个 file_url,即可以下载数据库导出文件的临时链接。

request.post( `${accessToken}`,

{

body: JSON.stringify({

env,

job_id: jobId

})

},

(err, res, body)=>{

if(err){

reject(err);

}

const data= JSON.parse(body);

// data.file_url

}

);

获取到文件下载链接之后,我们可以将文件下载下来,存入到自己的云存储中,做备份使用。如果不需要长时间的保留备份,就可以不用下载文件,只需要将 job_id存储起来,当需要恢复备份的时候,通过 job_id查询到新的链接,下载数据恢复即可。

至于 job_id存在哪,就看个人想法了,这里就选择存放在数据库里。

await db.collection('db_back_info').add({

data:{

date: new Date(),

jobId: job_id

}

});

4.函数定时触发器

云函数支持定时触发器,可以按照设定的时间自动执行。云开发的定时触发器采用的 Cron表达式语法,最大精度可以做的秒级,详细的使用方法可以参考官方文档:定时触发器|微信开放文档

这里我们配置函数每天凌晨 2点触发,这样就可以每天都对数据库进行备份。在云函数目录下新建 config.json文件,写入如下内容:

{

"triggers": [

{

"name":"dbTrigger",

"type":"timer",

"config":"0 0 2****"

}

]

}

完整代码

最后,贴出可以在云函数中使用的完整代码,只需要创建一个定时触发的云函数,并设置好相关的环境变量即可使用

appid

secret

backupColl:需要备份的集合名称,如‘data'

backupInfoColl:存储备份信息的集合名称,如‘db_back_info'

注意,云函数的默认超时时间是 3秒,创建备份函数时,建议将超时时间设定到最大值 20S,留有足够的时间查询任务结果。

/* eslint-disable*/

const request= require('request');

const cloud= require('wx-server-sdk');

//环境变量

const env='xxxx';

cloud.init({

env

});

//换取 access_token

async function getAccessToken(appid, secret){

return new Promise((resolve, reject)=>{

request.get(

`${appid}&secret=${secret}`,

(err, res, body)=>{

if(err){

reject(err);

return;

}

resolve(JSON.parse(body));

}

);

});

}

//创建导出任务

async function createExportJob(accessToken, collection){

const date= new Date().toISOString();

return new Promise((resolve, reject)=>{

request.post(

`${accessToken}`,

{

body: JSON.stringify({

env,

file_path: `${date}.json`,

file_type:'1',

query: `db.collection("${collection}").get()`

})

},

(err, res, body)=>{

if(err){

reject(err);

}

resolve(JSON.parse(body));

}

);

});

}

//查询导出任务状态

async function waitJobFinished(accessToken, jobId){

return new Promise((resolve, reject)=>{

//轮训任务状态

const timer= setInterval(()=>{

request.post(

`${accessToken}`,

{

body: JSON.stringify({

env,

job_id: jobId

})

},

(err, res, body)=>{

if(err){

reject(err);

}

const{ status, file_url}= JSON.parse(body);

console.log('查询');

if(status==='success'){

clearInterval(timer);

resolve(file_url);

}

}

);

}, 500);

});

}

exports.main= async(event, context)=>{

//从云函数环境变量中读取 appid和 secret以及数据集合

const{ appid, secret, backupColl, backupInfoColl}= process.env;

const db= cloud.database();

try{

//获取 access_token

const{ errmsg, access_token}= await getAccessToken(appid, secret);

if(errmsg&& errcode!== 0){

throw new Error(`获取 access_token失败:${errmsg}`||'获取 access_token为空');

}

//导出数据库

const{ errmsg: jobErrMsg, errcode: jobErrCode, job_id}= await createExportJob(access_token, backupColl);

//打印到日志中

console.log(job_id);

if(jobErrCode!== 0){

throw new Error(`创建数据库备份任务失败:${jobErrMsg}`);

}

//将任务数据存入数据库

const res= await db.collection('db_back_info').add({

data:{

date: new Date(),

jobId: job_id

}

});

//等待任务完成

const fileUrl= await waitJobFinished(access_token, job_id);

console.log('导出成功', fileUrl);

//存储到数据库

await db

.collection(backupInfoColl)

.doc(res._id)

.update({

data:{

fileUrl

}

});

} catch(e){

throw new Error(`导出数据库异常:${e.message}`);

}

};

腾讯云是什么,腾讯云有什么用

1.腾讯云是腾讯公司提供的云计算服务。

2.它的主要用途包括建立网站,通过虚拟主机服务轻松搭建个人或企业网站,并具备弹性扩展功能,允许用户根据实际需求调整主机配置。

3.腾讯云还提供云存储服务和内容分发网络(CDN)服务,支持数据备份至云端,实现高效管理,并加速静态资源的传输速度,提升网站访问速度。

4.数据安全与备份方面,腾讯云具备数据加密技术,保障用户数据安全,并提供自动备份功能,确保数据安全性和可用性。

5.弹性计算服务可以根据业务需求动态调整计算资源,节省成本并提高资源利用率。

6.腾讯云支持数据存储、计算和分析,帮助企业进行大数据处理和挖掘,提高决策效率。

7.提供全球化的网络服务,包括负载均衡、安全防护等,确保业务稳定运行。

8.腾讯云还提供一系列人工智能(AI)服务,如自然语言处理、图像识别等,助力企业实现智能化转型。

综上所述,腾讯云不仅提供全面的云计算服务,还帮助企业实现了网站搭建、数据存储、安全备份、计算分析等需求,成为企业数字化转型和业务发展的强大支撑。

腾讯有云盘吗

qq云盘在哪里

1我们选择存到微云;就是上传到腾讯为用户提供的网络空间:优势是不会随着更换电脑而找不到文件

2打开QQ应用管理器;添加云盘

3开启云盘

4选择QQ里面收到的QQ文件;里面有我们存到微云的文件

怎样进入QQ云盘

目前QQ云盘2013年已经改版为微云了,进入QQ云盘也就是进入微云。以前的qq网盘的打开方式是在qq的应用管理器中,打开qq网盘应用后,只要将文件拉入网盘就可以自动上传保存了,上传下载都很方便。现在qq网盘变成了微云,而且qq的应用管理器中又有了一个新的应用,是中转站,使用效果与qq网盘类似,但是保存期限是30天。

微云也是在qq的应用管理器中,使用步骤如下:

①点击打开q唬界面的应用管理器。

②打开应用管理器界面后,在个人工具类中就可以看到微云了。

③点击打开后,就可以通过功能按钮上传分享管理文件了。

④微云初始容量是2G网盘,可以通过账号升级,参加活动获得最大2T的容量。

以上就是进入微云也就是QQ云盘的方法。

腾讯有什么网盘吗

QQ网盘是一款全新的网络存储服务,QQ硬盘于2011-09-15正式升级为QQ网盘,存储在QQ硬盘上的文件正常使用。2013年被腾讯自身的微云网盘所取代。QQ网盘是目前国内规模最大功能最完善的远程网络存储服务,不但为用户提供便捷的文件网络存储服务,同时还提供了文件的好友共享、在线播放等增值功能,形成了用户文件的存储、共享、转移、应用的一站式体验。

微云就是云计算的一个分支,是指云计算在个局部范围里的某些应用。随着网络的发展,微应用将越来越广泛,就像微博一样,用起来简单、方便、快捷,微云将是云计算里的像微博一样能简单操作、方便、快捷的的一种应用。微云也可以是云计算里一个小领域的应用,比如家庭云,就是指一个家庭里组建起来的一个接入云计算的接入意,就可以称作微云。无数的这种微云就组埂了一个庞大的云计算。

有经验的给阿里云百度云腾讯云有什么区别,优劣势

重点说下阿里云和腾讯云吧,因为百度开放云起步较晚,没用过

用过两家的学生机和腾讯云的2核4G,阿里云和腾讯云的服务器都很稳定,基本不会出现故障,而流畅度腾讯云较好,另外阿里云的磁盘读写速度很慢,这个是硬伤。

价格上两家相差不大,腾讯云注重新用户赠礼,新用户注册就可以领260元的代金券礼包;阿里云则在其他产品上的推荐会更全面些,比如网站建设、数据库、CDN。

服务上腾讯云的体验较好,400电话、工单和论坛回复的响应速度都很快,阿里云的售后则比较机械。

其他附加价值,腾讯云有安全认证,对网站在q上的推广会很有帮助;阿里云线下活动比较丰富。

QQ怎么开通云盘

是qq网盘还是qq微云?没有听过云盘啊,如果属于腾讯业务,那就直接登陆你qq账户就可以了

云盘速度那家快百度,腾讯,360云盘,哪家上传下载快

上传下载速度,取决于你自己的网络。

我用百度和360,上传及下载,基本是达到我自己网络的上限值的。

但是,有必要注意一点的是,百度云盘目前有个会员加速功能。

实际上,就跟以前的迅雷一样,表面上是给会员加速,实际上是给非会员限速。

但是,我没有放弃百度云盘,因为它本质上就不是一个下载工具。

利用百度网盘来下载电影,太傻了。

因为存在百度网盘上的电影可以在线看,为什么还要下载?

我已经两年没有下载过任何一部电影了,因为这两年好像还没有哪部电影值得我收藏到硬盘上。

我有时下载一点大文件,如win10系统之类的,一般都用专门的下载工具。

再说了,请看图

上图百度网盘,总共2000多G,用了1600多G,也就是1.5T了。

下图360,总共44.7T,用了13.6T。

而我的电脑总共才700多G。

我能下载多少?

我现在最头疼的不是上传、下载,而是如何删除这些网盘里的东西了。

整理起来真是个麻烦事。

国内的云盘,因为存储机制的问题,你想上传一个东西,只要不是你原创的,或者修改过的,基本都是秒传。

也就是说,同样一个东西,只要是有人比你先上传过了,你再上传,叮的一下,两三G的文件,几秒钟就传上去了。

如果是你自己原创的东西,如视频啊、相片啊,那上传,不管百度还是360,上传速度取决于你的网速。

我旅游一次,几G的原生相片上传,花了十多个小时,自己买的宽带不行,怪不得别人。

怎么现在的网盘有腾讯云啦,有没有人用过,好用吗? 5分

360里又安全,空间又大

手机 QQ的我的云盘在哪里的啊

在qq面板上的应用管理器里面有这个图标。是在QQ面板的下方位置。

腾讯微云和百度云盘哪个好?说理由

两个一起用不好吗??非要分?我还下载了360云盘,万一像上次搜狐邮箱一样关了的话起码还有个备份

目前除了百度网盘还有哪些给力的网盘?腾讯微云还能用吗?

好像也就百度网盘和腾讯微云了吧。腾讯微云还能用哦。

阅读剩余
THE END