首页 > 数据库 >如何将数据从MySQL/MongoDB中迁移至云开发数据库

如何将数据从MySQL/MongoDB中迁移至云开发数据库

时间:2023-05-29 17:06:13浏览次数:57  
标签:MongoDB 至云 导出 JSON 导入 MySQL tcb 数据库

本篇文章从 MySQL、MongoDB 迁移到云开发数据库,其他数据库迁移也都大同小异~

迁移大致分为以下几步?:

  • 从 MySQL、MongoDB 将数据库导出为 JSON 或 CSV 格式
  • 创建一个云开发环境
  • 到云开发数据库新建一个集合
  • 在集合内导入 JSON 或 CSV 格式文件

Mysql迁移到云开发数据库

如何将数据从MySQL/MongoDB中迁移至云开发数据库_MySQL

为了方便,我们使用 Navicat for MySQL进行导出。

导出为 CSV 格式

选中表后进行导出

如何将数据从MySQL/MongoDB中迁移至云开发数据库_JSON_02

类型中选择 csv 格式

如何将数据从MySQL/MongoDB中迁移至云开发数据库_JSON_03

注:在第4步时,我们需要勾选包含列的标题

如何将数据从MySQL/MongoDB中迁移至云开发数据库_数据库_04

导出后的 csv 文件内容 第一行为所有键名,余下的每一行则是与首行键名相对应的键值记录。类似这样?

如何将数据从MySQL/MongoDB中迁移至云开发数据库_数据库_05

导出为 JSON 格式

同样的我们将选中的表进行导出为 json 格式:

如何将数据从MySQL/MongoDB中迁移至云开发数据库_MySQL_06

剩余步骤全部选择默认即可。

导出后的样子?

如何将数据从MySQL/MongoDB中迁移至云开发数据库_JSON_07

我们将数组去除,最后是这样?

如何将数据从MySQL/MongoDB中迁移至云开发数据库_MySQL_08

MongoDB迁移到云开发数据库

如何将数据从MySQL/MongoDB中迁移至云开发数据库_JSON_09

首先我们先启动 mongod 服务:

如何将数据从MySQL/MongoDB中迁移至云开发数据库_MySQL_10

启动后此终端不要关闭。

导出为 CSV 格式

新打开一个终端,输入以下命令

mongoexport -d

复制

数据库 -c 集合名称 --csv -f 导出的列名以,分割 -o 输出路径\输出名字.csv

注:导出 csv 格式时需要指定导出的列 否则会报错:

csv mode requires a field list

导出后的样子:

如何将数据从MySQL/MongoDB中迁移至云开发数据库_JSON_11

导出为 JSON 格式

新打开一个终端,输入以下命令:

mongoexport -d 数据库 -c 集合名称 -o 输出路径\输出名字.json

复制

参数说明:

参数

全称

参考解释



-d





--db <database>





指定数据库名称





-c





--collection <collection>





指定需要导出的集合





-o





--out <file>





指定要导出的文件路径(含文件名)



导出后的样子:

如何将数据从MySQL/MongoDB中迁移至云开发数据库_数据库_12

导入

当我们导出工作准备好之后,就可以进行进行导入啦!

新建云环境

如果已有云环境,可直接跳过这一步打开云开发控制台新建云环境:

新建环境后耐心等待2分钟环境初始化过程。

数据库导入

我们进入云环境后,找到数据库选项,默认有一个 tcb_hello_world 集合,可以把他删掉。

点击添加集合来创建一个集合:

新建之后我们点进去,并进行导入操作:

选择我们之前导出的 CSV 或 JSON 格式文件。

注:这里有两种冲突处理模式:Insert 和 Upsert \\Insert:Insert 模式会在导入时总是插入新记录,同一文件不能存在重复的 _id 字段,或与数据库已有记录相同的 _id 字段。\\Upsert:Upsert 模式会判断有无该条记录,如果有则更新该条记录,否则就插入一条新记录。

简单的说,有时我们并不希望产生冗余重复的数据,那么我们可以使用 Upsert 模式。当然如果希望之间的数据不被覆盖掉,可以选择 Insert 模式。

这里我们选择 Upsert 模式:

如何将数据从MySQL/MongoDB中迁移至云开发数据库_数据库_13

点击导入之后就会发现有内容啦~

如何将数据从MySQL/MongoDB中迁移至云开发数据库_MySQL_14

数据库测试

最后我们来测试一下是否可用。

安装 cloudbase/cli

cloudbase/cli 是一个开源的命令行界面交互工具,用于帮助用户快速、方便的部署项目,管理云开发资源。

npm i -g @cloudbase/cli

复制

云开发项目初始化

安装完成后进行云开发项目初始化tcb init.

$ tcb init
√ 选择关联环境 · 环境名称 - [环境ID:空]
√ 请输入项目名称 · cloudbase-demo
√ 创建项目 cloudbase-demo 成功!

复制

默认会有一个名为 app 的云函数,我们只是测试,所以修改 functions/app/index.js 即可

编写测试数据库代码

将以下代码拷入:

const tcb = require('tcb-admin-node')

tcb.init({
   env: tcb.getCurrentEnv()
})
const db = tcb.database()

exports.main = async (event) => {
   return db.collection('db_remove').get()
}

复制

这里我们用到了 tcb-admin-node ,使用 npm 安装一下即可

npm i --save tcb-admin-node@latest

复制

本地运行云函数

本地运行云函数执行命令:

tcb functions:run --name app

复制

如何将数据从MySQL/MongoDB中迁移至云开发数据库_JSON_15

可以看到成功返回我们导入的数据,具体云函数的写法可以参照云开发文档。

可能发生的问题

1.secure_file_priv 的 Value 为 Null;

如果MySQL采用 into outfile 命令导出可能报错:

[Code: 1290, SQL State: HY000] The MySQL server is running with the –secure-file-priv option so it cannot execute this statement

复制

这是因为我们 secure_file_pri 参数给的权限不足以使我们对数据进行导入导出。

解决办法:打开 MySQL 的配置文件(mysqld.cnf),在其中加入或修改 secure_file_pri="/",表示可以对任何路径进行导入导出操作。

2.JSON 数据不是数组,而是类似 JSON Lines,即各个记录对象之间使用 \n 分隔,而非逗号;

例如,应该写成

{
 "user":"aaa",
 "pwd":43
}
{
 "user":"root",
 "pwd":8
}

复制

而非(注意逗号的区别)

{
 "user":"aaa",
 "pwd":43
},
{
 "user":"root",
 "pwd":8
}

复制

注:像上面例子这样的没有 json 嵌套可以直接采用替换的方式进行将每条数据之间逗号去除,将 },换行{ 替换为 }换行{ 。如果有 json 嵌套可以采用正则的方式进行去除。 我们可以将 json 用数组 ([ ]) 包起来,遍历这个数组,对于每一项使用正则 },$ 匹配到每一项最后的逗号,将其替换为 }。这样就解决了 }, => } 在有 json 嵌套的去掉每条数据之间逗号。

有其他的问题可以参考数据库导入。

标签:MongoDB,至云,导出,JSON,导入,MySQL,tcb,数据库
From: https://blog.51cto.com/IDC02COM/6372688

相关文章

  • mysql 8 修改默认密码并修改密码策略
    1、使用默认密码登陆2、修改默认密码(必须修改默认密码)ALTERUSER'root'@'localhost'IDENTIFIEDBY'Mysql@23';3、修改默认密码策略SHOWVARIABLESLIKE'validate_password%';setglobalvalidate_password.policy=0;setglobalvalidate_password.lengt......
  • mysql之sql查询结果集小数保留
    客户要求,跟金额相关的数据,打印出来要保留两位小数,比如:13.2/13.200要显示为13.20;分析:首先查看数据库中的数据定义,均为decimal(12,2),直接通过数据库查询的结果也会保留两位小数,但是代码处理后,却会忽略掉最后一个“零”位。此处有两个解决方案:一、代码中处理,检测到为金额字......
  • 简单MySQL例子演示MVCC
    一沈秋园,满庭霜落,云烟北桥夜连城MVCC是多版本并发控制的缩写,是一种数据库和编程语言中常用的并发控制方法。它通过保存数据的历史版本,实现对数据库的高效访问。MySQL中MVCC主要是通过行记录中的隐藏字段(隐藏主键row_id,事务IDtrx_id,回滚指针roll_pointer),undo_log(版本链),Rea......
  • docker部署ZeLog项目(Tomcat+MySQL+ZrLog)
    一.docker的安装1.1、在安装dockers之前,建议关闭Centos7.9防火墙[root@192~]#systemctlstopfirewalld[root@192~]#setenforce0 setenforce是Linux的selinux防火墙配置命令执行setenforce0表示临时关闭selinux防火墙1.2、通过yum在线安装Docker服务[root@localhos......
  • mysql快速对比两个数据库表名的差异
    2023年5月29日14:51:02因为正式库老是和测试库有差1-2张表,表也有100张了,排除差异有点麻烦SELECTtable_nameFROMinformation_schema.TABLESWHEREtable_schema='数据库名'这样就得到两个数据库表名列新建两个txt,database.txt和database_test.txt选中两个文件,右键使用T......
  • 玩转MySQL数据库之SQL优化之慢查询
    本系列为:MySQL数据库详解,为千锋资深教学老师独家创作,致力于为大家讲解清晰MySQL数据库相关知识点,含有丰富的代码案例及讲解。如果感觉对大家有帮助的话,可以【关注】持续追更~文末有本文重点总结,技术类问题,也欢迎大家和我们沟通交流!前言从今天开始本系列文章就带各位小伙伴学习......
  • MySQL索引(一)
    雨喝醉了,小路摇摇晃晃,倒在我怀里1,B树和B+树之间的区别是什么?2,Innodb中的B+树有什么特点?3,什么是Innodb中的page?4,Innodb中的B+树是怎么产生的?5,什么是聚簇索引?6,Innodb是如何支持范围查找能走索引的?7,什么是联合索引?对应的B+树是如何产生的?8,什么是最左前缀原则?......
  • mongodb 概念
    下表将帮助您更容易理解Mongo中的一些概念:SQL术语/概念MongoDB术语/概念解释/说明databasedatabase数据库tablecollection数据库表/集合rowdocument数据记录行/文档columnfield数据字段/域indexindex索引tablejoins 表连接,MongoDB不支持primarykeyprimarykey主键,MongoDB自动......
  • mongodb 实例
    packagecom.jaeson.mongodb;importjava.util.ArrayList;importjava.util.List;importorg.bson.Document;importcom.mongodb.Block;importcom.mongodb.MongoClient;importcom.mongodb.MongoCredential;importcom.mongodb.ServerAddress;//importcom.mongod......
  • mysql、sqlserver、oracle分页,java分页统一接口实现
    定义:pageStart起始页,pageEnd终止页,pageSize页面容量oracle分页:rownum numfrom(实际传的SQL)where rownum<=pageEnd)wherenum>=pageStartsqlServer分页:           select*from(select top 页面容量from(select top字段Adesc)astemptable2orderb......