mysql数据转mongodb_将数据库从mysql转换为mongoDb

论坛 期权论坛 脚本     
已经匿名di用户   2022-5-29 19:30   1874   0

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,也可以尝试:

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

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

它支持:

自动更新ID(到BSON ObjectID)

更新引用ID

输入投射值

将表格嵌入其他文档

保存过滤器之前(允许手动更改数据)

还有更多......

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

答案 2 :(得分:5)

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

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

答案 3 :(得分:1)

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

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

答案 4 :(得分:1)

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

在您的数据库上执行codegen。 (http://www.thetrozone.com/php-code-generation-qcubed-eliminating-sql-hassle)

使您的数据库脱离世界其他地方,以便一次只运行一个操作。

现在编写一个脚本,它将读取数据库所有表中的所有行,并在所有对象上使用getJson来获取json。然后,您可以使用数据转换为数组并将其推送到mongoDB!

醇>

答案 5 :(得分:1)

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

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

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

答案 6 :(得分:1)

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

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

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

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

答案 7 :(得分: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);

});

答案 8 :(得分:0)

答案 9 :(得分:0)

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

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

答案 10 :(得分:0)

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

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

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

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

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

答案 11 :(得分:0)

答案 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 /二进制数据,则此方法将不起作用。

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:81
帖子:4969
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP