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

字段类型转换
由于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
