将数据库从mysql转换为mongoDb

时间:2011-06-06 11:46:33

标签: mysql mongodb database

有没有简单的方法可以将数据库从mysql更改为mongoDB?

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

13 个答案:

答案 0 :(得分:48)

  

有没有简单的方法可以将数据库从mysql更改为mongoDB?

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

方法#2 :以您选择的语言编写转移脚本。基本上你编写了一个程序,一次从MySQL读取一个元素,然后将其插入到MongoDB中。

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

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

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

答案 1 :(得分:22)

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

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

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

它支持:

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

http://mongify.com/getting_started.html

了解详情

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

答案 2 :(得分:5)

MongoVUE的免费版本可以自动为您完成此操作。

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

答案 3 :(得分:1)

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

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

对于“简单”的迁移来说可能有些过分,但是ut是一个很酷的工具。

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

答案 4 :(得分:1)

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

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

答案 5 :(得分:1)

这是我为此目的使用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);
});

答案 6 :(得分:1)

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

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

答案 7 :(得分:1)

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

它将在TypeScript中生成MongoDB模式,因此您以后可以在项目中使用它们。每个MySQL表将是一个MongoDB集合,数据类型将被有效地转换为其MongoDB兼容版本。

相同的文档可以在项目的README.md中找到。随时加入并做出贡献。希望在需要时提供帮助。

答案 8 :(得分:0)

如果您正在寻找适合您的工具,祝您好运。

我的建议是选择你选择的语言,然后从一个语言中读取并写入另一个语言。

答案 9 :(得分:0)

如果我可以引用马特布里格斯(它解决了我的问题一次):

  

FAR的驾驶方式最直接。导入/导出工具非常棒,但只有当您将它们作为一对使用时。如果您的表包含日期并且您尝试从数据库导出并导入到mongo中,那么您就是疯狂的。

     

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

     

因此,如果您可以使用它,请将ado.net与mongo驱动程序一起使用。如果没有,我祝你好: - )

     

(请注意,这是来自mongo fanboi)

MySQL与其他SQL数据库非常相似,因此我将您发送到topić: Convert SQL table to mongoDB document

答案 10 :(得分:0)

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

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

答案 11 :(得分:0)

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

答案 12 :(得分:0)

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

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

如有必要,将mysql dump文件加载到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 /二进制数据,则此方法将不起作用。