MongoDB MySQL 数据迁移到 MongoDB CSV --------> CSV


MongoDB的逻辑结构

MySQL      MongoDB

库              库

表         集合

列         数据行 文档


---------------------------
mongodb 安装

1、上传软件
mkdir /data
cd /data
使用xshell上传软件

2、解压软件
tar xf mongodb-linux-x86_64-rhel62-3.2.10.tgz
mv mongodb-linux-x86_64-rhel62-3.2.10 mongodb

3、创建mongodb管理用户
useradd mongod
passwd mongod

4、修改目录授权
chown -R mongod.mongod /data/mongodb

5、切换或登录mongod用户
su - mongod

6、创建mongod的关键目录
mkdir -p /data/data/mongodb/data /data/data/mongodb/log /data/data/mongodb/conf

cd /data/mongodb
ls -l

7、修改环境变量
vim ~/.bash_profile
添加一行:
export PATH=/data/data/mongodb/bin:$PATH
配置生效一下:
source ~/.bash_profile

8、启动mongodb

mongod --logpath=/data/data/mongodb/log/mongodb.log --dbpath=/data/data/mongodb/data/ --fork


9、登录mongodb测试
mongo


++++++++++++++++++++++++++++++
root用户下

vim /etc/rc.local

最后添加如下代码:
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi


vim /etc/security/limits.conf
删掉以下内容行
* - nofile 65535

 


都修改完成后 重启虚拟机

reboot
+++++++++++++++++++++++++++++++
重启后,启动mongodb
su - mongod
mongod --logpath=/data/data/mongodb/log/mongodb.log --dbpath=/data/data/mongodb/data/ --fork

mongodb默认库
系统库
test
admin
local
-----------------
mongodb默认端口号27017
python连接使用import pymongo
-----------------
10、配置文件使用:
vim /data/data/mongodb/conf/mongo.conf
systemLog:
destination: file
path: "/data/data/mongodb/log/mongodb.log"
logAppend: true
storage:
journal:
enabled: true
dbPath: "/data/data/mongodb/data/"
processManagement:
fork: true
net:
port: 27017

11、mongodb的关闭
mongod -f /data/data/mongodb/conf/mongo.conf --shutdown
启动:
mongod -f /data/data/mongodb/conf/mongo.conf

12、帮助的使用

help
KEYWORDS.help()
KEYWORDS.[TAB]


db.help()
db.stu.help()
show
use
db.help()
db.a.help()
rs.help()
sh.help()

-------------------
13、用户管理

{
user: "<name>",
pwd: "<cleartext password>",
customData: { <any information> },
roles: [
{ role: "<role>",
db: "<database>" } | "<role>",
...
]
}

 

 


基本语法说明:

user:用户名
pwd:密码
roles:
role:角色 ------->权限的组
db:对象

role:root,readWrite,read


验证数据库:
创建用户时你use到的库,在将来登录时候,使用以下方式登录,否则是登录不了的


开发用户:
use test

db.createUser(
{
user: "test",
pwd: "123",
roles: [ { role: "readWrite", db: "oldboy" } ]
}
)

 

创建超级管理员:管理所有数据库

$ mongo

use admin

db.createUser(
{
user: "root",
pwd: "root123",
roles: [ { role: "root", db: "admin" } ]
}
)


配置文件中,加入以下配置
vim /data/data/mongodb/conf/mongo.conf
添加两行信息:

security:
authorization: enabled

重启mongodb
mongod -f /data/data/mongodb/conf/mongo.conf --shutdown
mongod -f /data/data/mongodb/conf/mongo.conf


登录验证
开发用户登录:
mongo -utest -p123 10.0.0.200

管理员用户:
mongo -uroot -proot123 10.0.0.200/admin

或者
mongo
use admin
db.auth('root','root123')


查询mongodb中的用户信息
mongo -uroot -proot123 10.0.0.200/admin
db.system.users.find().pretty()



删除用户(root身份登录,use到验证库)

删除用户
# mongo -uroot -proot123 10.0.0.200/admin
use app
db.dropUser("app03")

 

db.createUser(
{
user: "bbs",
pwd: "123",
roles: [ { role: "readWrite", db: "bbs" } ]
}
)

 


----------------------------------------------------
mongodb复制集RS

基本原理:
基本构成是1主2从的结构,自带互相监控投票机制(Raft(MongoDB) Paxos(mysql MGR 用的是变种))
如果发生主库宕机,复制集内部会进行投票选举,选择一个新的主库替代原有主库对外提供服务。同时复制集会自动通知
客户端程序,主库已经发生切换了。应用就会连接到新的主库。


Replcation Set配置过程详解

1、规划
三个以上的mongodb节点(或多实例)
多实例:
(1)多个端口:28017、28018、28019、28020
(2)多套目录:


mkdir -p /data/mongodb/28017/conf /data/mongodb/28017/data /data/mongodb/28017/log
mkdir -p /data/mongodb/28018/conf /data/mongodb/28018/data /data/mongodb/28018/log
mkdir -p /data/mongodb/28019/conf /data/mongodb/28019/data /data/mongodb/28019/log
mkdir -p /data/mongodb/28020/conf /data/mongodb/28020/data /data/mongodb/28020/log


(3) 多套配置文件
/data/mongodb/28017/conf/mongod.conf
/data/mongodb/28018/conf/mongod.conf
/data/mongodb/28019/conf/mongod.conf
/data/mongodb/28020/conf/mongod.conf


(4)配置文件内容
vim /data/mongodb/28017/conf/mongod.conf

systemLog:
destination: file
path: /data/mongodb/28017/log/mongodb.log
logAppend: true
storage:
journal:
enabled: true
dbPath: /data/mongodb/28017/data
directoryPerDB: true
#engine: wiredTiger
wiredTiger:
engineConfig:
cacheSizeGB: 1
directoryForIndexes: true
collectionConfig:
blockCompressor: zlib
indexConfig:
prefixCompression: true
processManagement:
fork: true
net:
port: 28017
replication:
oplogSizeMB: 2048
replSetName: my_repl

 

cp /data/mongodb/28017/conf/mongod.conf /data/mongodb/28018/conf/
cp /data/mongodb/28017/conf/mongod.conf /data/mongodb/28019/conf/
cp /data/mongodb/28017/conf/mongod.conf /data/mongodb/28020/conf/

sed 's#28017#28018#g' /data/mongodb/28018/conf/mongod.conf -i
sed 's#28017#28019#g' /data/mongodb/28019/conf/mongod.conf -i
sed 's#28017#28020#g' /data/mongodb/28020/conf/mongod.conf -i

------------------------------------------------------------


(5)启动多个实例备用
mongod -f /data/mongodb/28017/conf/mongod.conf
mongod -f /data/mongodb/28018/conf/mongod.conf
mongod -f /data/mongodb/28019/conf/mongod.conf
mongod -f /data/mongodb/28020/conf/mongod.conf

netstat -lnp|grep 280  查看端口是280开头的状态

 

2、配置复制集:
(1)1主2从,从库普通从库

mongo --port 28017 admin
config = {_id: 'my_repl', members: [
{_id: 0, host: '10.0.0.200:28017'},
{_id: 1, host: '10.0.0.200:28018'},
{_id: 2, host: '10.0.0.200:28019'}]
}

rs.initiate(config)

 

3、复制集管理操作:
(1)查看复制集状态:
rs.status(); //查看整体复制集状态
rs.isMaster(); // 查看当前是否是主节点


(2)添加删除节点
rs.add("ip:port"); // 新增从节点
rs.remove("ip:port"); // 删除一个节点
rs.addArb("ip:port"); // 新增仲裁节点

--------------------------------
添加 arbiter节点

1、连接到主节点
[mongod@db03 ~]$ mongo --port 28017 admin
2、添加仲裁节点
my_repl:PRIMARY> rs.addArb("10.0.0.200:28020")
3、查看节点状态
my_repl:PRIMARY> rs.isMaster()
{
"hosts" : [
"10.0.0.200:28017",
"10.0.0.200:28018",
"10.0.0.200:28019"
],
"arbiters" : [
"10.0.0.200:28020"
],

-------------------------------
rs.remove("ip:port"); // 删除一个节点

例子:
my_repl:PRIMARY> rs.remove("10.0.0.200:28019");
{ "ok" : 1 }
my_repl:PRIMARY> rs.isMaster()


rs.add("ip:port"); // 新增从节点
例子:
my_repl:PRIMARY> rs.add("10.0.0.200:28019")
{ "ok" : 1 }
my_repl:PRIMARY> rs.isMaster()

---------------------------

注:
添加特殊节点时,
1>可以在搭建过程中设置特殊节点
2>可以通过修改配置的方式将普通从节点设置为特殊节点
/*找到需要改为延迟性同步的数组号*/;

特殊节点:

arbiter节点:主要负责选主过程中的投票,但是不存储任何数据,也不提供任何服务
hidden节点:隐藏节点,不参与选主,也不对外提供服务。
delay节点:延时节点,数据落后于主库一段时间,因为数据是延时的,也不应该提供服务或参与选主,
所以通常会配合hidden(隐藏)

一般情况下会将delay+hidden一起配置使用

(3)配置延时节点(一般延时节点也配置成hidden)

cfg=rs.conf()
cfg.members[1].priority=0
cfg.members[1].hidden=true
cfg.members[1].slaveDelay=120
rs.reconfig(cfg)

 

 

------------目前状态-------------------

我的需求是:把28019设置为hidden和delay

my_repl:PRIMARY> rs.status()
{

"members" : [
{
"_id" : 0,
"name" : "10.0.0.200:28017",
},
{
"_id" : 1,
"name" : "10.0.0.200:28018",

},
{
"_id" : 3,
"name" : "10.0.0.200:28020",

},
{
"_id" : 4,
"name" : "10.0.0.200:28019",

}


cfg=rs.conf()
cfg.members[3].priority=0
cfg.members[3].hidden=true
cfg.members[3].slaveDelay=120
rs.reconfig(cfg)

---------------------------
取消以上配置
cfg=rs.conf()
cfg.members[3].priority=1
cfg.members[3].hidden=false
cfg.members[3].slaveDelay=0
rs.reconfig(cfg)

--------------------------------
配置成功后,通过以下命令查询配置后的属性
rs.conf();

 

 


---------------------------------------------------------------------
分片集群规划及配置:

---1、规划:
mongos:
port 38017
dir:/data/mongodb/38017/conf /data/mongodb/38017/log /data/mongodb/38017/data

confdb:
port:38018,38019,38020
replSetName: configReplSet
clusterRole: configsvr
dir:
/data/mongodb/38018/conf /data/mongodb/38018/log /data/mongodb/38018/data
/data/mongodb/38019/conf /data/mongodb/38019/log /data/mongodb/38019/data
/data/mongodb/38020/conf /data/mongodb/38020/log /data/mongodb/38020/data



shard1:
port:38021,38022,38023
replSetName: sh1
clusterRole: shardsvr
dir:
/data/mongodb/38021/conf /data/mongodb/38021/log /data/mongodb/38021/data
/data/mongodb/38022/conf /data/mongodb/38022/log /data/mongodb/38022/data
/data/mongodb/38023/conf /data/mongodb/38023/log /data/mongodb/38023/data


shard2:
port:38024,38025,38026
replSetName: sh2
clusterRole: shardsvr
dir:
/data/mongodb/38024/conf /data/mongodb/38024/log /data/mongodb/38024/data
/data/mongodb/38025/conf /data/mongodb/38025/log /data/mongodb/38025/data
/data/mongodb/38026/conf /data/mongodb/38026/log /data/mongodb/38026/data

--------配置过程-----------------------

---2、shard复制集配置:
2.1目录创建:
mkdir -p /data/mongodb/38021/conf /data/mongodb/38021/log /data/mongodb/38021/data
mkdir -p /data/mongodb/38022/conf /data/mongodb/38022/log /data/mongodb/38022/data
mkdir -p /data/mongodb/38023/conf /data/mongodb/38023/log /data/mongodb/38023/data
mkdir -p /data/mongodb/38024/conf /data/mongodb/38024/log /data/mongodb/38024/data
mkdir -p /data/mongodb/38025/conf /data/mongodb/38025/log /data/mongodb/38025/data
mkdir -p /data/mongodb/38026/conf /data/mongodb/38026/log /data/mongodb/38026/data

2.2修改配置文件:

sh1:
vi /data/mongodb/38021/conf/mongodb.conf
===============
根据需求修改相应参数:
systemLog:
destination: file
path: /data/mongodb/38021/log/mongodb.log
logAppend: true
storage:
journal:
enabled: true
dbPath: /data/mongodb/38021/data
directoryPerDB: true
#engine: wiredTiger
wiredTiger:
engineConfig:
cacheSizeGB: 1
directoryForIndexes: true
collectionConfig:
blockCompressor: zlib
indexConfig:
prefixCompression: true
net:
port: 38021
replication:
oplogSizeMB: 2048
replSetName: sh1
sharding:
clusterRole: shardsvr
processManagement:
fork: true

===============
cp /data/mongodb/38021/conf/mongodb.conf /data/mongodb/38022/conf/
cp /data/mongodb/38021/conf/mongodb.conf /data/mongodb/38023/conf/

sed 's#38021#38022#g' /data/mongodb/38022/conf/mongodb.conf -i
sed 's#38021#38023#g' /data/mongodb/38023/conf/mongodb.conf -i

sh2:
vi /data/mongodb/38024/conf/mongodb.conf
========
根据需求修改相应参数:
systemLog:
destination: file
path: /data/mongodb/38024/log/mongodb.log
logAppend: true
storage:
journal:
enabled: true
dbPath: /data/mongodb/38024/data
directoryPerDB: true
wiredTiger:
engineConfig:
cacheSizeGB: 1
directoryForIndexes: true
collectionConfig:
blockCompressor: zlib
indexConfig:
prefixCompression: true
net:
port: 38024
replication:
oplogSizeMB: 2048
replSetName: sh2
sharding:
clusterRole: shardsvr
processManagement:
fork: true
========


cp /data/mongodb/38024/conf/mongodb.conf /data/mongodb/38025/conf/
cp /data/mongodb/38024/conf/mongodb.conf /data/mongodb/38026/conf/

sed 's#38024#38025#g' /data/mongodb/38025/conf/mongodb.conf -i
sed 's#38024#38026#g' /data/mongodb/38026/conf/mongodb.conf -i


2.3启动所有节点,并搭建复制集:

mongod -f /data/mongodb/38021/conf/mongodb.conf
mongod -f /data/mongodb/38022/conf/mongodb.conf
mongod -f /data/mongodb/38023/conf/mongodb.conf
mongod -f /data/mongodb/38024/conf/mongodb.conf
mongod -f /data/mongodb/38025/conf/mongodb.conf
mongod -f /data/mongodb/38026/conf/mongodb.conf

 

mongo --port 38021

use admin
config = {_id: 'sh1', members: [
{_id: 0, host: '10.0.0.200:38021'},
{_id: 1, host: '10.0.0.200:38022'},
{_id: 2, host: '10.0.0.200:38023',"arbiterOnly":true}]
}

> rs.initiate(config)


mongo --port 38024
use admin
config = {_id: 'sh2', members: [
{_id: 0, host: '10.0.0.200:38024'},
{_id: 1, host: '10.0.0.200:38025'},
{_id: 2, host: '10.0.0.200:38026',"arbiterOnly":true}]
}

> rs.initiate(config)

=-=----=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
---3、config节点配置:

3.1目录创建:
mkdir -p /data/mongodb/38018/conf /data/mongodb/38018/log /data/mongodb/38018/data
mkdir -p /data/mongodb/38019/conf /data/mongodb/38019/log /data/mongodb/38019/data
mkdir -p /data/mongodb/38020/conf /data/mongodb/38020/log /data/mongodb/38020/data

3.2修改配置文件:

[mongod@server1 ~]$ vi /data/mongodb/38018/conf/mongodb.conf

systemLog:
destination: file
path: /data/mongodb/38018/log/mongodb.conf
logAppend: true
storage:
journal:
enabled: true
dbPath: /data/mongodb/38018/data
directoryPerDB: true
#engine: wiredTiger
wiredTiger:
engineConfig:
cacheSizeGB: 1
directoryForIndexes: true
collectionConfig:
blockCompressor: zlib
indexConfig:
prefixCompression: true
net:
port: 38018
replication:
oplogSizeMB: 2048
replSetName: configReplSet
sharding:
clusterRole: configsvr
processManagement:
fork: true


cp /data/mongodb/38018/conf/mongodb.conf /data/mongodb/38019/conf/
cp /data/mongodb/38018/conf/mongodb.conf /data/mongodb/38020/conf/

sed 's#38018#38019#g' /data/mongodb/38019/conf/mongodb.conf -i
sed 's#38018#38020#g' /data/mongodb/38020/conf/mongodb.conf -i


3.3启动节点,并配置复制集


mongod -f /data/mongodb/38018/conf/mongodb.conf
mongod -f /data/mongodb/38019/conf/mongodb.conf
mongod -f /data/mongodb/38020/conf/mongodb.conf


mongo --port 38018
use admin

config = {_id: 'configReplSet', members: [
{_id: 0, host: '10.0.0.200:38018'},
{_id: 1, host: '10.0.0.200:38019'},
{_id: 2, host: '10.0.0.200:38020'}]
}

> rs.initiate(config)


注:configserver 可以是一个节点,官方建议复制集。configserver不能有arbiter。
新版本中,要求必须是复制集。
注:mongodb 3.4之后,虽然要求config server为replica set,但是不支持arbiter
=============================================================================

---4、mongos节点配置:
4.1创建目录:

mkdir -p /data/mongodb/38017/conf /data/mongodb/38017/log

4.2配置文件:


vi /data/mongodb/38017/conf/mongos.conf
systemLog:
destination: file
path: /data/mongodb/38017/log/mongos.log
logAppend: true
net:
port: 38017
sharding:
configDB: configReplSet/10.0.0.200:38018,10.0.0.200:38019,10.0.0.200:38020
processManagement:
fork: true

4.3启动mongos

[mongod@server1 ~]$ mongos -f /data/mongodb/38017/conf/mongos.conf





---5、分片集群操作:

连接到其中一个mongos(10.0.0.200),做以下配置
(1)连接到mongs的admin数据库

$ mongo 10.0.0.200:38017/admin

(2)添加分片
> db.runCommand( { addshard : "sh1/10.0.0.200:38021,10.0.0.200:38022,10.0.0.200:38023",name:"shard1"} )

> db.runCommand( { addshard : "sh2/10.0.0.200:38024,10.0.0.200:38025,10.0.0.200:38026",name:"shard2"} )


(3)列出分片
mongos> db.runCommand( { listshards : 1 } )


(4)整体状态查看
mongos> sh.status();


--------------------------使用分片集群------------------------------------------

test库下的vast大表进行手工分片

1、激活数据库分片功能

mongo --port 38017 admin

admin> ( { enablesharding : "数据库名称" } )

eg:
admin> db.runCommand( { enablesharding : "test" } )

2、指定分片建对集合分片
eg:范围片键
--创建索引
use test
> db.vast.ensureIndex( { id: 1 } )

--开启分片
use admin
> db.runCommand( { shardcollection : "test.vast",key : {id: 1} } )

3、集合分片验证
admin> use test

test> for(i=1;i<500000;i++){ db.vast.insert({"id":i,"name":"shenzheng","age":70,"date":new Date()}); }

test> db.vast.stats()

4、分片结果测试

shard1:
mongo --port 38021
db.vast.count();


shard2:
mongo --port 38024
db.vast.count();

 

----------------------------
分片键
--范围片键
admin> sh.shardCollection("数据库名称.集合名称",key : {分片键: 1} )

admin> db.runCommand( { shardcollection : "数据库名称.集合名称",key : {分片键: 1} } )

eg:
admin > sh.shardCollection("test.vast",key : {id: 1} )

admin> db.runCommand( { shardcollection : "test.vast",key : {id: 1} } )

--哈希片键
admin > sh.shardCollection( "数据库名.集合名", { 片键: "hashed" } )

 

----------------------------------------------------
4、Hash分片例子:
对oldboy库下的vast大表进行hash

创建哈希索引

(1)对于oldboy开启分片功能
use admin
admin> db.runCommand( { enablesharding : "oldboy" } )

(2)对于oldboy库下的vast表建立hash索引
use oldboy
oldboy> db.vast.ensureIndex( { id: "hashed" } )
(3)开启分片
use admin
admin > sh.shardCollection( "oldboy.vast", { id: "hashed" } )

(4)录入10w行数据测试
use oldboy
for(i=1;i<100000;i++){ db.vast.insert({"id":i,"name":"shenzheng","age":70,"date":new Date()}); }

(5)hash分片结果测试
mongo --port 38021
use oldboy
db.vast.count();

mongo --port 38024
use oldboy
db.vast.count();

---------------------------

5、判断是否Shard集群
admin> db.runCommand({ isdbgrid : 1})

6、列出所有分片信息
admin> db.runCommand({ listshards : 1})

7、列出开启分片的数据库
admin> use config

config> db.databases.find( { "partitioned": true } )
或者:
config> db.databases.find() //列出所有数据库分片情况

8、查看分片的片键
config> db.collections.find().pretty()
{
"_id" : "test.vast",
"lastmodEpoch" : ObjectId("58a599f19c898bbfb818b63c"),
"lastmod" : ISODate("1970-02-19T17:02:47.296Z"),
"dropped" : false,
"key" : {
"id" : 1
},
"unique" : false
}

9、查看分片的详细信息
admin> db.printShardingStatus()

admin> sh.status()

10、删除分片节点
(1)确认blance是否在工作
sh.getBalancerState()


(2)删除shard2节点
mongos> db.runCommand( { removeShard: "shard2" } )

 


---------------------------------------------
MySQL 数据迁移到 MongoDB
CSV --------> CSV

 

1、了解mongodb的csv长什么样?

登录Mongodb

 su - mongod
mongod --logpath=/data/mongodb/log/mongodb.log --dbpath=/data/mongodb/data/ --fork

(1)模拟数据
mongo -uroot -proot123 10.0.0.200/admin

use test
for(i=0;i<200;i++){ db.vast.insert({"id":i,"name":"shenzheng","age":70,"date":new Date()}); }

(2)导出CSV格式文件
mongoexport -uroot -proot123 --authenticationDatabase admin --port 27017 -d test -c vast --type=csv -f id,name,age,date -o /data/mongodb/vast.csv

----------------------------------------   
id,name,age,date
0,shenzheng,70,2018-07-18T07:34:14.021Z
1,shenzheng,70,2018-07-18T07:34:14.050Z
2,shenzheng,70,2018-07-18T07:34:14.052Z
----------------------------------------

2、了解MySQL 的CSV长什么样?
++++++++
select * from city into outfile '/tmp/city.csv';
++++++++


3、将MySQL数据导出为MongoDB模式的CSV
select * from world.city into outfile 'd:\city.csv' fields terminated by ',';
编辑CSV格式,加入第一行,列名字


4、mongodb导入CSV文件
mongoimport -uroot -proot123 --authenticationDatabase admin --port 27017 -d world -c city --type=csv --headerline --file /data/city.csv

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值