有没有简单的方法可以将数据库从mysql更改为mongoDB?
或更好的任何人建议我做好教程
答案 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数据库,为您构建一个翻译文件,您所要做的就是映射您希望数据转换的方式。
它支持:
在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)框架。程序将是这样的:
答案 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的配置文件。它非常简单直接。
答案 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 /二进制数据,则此方法将不起作用。