yii 执行指定迁移文件_Web 云开发 · 云开发数据库迁移指南

4b9f3e55e42fd6d9e718cc530c161e36.png

云开发数据库

云开发为我们提供了一个 JSON 文档型数据库(NoSQL),并集成了 「增删改查」 等 API,操作方便,简单易懂。并且相比传统数据库而言它具有「高性能的数据库读写服务」「可以直接在客户端对数据进行读写」「无需关心数据库实例和环境」

迁移说明

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

迁移大致分为以下几步 :

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

Mysql 迁移到云开发数据库

为了方便,我们使用 navicat for mysql 进行导出

导出为 CSV 格式

选中表后进行导出

47b672a2b7050e0a6727626bfe34d5e8.png

类型中选择 csv 格式

dbbfc1e68c949d4e30120e9a7a38b673.png

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

133a46c16632bfa286513486ac70e747.png

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

04de8ca8d7442aa2ac0fa5a4f0e20761.png

导出为 JSON 格式

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

23d5a791f2e8e16deac7b610fe3849b0.png

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

导出后的亚子

2b976cb79e2cebca44b600705de2fa1e.png

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

30440fded58f5531db313d6cf2f33f42.png

MongoDB 迁移到云开发数据库

首先我们先启动 mongod 服务。。

4ce6ea2451098d0786f823a67a045669.png

启动后此终端不要关闭。

导出为 CSV 格式

新打开一个终端,输入以下命令 mongoexport -d 数据库 -c 集合名称 --csv -f 导出的列名以,分割 -o 输出路径输出名字.csv

注:导出 csv 格式时需要指定导出的列 否则会报错 csv mode requires a field list

导出后的亚子

58f8593d20c04b1b31793d322c96cb44.png

导出为 JSON 格式

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

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

参数说明:

参数全称参考解释-d--db <database>指定数据库名称-c--collection <collection>指定需要导出的集合-o--out <file>指定要导出的文件路径(含文件名)

导出后的亚子

b266ff796e0b8f0450369030a82a9b46.png

导入

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

新建云环境

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

e10e45d17f4684eecbef9a615a4dfb28.png

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

数据库导入

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

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

61821d8bb289194f7e662cf605c278a9.png

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

21c0b5173c113c2369d5c3c298015145.png

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

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

这里我们选择 Upsert 模式

28b30754c0dc164e1014dee7aa4ddf83.png

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

f8c28f77e3eb76261250ad7e24359233.png

数据库测试

最后我们来测试以下是否可用~

安装 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

90394f8323f400b25fe90d634fc4b5aa.png

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

可能发生的问题

  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}

其他问题参考数据库导入

总结

只要掌握导入 CSV、JSON 的格式,就会很简单的进行数据库迁移,还等什么,快行动起来~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值