1. 本际云推荐 - 专业推荐VPS、服务器,IDC点评首页
  2. 云主机运维
  3. VPS运维

以文本形式将MySql数据迁移Mongodb的方法

MySql数据迁移至Mongodb的方法

作为DBA,数据迁移是一项常见任务。但当需要跨不同数据库产品进行数据迁移时,就需要探索各种方法。本文将介绍将MySql数据以文本的形式导入Mongodb的方法。MySql是关系型数据库,将数据以行列形式存储,而Mongodb是非关系型数据库,使用Json文档存储数据。虽然两种数据库都提供了导入导出工具,但还是需要注意细节。

以文本形式将MySql数据迁移Mongodb的方法

字段类型转换

由于Mongodb文档中没有表结构的定义,其中每个字段都具有不同的类型和不同的长度,例如时间类型不同于Mysql中的日期型,所以在导入时需要手动指定每个字段的类型。下面是Mysql和Mongodb之间的字段类型转换列表:

序号 Mysql数据类型 mongoimport数据类型
1 tinyint int32()
2 smallint int32()
3 mediumint int32()
4 integer int32()
5 bigint int64()
6 decimal decimal()
7 float double()
8 double double()
9 char string()
10 varchar string()
11 tinytext string()
12 text string()
13 mediumtext string()
14 longtext string()
15 year string()
16 date date_oracle(YYYY-MM-DD)
17 time string()
18 datetime date_oracle(YYYY-MM-DD               HH24:MI:SS)
19 timestamp date_oracle(YYYY-MM-DD               HH24:MI:SS)
20 bit int32()

Mongoimport命令参数

使用mongoimport命令导入数据时,需注意以下参数:

  • --type: 指定导入文件格式,可选值为CSV、TSV和JSON
  • --fields: 指定Json文档的字段名
  • --columnsHaveTypes: 表示指定每个字段的数据类型,在字段后指定数据类型(例如msisdn.string()
  • --ignoreBlanks: 指定不导入空字段

例如:

mongoimport --db mydb --collection mycollection --type tsv --fields "name.string(),age.int32()" --columnsHaveTypes --file path/to/myfile.tsv --ignoreBlanks

注意,如果使用mysqldump导出的文本文件中含有NULL,可使用select ifnull(column_name, '') into outfile命令进行导出。

如果需要进行大批量的表数据迁移,建议使用shell脚本对原始文本文件进行全量的NULL替换后再导入。另外,如果MySql数据中存在已使用字符串保存的Json文档,建议以子文档的形式存储入Mongodb中,此时可使用Python对文本数据进行转换后写入Mongodb。

原创文章,作者:小编小本本,如若转载,请注明出处:https://www.benjiyun.com/yunzhujiyunwei/vps-yunwei/5984.html