MySQL数据导入到MongoDb教程
1、安装与配置MySQL
- 首先下载MySQL免安装包,版本是mysql-5.6.24。网址是http://dev.mysql.com/downloads/mysql/
- 解压MySQL软件包,得到如下目录:
- 配置MySQL的系统环境变量:
- 打开 Windows 环境变量设置, 新建变量名
MYSQL_HOME
,变量值为MySQL安装目录路径, 这里为D:\DownloadFiles\mysql
- 在环境变量的Path变量中添加
;%MYSQL_HOME%\bin;
- 打开 Windows 环境变量设置, 新建变量名
- MySQL-5.6默认的配置文件是
D:\DownloadFiles\mysql\my-default.ini
如果想要换成你自己的配置文件,待会安装MySQL服务的时候加上参数--defaults-file="my.ini"
- 修改配置文件,这里使用默认的配置文件,所以修改
my-default.ini
如下:
1# For advice on how to change settings please see 2# http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html 3# *** DO NOT EDIT THIS FILE. It's a template which will be copied to the 4# *** default location during install, and will be replaced if you 5# *** upgrade to a newer version of MySQL. 6 7[mysqld] 8 9# Remove leading # and set to the amount of RAM for the most important data 10# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%. 11# innodb_buffer_pool_size = 128M 12 13# Remove leading # to turn on a very important data integrity option: logging 14# changes to the binary log between backups. 15# log_bin 16 17# These are commonly set, remove the # and set as required. 18 basedir = D:\DownloadFiles\mysql 19 datadir = D:\DownloadFiles\mysql\data 20# port = ..... 21# server_id = ..... 22 23 24# Remove leading # to set options mainly useful for reporting servers. 25# The server defaults are faster for transactions and fast SELECTs. 26# Adjust sizes as needed, experiment to find the optimal values. 27# join_buffer_size = 128M 28# sort_buffer_size = 2M 29# read_rnd_buffer_size = 2M 30 31sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
- 以管理员的身份运行CMD,启动命令行窗口,然后安装MySQL服务:
mysqld -install
或mysqld -install MySQL --defaults-file="my.ini"
当提示"Service successfully installed."表示安装成功。
注意:如果使用自己的配置文件参数是
--defaults-file
而不是--default-file
哦!否则会在启动MySQL服务的时候报错: C:\WINDOWS\system32>net start mySQL The MySQL service is starting... The MySQL service could not be started. A system error has occurred. System error 1067 has occurred. The process terminated unexpectedly. 出现这个错误的时候可以去查看MySQL的错误日志,文件位于D:\DownloadFiles\mysql\data中,文件一般是以err为后缀名的文件,里面可以看到启动服务时出错的原因,这样就可以解决了。
- 启动MySQL服务,如果没有启动而贸然连接的话会报错:
ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)
,命令如下:net start mysql
关闭服务:net stop mysql
。如果出现错误:
1发生系统错误 2。 2 3系统找不到指定的文件。
那么是因为注册表的问题,只需要去修改HKEY_LOCAL_MACHINE-SYSTEM-CurrentControlSet-services-mysql-ImagePath
的值,修改为当前你的MySQL的解压缩的路径,当前是D:\DownloadFiles\mysql\data
。
- 登录MySQL
执行
mysql -uroot -p
,之后会出现Enter password:
的时候不需要输入密码,因为是第一次登录,所以==千万不要输入密码,否则之后就会一直错误一直拒绝登录==。登录成功显示:
1D:\DownloadFiles\mysql>mysql -uroot -p 2Enter password: 3Welcome to the MySQL monitor. Commands end with ; or \g. 4Your MySQL connection id is 1 5Server version: 5.6.24 MySQL Community Server (GPL) 6 7Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. 8 9Oracle is a registered trademark of Oracle Corporation and/or its 10affiliates. Other names may be trademarks of their respective 11owners. 12 13Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
- 为root用户设置密码:
set password=password('你的密码');
,成功的话会提示:Query OK, 0 rows affected (0.00 sec)
- 重新刷新权限:
flush privileges;
,成功的话也会提示一样的语句。
2、使用MySQL-Front操作MySQL
- 先连接上MySQL,打开MySQL-Front软件,按快捷键F12打开登录信息,新建一个连接:
填上刚才root用户设置的密码,以及主机名(localhost),然后连接即可,连接上的界面如下:
- 新建一个数据库,如图操作:
然后选择正确的字符集,点击确定就ok了。
- 接着将已存在的.sql的数据库导入到我们新建的数据库中,导入步骤如下:
成功导入之后可以看到结果:
3、启动与配置MongoDB
- 在windows下载MongoDb,之后安装成功,并将MongoDb的安装目录的Bin文件夹配置到环境变量中,如下图:
- 选择一个MongoDb的数据和日志存储目录,比如
E:\MongoDb
,然后在该文件夹下新建一个配置文件:mongodb.config
(名字随便取)。文件简单配置如下:
1dbpath=E:\MongoDb\data 2logpath=E:\MongoDb\log\mongoDbLog.log 3#这个第一次启动的时候不要加这个选项,等到创建管理员用户之后再加进去重新启动数据库 4auth=true
- 启动MongoDb
命令如下:
mongod --config E:\MongoDb\mongodb.config --storageEngine mmapv1
启动成功日志:
注意:后面的存储引擎的配置是因为刚开始采用默认的存储引擎:
wiredTiger
(二者有什么区别暂时没有去深究)的时候,在MongoDb中添加了任何数据在MongoVUE软件中一直看不到,后来网上搜索了一下才发现还有这种坑。然后就指定了mmapv1这种存储引擎。另外如果刚开始使用默认的,后来要切换到新的存储引擎的话,存储数据的文件夹就不能和以前的文件夹一样,需要新建一个。
- 连接MongoDb 接着我们另外开一个CMD窗口,连接MongoDb服务器:
1C:\Windows\system32>mongo 2MongoDB shell version: 3.2.4 3connecting to: test 4>
查看日志如下:
因为此时我们开启了服务器的鉴权配置,但是此时我们没有任何用户密码,并且是没有密码登录进去的,所以日志就会提示红色框中的两行。
这个时候如果你查看数据库信息是会被拒绝的,所以需要注释掉配置文件中的auth=true
这行。
1> show dbs 22016-04-20T20:54:33.201+0800 E QUERY [thread1] Error: listDatabases failed:{ 3 "ok" : 0, 4 "errmsg" : "not authorized on admin to execute command { listDatabases: 1.0 }", 5 "code" : 13 6} : 7_getErrorWithCode@src/mongo/shell/utils.js:23:13 8Mongo.prototype.getDBs@src/mongo/shell/mongo.js:53:1 9shellHelper.show@src/mongo/shell/utils.js:700:19 10shellHelper@src/mongo/shell/utils.js:594:15 11@(shellhelp2):1:1
-
新建一个数据库并添加用户 MongoDb自从2.6版本之后用户管理以及安全性有了很大的提高,能够做到非常细微的安全管理。其中添加用户从命令addUser变成了createUser,并且参数也得到扩展:(也就是多了一个role的参数)
db.createUser({user:'**',pwd:'***',roles:[***,**]})
- 新建一个管理员账户
1> use admin 2switched to db admin 3> db.createUser( 4 { 5 user: "admin", 6 pwd: "123456", 7 roles: 8 [ 9 { 10 role: "userAdminAnyDatabase", 11 db: "admin" 12 } 13 ] 14 } 15 ) 16Successfully added user: { 17 "user" : "admin", 18 "roles" : [ 19 { 20 "role" : "userAdminAnyDatabase", 21 "db" : "admin" 22 } 23 ] 24} 25>
- 新建forum数据库并添加用户 重启MongoDB,键入下面命令,使用管理员权限登录如下:
1> use admin 2switched to db admin 3> db.auth("admin", "123456") 41 5> db.runCommand( 6... { 7... usersInfo:"admin", 8... showPrivileges:true 9... } 10... ) 11{ 12 "users" : [ 13 { 14 "_id" : "admin.admin", 15 "user" : "admin", 16 "db" : "admin", 17 "roles" : [ 18 { 19 "role" : "userAdminAnyDatabase", 20 "db" : "admin" 21 } 22 ], 23 "inheritedRoles" : [ 24 { 25 "role" : "userAdminAnyDatabase", 26 "db" : "admin" 27 } 28 ], 29 "inheritedPrivileges" : [ 30 { 31 "resource" : { 32 "db" : "", 33 "collection" : "" 34 }, 35 "actions" : [ 36 "changeCustomData", 37 "changePassword", 38 "createRole", 39 "createUser", 40 "dropRole", 41 "dropUser", 42 "grantRole", 43 "revokeRole", 44 "viewRole", 45 "viewUser" 46 ] 47 }, 48 { 49 "resource" : { 50 "cluster" : true 51 }, 52 "actions" : [ 53 "authSchemaUpgrade", 54 "invalidateUserCache", 55 "listDatabases" 56 ] 57 }, 58 { 59 "resource" : { 60 "db" : "", 61 "collection" : "system.users" 62 }, 63 "actions" : [ 64 "collStats", 65 "dbHash", 66 "dbStats", 67 "find", 68 "killCursors", 69 "listCollections", 70 "listIndexes", 71 "planCacheRead" 72 ] 73 }, 74 { 75 "resource" : { 76 "db" : "admin", 77 "collection" : "system.users" 78 }, 79 "actions" : [ 80 "collStats", 81 "createIndex", 82 "dbHash", 83 "dbStats", 84 "dropIndex", 85 "find", 86 "killCursors", 87 "listCollections", 88 "listIndexes", 89 "planCacheRead" 90 ] 91 }, 92 { 93 "resource" : { 94 "db" : "admin", 95 "collection" : "system.roles" 96 }, 97 "actions" : [ 98 "collStats", 99 "createIndex", 100 "dbHash", 101 "dbStats", 102 "dropIndex", 103 "find", 104 "killCursors", 105 "listCollections", 106 "listIndexes", 107 "planCacheRead" 108 ] 109 }, 110 { 111 "resource" : { 112 "db" : "admin", 113 "collection" : "system.version" 114 }, 115 "actions" : [ 116 "collStats", 117 "dbHash", 118 "dbStats", 119 "find", 120 "killCursors", 121 "listCollections", 122 "listIndexes", 123 "planCacheRead" 124 ] 125 }, 126 { 127 "resource" : { 128 "db" : "admin", 129 "collection" : "system.new_users" 130 }, 131 "actions" : [ 132 "collStats", 133 "dbHash", 134 "dbStats", 135 "find", 136 "killCursors", 137 "listCollections", 138 "listIndexes", 139 "planCacheRead" 140 ] 141 }, 142 { 143 "resource" : { 144 "db" : "admin", 145 "collection" : "system.backup_users" 146 }, 147 "actions" : [ 148 "collStats", 149 "dbHash", 150 "dbStats", 151 "find", 152 "killCursors", 153 "listCollections", 154 "listIndexes", 155 "planCacheRead" 156 ] 157 } 158 ] 159 } 160 ], 161 "ok" : 1 162} 163>
其次新建一个我们的数据库:use forum
,当你敲入这个命令的时候,如果服务器中没有这个数据库便会新建一个数据库。
接着我们创建一个用户:
1> db.createUser( { "user" : "forum", 2 "pwd": "123456", 3 "customData" : { employeeId: 12345 }, 4 "roles" : [ { role: "dbOwner", db: "forum" }] 5 }, 6 { w: "majority" , wtimeout: 5000 } )
新建成功的提示:
1Successfully added user: { 2 "user" : "forum", 3 "customData" : { 4 "employeeId" : 12345 5 }, 6 "roles" : [ 7 { 8 "role" : "dbOwner", 9 "db" : "forum" 10 } 11 ] 12} 13>
查看系统当前用户:
1> show users 2{ 3 "_id" : "forum.forum", 4 "user" : "forum", 5 "db" : "forum", 6 "customData" : { 7 "employeeId" : 12345 8 }, 9 "roles" : [ 10 { 11 "role" : "dbOwner", 12 "db" : "forum" 13 } 14 ] 15}
这里有一个小问题:如果你是在数据库test下创建一个可以操作forum数据库的用户,那么第三个字段
db
显示的是你当前所在的数据库,我经过试验发现那样的话你在forum数据库认证该用户会出现认证失败的情况,这个问题有待解释!!
备注:
Built-In Roles(内置角色):
1. 数据库用户角色:read、readWrite;
2. 数据库管理角色:dbAdmin、dbOwner、userAdmin;
3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
4. 备份恢复角色:backup、restore;
5. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
6. 超级用户角色:root
// 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
7. 内部角色:__system
- 重新开启鉴权启动数据库 这次重启数据库之后连接的时候就可以采用用户名和密码的方式来连接:
mongo -u forum -p 123456
成功之后可以查看admin这个数据库的集合:
1> use admin 2switched to db admin 3> show collections 4system.indexes 5system.users 6system.version
- 打开MongoVUE连接MongoDb 下载的MongoVUE的软件有点老旧,新版本在官网上一直访问不了,不知道为啥?下载地址: http://download.csdn.net/download/show_594/7484123 打开软件之后新建一个连接:
之后点击红色的框框测试连接,如果这个时候报错误:
1Connection was refused 2Unable to connect to server localhost:27017: Invalid credential for database 'forum'.. 3Type: MongoDB.Driver.MongoConnectionException 4Stack: 在 MongoDB.Driver.Internal.DirectMongoServerProxy.Connect(TimeSpan timeout, ReadPreference readPreference) 5 在 MongoDB.Driver.MongoServer.Connect(TimeSpan timeout) 6 在 MongoDB.Driver.MongoServer.Connect() 7 在 MangoUI.MMongo.Open(Boolean mustWrite) 8 在 MangoUI.MMongo.Open() 9 在 MangoUI.MConnection.get_IsValid() 10 在 MangoUI.WinConnect.btnTest_Click(Object sender, EventArgs e) 11 12 13Invalid credential for database 'forum'. 14Type: MongoDB.Driver.MongoAuthenticationException 15Stack: 在 MongoDB.Driver.Communication.Security.MongoCRAuthenticationProtocol.Authenticate(MongoConnection connection, MongoCredential credential) 16 在 MongoDB.Driver.Communication.Security.Authenticator.Authenticate(MongoCredential credential) 17 在 MongoDB.Driver.Communication.Security.Authenticator.Authenticate() 18 在 MongoDB.Driver.Internal.MongoConnection.Open() 19 在 MongoDB.Driver.Internal.MongoConnection.GetNetworkStream() 20 在 MongoDB.Driver.Internal.MongoConnection.SendMessage(BsonBuffer buffer, Int32 requestId) 21 在 MongoDB.Driver.Internal.MongoConnection.SendMessage(MongoRequestMessage message) 22 在 MongoDB.Driver.Operations.CommandOperation`1.Execute(MongoConnection connection) 23 在 MongoDB.Driver.MongoServerInstance.RunCommandAs[TCommandResult](MongoConnection connection, String databaseName, IMongoCommand command) 24 在 MongoDB.Driver.MongoServerInstance.Ping(MongoConnection connection) 25 在 MongoDB.Driver.MongoServerInstance.Connect() 26 在 MongoDB.Driver.Internal.DirectMongoServerProxy.Connect(TimeSpan timeout, ReadPreference readPreference) 27 28 29Command 'authenticate' failed: auth failed (response: { "ok" : 0.0, "errmsg" : "auth failed", "code" : 18 }) 30Type: MongoDB.Driver.MongoCommandException 31Stack: 在 MongoDB.Driver.Operations.CommandOperation`1.Execute(MongoConnection connection) 32 在 MongoDB.Driver.Communication.Security.MongoCRAuthenticationProtocol.RunCommand(MongoConnection connection, String databaseName, IMongoCommand command) 33 在 MongoDB.Driver.Communication.Security.MongoCRAuthenticationProtocol.Authenticate(MongoConnection connection, MongoCredential credential) 34Inputs:: 35Command: authenticate 36Ok: False 37ErrorMsg: auth failed 38Request: { "authenticate" : 1, "user" : "forum", "nonce" : "a7926dad539b682f", "key" : "0a5b321ba5814aa59f3b428aa8a1845d" } 39Response: { "ok" : 0.0, "errmsg" : "auth failed", "code" : 18 }
并且查看日志有:
1[conn9] authenticate db: forum { authenticate: 1, user: "forum", nonce: "xxx", key: "xxx" } 22016-04-20T22:08:20.965+0800 I ACCESS [conn9] Failed to authenticate forum@forum with mechanism MONGODB-CR: AuthenticationFailed: MONGODB-CR credentials missing in the user document
那么解决方法是:
注意:执行下面的命令的时候因为用户权限不够,所以需要暂时关掉鉴权再重启服务器执行这些命令。
1C:\Windows\system32>mongo 2MongoDB shell version: 3.2.4 3connecting to: test 4> use admin 5switched to db admin 6> 7> 8> db.system.users.remove({}) 9WriteResult({ "nRemoved" : 2 }) 10> db.system.version.remove({}) 11WriteResult({ "nRemoved" : 1 }) 12> db.system.version.insert({ "_id" : "authSchema", "currentVersion" : 3 }) 13WriteResult({ "nInserted" : 1 })
之后就可以连接成功:
原因:MongoDB 3 authentication mechanism has been changed from : MongoDB Challenge and Response (MONGODB-CR) to challenge and response mechanism (SCRAM-SHA-1). You have to delete your created user then change admin.system.version.authSchema to 3 instead of 5. 参考:https://docs.mongodb.org/manual/core/authentication/。
备注:Unable to connect to server localhost:27017: 未将对象引用设置到对象的实例。 因为我们新创建的而且很多数据库都是新的什么也没有,所以一般就是直接置空。如果你确定有相应的用户名密码数据库再填上。
- 导入MySQL数据库 下图是MongoDb数据库,可以看到我们创建的forum数据库以及新建的一条记录:
接下去我们将导入MySQL数据库,如下图所示操作:
接着选择我们需要导入的数据库以及集合,这里以member为例子导入:
导入成功之后我们可以看到forum数据库多了mvforummember这个集合。
- 导出MongoDb的数据
命令格式如下:
mongoexport -d dataname -c collection -o file
所以我们在命令行可以输入:
1E:\MongoDb>mongoexport -d forum -c mvnforummember -o member.json --username forum --password 123456 22016-04-20T22:47:50.050+0800 connected to: localhost 32016-04-20T22:47:50.558+0800 exported 4075 records
如果用的是mondodump则是dump出不一样的数据:
1E:\MongoDb>mongodump -h localhost -d forum -o ./dump/ --username forum --password 123456 22016-04-20T22:44:38.716+0800 writing forum.system.indexes to 32016-04-20T22:44:38.720+0800 done dumping forum.system.indexes (2 documents) 42016-04-20T22:44:38.721+0800 writing forum.forum to 52016-04-20T22:44:38.722+0800 writing forum.mvnforummember to 62016-04-20T22:44:38.723+0800 done dumping forum.forum (1 document) 72016-04-20T22:44:38.790+0800 done dumping forum.mvnforummember (4075 documents)
因为我们要将这些数据导入到Linux系统中的MongoDb服务器,所以需要的json数据。
- 导入Mongo数据到Linux系统中的MongoDb服务器中
命令是:
mongoimport -d forum -c member -f member.json
如果是刚才使用mongodump导出的数据那么需要使用配套的mongostore命令来恢复数据。
mongorestore -d forum -c mvnforummember --dir=./dump/forum/mvnforummember.bson
公众号关注一波~
网站源码:linxiaowu66 · 豆米的博客
Follow:linxiaowu66 · Github
关于评论和留言
如果对本文 MySQL数据导入到MongoDb教程 的内容有疑问,请在下面的评论系统中留言,谢谢。