腾讯云自动备份?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云盘,万一像上次搜狐邮箱一样关了的话起码还有个备份
目前除了百度网盘还有哪些给力的网盘?腾讯微云还能用吗?
好像也就百度网盘和腾讯微云了吧。腾讯微云还能用哦。