【问题标题】:converting database from mysql to mongoDb将数据库从 mysql 转换为 mongoDb
【发布时间】:2019-08-02 01:28:09
【问题描述】:

有没有什么简单的方法可以把数据库从mysql改成mongoDB?

或者更好的任何人建议我做它的好教程

【问题讨论】:

  • 您是在寻找传输数据的流程,还是要改变方法?
  • 处理过程 :)我已经有大约 50 万条记录
  • 您需要考虑将数据从 mysql 存储到 mongodb 的最佳方式。然后自己在任何语言上写映射
  • MySQL export to MongoDB的可能重复

标签: mysql mongodb database


【解决方案1】:

有没有什么简单的方法可以把数据库从mysql改成mongoDB?

方法#1:以CSV格式从MySQL导出,然后使用mongoimport tool。但是,这在处理二进制数据的日期方面并不总是有效。

方法#2:用您选择的语言编写传输脚本。基本上,您编写一个程序,一次从 MySQL 读取一个元素,然后将其插入 MongoDB。

方法#2优于#1,但仍然不够。

MongoDB 使用集合而不是表。 MongoDB 不支持连接。在我见过的每个数据库中,这意味着您在 MongoDB 中的数据结构与 MySQL 中的结构不同。

因此,没有将 SQL 移植到 MongoDB 的“通用工具”。您的数据需要在到达 MongoDB 之前进行转换。

【讨论】:

  • 是否可以使用 ORM 框架将 SQL 数据映射到 Objects 和 collections 中,然后将这些数据存储到 MongoDB?...这样就可以解决 Joins 的问题
  • 这正是你应该做的,但它绝对不是原始问题中提出的“容易”。
  • 是的,我需要将我的 mysql 数据库转换为 mongoDB,我的数据库中有更多数据。有没有nodejs脚本来转换数据库?
  • @GaneSH,你有没有得到任何node js脚本来转换数据库?
【解决方案2】:

如果您使用 Ruby,也可以尝试:Mongify

这是一种将数据从 RDBS 转换为 MongoDB 而不会丢失任何内容的超级简单方法。

Mongify 将读取您的 mysql 数据库,为您构建一个翻译文件,您所要做的就是映射您希望如何转换数据。

它支持:

  • 自动更新 ID(到 BSON ObjectID)
  • 更新引用 ID
  • 类型转换值
  • 将表格嵌入到其他文档中
  • 保存过滤器之前(允许手动更改数据)
  • 还有更多...

阅读更多信息:http://mongify.com/getting_started.html

主页上还有一个 5 分钟的短视频,向您展示它是多么容易。

【讨论】:

  • 嘿编码容器。简而言之,是的,它可以与 MySQL 一起使用,但是它可以使用 RUBY(编程语言)。在使用 Mongify 之前,您需要设置系统来运行 ruby​​。
  • 如果您想摆脱 WordPress MySQL 环境并进入 mongoDB/Angular 堆栈,您知道这是如何工作的吗?
  • 是的,应该可以。但是,您需要 Ruby 才能使用 Mongify。一旦一切都转移到 MongoDB,你就不再需要 ruby​​。
  • 但是使用 mongify,你不能将 mysql 中的日期格式转换为 mongo 中的日期格式,而且二进制文件也不起作用,二进制文件将被转换为字符串。如果 mysql 将 0 存储为二进制,则 mongo 中的等价物将是 '\u0000'
  • @RKA,Mongify 支持将值修改为您想要的任何值(只要 mognodb 驱动程序支持它)。请阅读文档
【解决方案3】:

为了这个目的,我使用 Node.js 做了以下工作:

var mysql = require('mysql');
var MongoClient = require('mongodb').MongoClient;

function getMysqlTables(mysqlConnection, callback) {
    mysqlConnection.query("show full tables where Table_Type = 'BASE TABLE';", function(error, results, fields) {
        if (error) {
            callback(error);
        } else {
            var tables = [];
            results.forEach(function (row) {
                for (var key in row) {
                    if (row.hasOwnProperty(key)) {
                        if(key.startsWith('Tables_in')) {
                            tables.push(row[key]);
                        }
                    }
                }
            });
            callback(null, tables);
        }
    });

}

function tableToCollection(mysqlConnection, tableName, mongoCollection, callback) {
    var sql = 'SELECT * FROM ' + tableName + ';';
    mysqlConnection.query(sql, function (error, results, fields) {
        if (error) {
            callback(error);
        } else {
            if (results.length > 0) {
                mongoCollection.insertMany(results, {}, function (error) {
                    if (error) {
                        callback(error);
                    } else {
                        callback(null);
                    }
                });
            } else {
                callback(null);
            }
        }
    });
}

MongoClient.connect("mongodb://localhost:27017/importedDb", function (error, db) {
    if (error) throw error;

    var MysqlCon = mysql.createConnection({
        host: 'localhost',
        user: 'root',
        password: 'root',
        port: 8889,
        database: 'dbToExport'
    });

    MysqlCon.connect();

    var jobs = 0;

    getMysqlTables(MysqlCon, function(error, tables) {
        tables.forEach(function(table) {
            var collection = db.collection(table);
            ++jobs;
            tableToCollection(MysqlCon, table, collection, function(error) {
                if (error) throw error;
                --jobs;
            });
        })
    });

    // Waiting for all jobs to complete before closing databases connections.
    var interval = setInterval(function() {
        if(jobs<=0) {
            clearInterval(interval);
            console.log('done!');
            db.close();
            MysqlCon.end();
        }
    }, 300);
});

【讨论】:

  • @benkadmin 帮助我解决当我使用此代码转换我的数据库时出现的问题我在 sql 中有 136 个表但如果我运行此文件我的桌面无法转换 69该桌面无法工作并且程序终止后的表。
【解决方案4】:

MongoVUE 的免费版可以自动为您完成这项工作。

它可以连接到两个数据库并执行导入

【讨论】:

  • 链接已损坏。
【解决方案5】:

我认为最简单的方法之一是将 MySQL 数据库导出为 JSON,然后使用 mongorestore 将其导入 MongoDB 数据库。

第 1 步:将 MySQL 数据库导出为 JSON

如有必要,将 mysql 转储文件加载到 MySQL 数据库中

打开 MySQL Workbench 并连接到 MySQL 数据库

转到架构查看器 > 选择数据库 > 表 > 右键单击​​要导出的表的名称

选择“表数据导出向导”

将文件格式设置为 .json 并输入文件名,例如 tablename.json

注意:所有表格都需要单独导出

第 2 步:使用 mongorestore 命令将 JSON 文件导入 MongoDB

mongorestore 命令应该从服务器命令行(不是 mongo shell)运行

请注意,您可能需要提供身份验证详细信息以及 --jsonArray 选项,请参阅mongorestore docs 了解更多信息

mongoimport -d dbname -u ${MONGO_USERNAME} -p ${MONGO_PASSWORD} --authenticationDatabase admin -c collectionname --jsonArray --file tablename.json

注意:如果原始 MySQL 数据库有 BLOB/二进制数据,此方法将不起作用。

【讨论】:

    【解决方案6】:

    对于这类迁移工作,我有点偏爱TalendOpenStudio。它是一个基于 Eclipse 的解决方案,以可视化的方式创建数据迁移“脚本”。我不喜欢可视化编程,但这是一个我例外的问题域。

    Adrien Mogenet 为 mongodb 创建了一个 MongoDBConnection 插件。

    对于“简单”的迁移来说,这可能是矫枉过正,但 ut 是一个很酷的工具。

    但是请注意,如果是一次性迁移,Nix 的建议可能会节省您的时间。

    【讨论】:

      【解决方案7】:

      您可以为此使用 QCubed (http://qcu.be) 框架。该过程将是这样的:

      1. 安装 QCubed (http://www.thetrozone.com/qcubed-installation)
      2. 在您的数据库上执行代码生成。 (http://www.thetrozone.com/php-code-generation-qcubed-eliminating-sql-hassle)
      3. 使您的数据库与世界其他地方脱机,这样一次只运行一个操作。
      4. 现在编写一个脚本,该脚本将从数据库的所有表中读取所有行,并在所有对象上使用 getJson 来获取 json。然后你可以使用数据转换为数组并将其推送到 mongoDB 中!

      【讨论】:

        【解决方案8】:

        如果有人仍在寻找解决方案,我发现最简单的方法是编写一个 PHP 脚本来连接到您的 SQL DB,使用通常的 Select 语句检索您想要的信息,使用 PHP JSON 将信息转换为 JSON对函数进行编码并简单地将结果输出到文件或直接输出到 MongoDB。它实际上非常简单直接,唯一要做的就是根据 Json 验证器仔细检查您的输出,您可能必须使用诸如 explode 之类的函数来替换某些字符和符号以使其有效。我之前做过这个,但是我目前手头没有脚本,但据我所知,它实际上是半页代码。

        哦,还记得 Mongo 是一个文档存储,因此需要一些数据映射才能使其被 mongo 接受。

        【讨论】:

          【解决方案9】:

          对于那些遇到同样问题的人,您可以查看此Github project。这是一项正在进行的开发,它将帮助您通过简单地运行一个简单的命令将数据从 MySQL 数据库迁移到 MongoDB。

          它将在 TypeScript 中生成 MongoDB 模式,以便您稍后在项目中使用它们。每个 MySQL 表都将是一个 MongoDB 集合,并且数据类型将有效地转换为它们的 MongoDB 兼容表。

          可以在项目的README.md 中找到相同的文档。随意进来并做出贡献。如果需要,愿意提供帮助。

          【讨论】:

            【解决方案10】:

            如果您正在寻找一种工具来为您做这件事,祝您好运。

            我的建议是选择您选择的语言,从一种语言读取并写入另一种语言。

            【讨论】:

            • 我正在使用 php 作为后端程序。
            【解决方案11】:

            如果我能引用马特布里格斯的话(它曾经解决了我的问题):

            驱动方式是 FAR 最直接的方式。导入/导出工具非常棒,但前提是您将它​​们成对使用。如果您的表包含日期并且您尝试从 db 导出并导入到 mongo,那么您将大吃一惊。

            你也很幸运,在 c# 中。我们正在使用 ruby​​,并且有一个 3200 万行的表我们迁移到了 mongo。我们的最终解决方案是在 postgres 中制作一个疯狂的 sql 语句,该语句输出 json(包括一些使日期正常运行的非常笨拙的东西)并将命令行上该查询的输出通过管道传输到 mongoimport。花了令人难以置信的令人沮丧的一天来写,而且不是那种可以真正改变的东西。

            因此,如果您可以摆脱它,请使用带有 mongo 驱动程序的 ado.net。如果没有,我祝你好运:-)

            (请注意,这是来自一个完全的 mongo fanboi)

            MySQL 与其他 SQL 数据库非常相似,所以我将您发送到主题: Convert SQL table to mongoDB document

            【讨论】:

              【解决方案12】:

              您可以使用以下项目。它需要编写类似solr的配置文件。非常简单直接。

              http://code.google.com/p/sql-to-mongo-importer/

              【讨论】:

                【解决方案13】:

                试试这个: 使用简单的 r2n 映射将 MySQL 转储自动转换为 Mongo 更新。 https://github.com/virtimus/mysql2mongo

                【讨论】:

                  猜你喜欢
                  • 2018-01-25
                  • 2012-04-15
                  • 1970-01-01
                  • 1970-01-01
                  • 2010-09-11
                  • 2012-06-19
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多