有没有一种简单的方法可以将数据库从MySQL更改为MongoDB?
或者更好的是,有人建议我一个做这件事的好教程吗?
有没有简单的方法可以从mysql更改数据库到mongoDB?
方法一: 以CSV格式从MySQL导出,然后使用mongoimport工具。但是,在处理日期和二进制数据方面,这种方法并不总是有效。
方法二: 使用您选择的编程语言来编写转移脚本。基本上,您需要编写一个程序,逐个元素从MySQL中读取所有内容,然后将其插入MongoDB。
方法二比方法一更好,但仍然不足够。
MongoDB使用集合而不是表。 MongoDB不支持连接。在我看过的每个数据库中,这意味着您在MongoDB中的数据结构与MySQL中的结构不同。
因此,没有“通用工具”可用于将SQL迁移到MongoDB。在到达MongoDB之前,需要转换您的数据。
这是我使用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);
});
mongoimport -d dbname -u ${MONGO_USERNAME} -p ${MONGO_PASSWORD} --authenticationDatabase admin -c collectionname --jsonArray --file tablename.json
对于这种迁移任务,我比较偏爱TalendOpenStudio。它是基于Eclipse的解决方案,可以以可视化的方式创建数据迁移“脚本”。虽然我不太喜欢可视化编程,但是在这个问题域中,我会例外。
Adrien Mogenet为MongoDB创建了一个MongoDBConnection插件。
如果只是一次性的简单迁移,那么可能会有些大材小用,但它确实是一个很酷的工具。
请注意,如果只是一次性迁移,Nix的建议可能会节省您的时间。
您可以使用QCubed框架(http://qcu.be)来完成此操作。步骤如下: