MongoDB 基础
常见操作
db.tests.update({},{$set: {itemCode:"fntv_xfzf_flfgk"}}, {multi: true}) //给集合中所有对象添加同一个字段
mongoexport --port 28017 -d Ytv -c tests -o ./list.json //从数据库中导出数据
mongoimport -d test -c lists ./data.js --drop //导入数据
mongodump -h dbhost -d dbname -o dbdirectory //备份数据库
mongodump -h localhost:28017 -d Yss -o yss //备份数据库 示例
mongo localhost:28017 //启动数据库
mongod --config /www/database/MongoDB/db1/config/mongo.conf //服务器启动数据库
mongorestore -h 127.0.0.1:27017 -d Yss ./yss/Yss //服务器上恢复备份数据
数据库迁移
迁移使用 备份->恢复备份 的方式实现。即在阿里云服务器上备份腾讯云服务器的数据,之后用这个数据恢复数据即可完成数据库迁移。
将腾讯云上的Blog数据库备份到阿里云服务器(此处需要腾讯云服务器安全组开放27017端口访问权限)
mongodump -h xxx.xx.xxx.xx -d Blog -o /var/lib/mongodump // ip 为腾讯云的 ip
再运行恢复指令将数据库从备份文件恢复
mongorestore -h localhost -d Blog /var/lib/mongodump/Blog
使用 Robo 3T 查看阿里云数据库,数据迁移成功。
注意:迁移成功后记得关闭安全组 27017 端口所有 ip 可以访问的权限。
数据库添加用户、开启验证
// 超级管理员
use admin
db.createUser({
user: 'root', // 用户名
pwd: 'password', // 密码
roles:[{
role: 'root',
db: 'admin'
}]
})
use blog // 创建数据库 blog,并切换到 blog
// blog管理员,用于创建集合,管理数据库,添加删除blog用户等的操作
db.createUser({
user: 'blogadmin',
pwd: 'password',
roles:[{
role: 'dbOwner',
db: 'blog'
}]
})
// blog用户,用户端用于连接数据库的用户,只有读写操作的权限
db.createUser({
user: 'blog',
pwd: 'password',
roles:[{
role: 'readWrite',
db: 'blog'
}]
})
启动数据库
mongod --dbpath c:\database //数据库开机
mongod --config D:\database\MongoDB\db1\config\mongo.conf //启动MongoDB
window系统中可以将它注册为服务,随系统启动,以管理员运行控制台(cmd)输入
mongod --config D:\Mongodb\conf\mongo.config --install --serviceName "MongoDB"
或者
mongod --install -f D:\mongodb\conf\mongo.conf //注册系统服务
启动MongoDB的方式有两种
- 1.直接启动,配置参数写在命令中:
mongod --dbpath=data/db --logpath=log/log.txt --fork
- 2.以配置文件启动:
mongod -f /etc/mongod.conf
或
mongod --config /etc/mongod.conf
Mongo shell 基本命令
mongo 进入mongodb的命令行界面
show dbs 查询所有的数据库
use test 创建库(或使用数据库)
show collections 查看test数据库中的集合
db.user.insert({name:"林场处"}) 插入数据
db.user.find() 查询所有文档
db.user.insertOne({name:"admin",passwprld:1123}) 只插入一条数据
配置复制集replset
Mongodb的replication主要有两种:主从和副本集(replica set)。主从的原理和mysql类似,主节点记录在其上的所有操作oplog,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点一致。现在mongodb官方建议用副本集替代主从复制,现在我们来了解下如何配置复制集。
- 主从配置信息,连接任意一个服务器,初始化命令只执行一次即可
config={
_id:"iCopy",
members:[
{_id:0,host:"127.0.0.1:27017"},
{_id:1,host:"127.0.0.1:27018"},
{_id:2,host:"127.0.0.1:27019",arbiterOnly:true}
]
}
rs.initiate(config) //初始化复制集
- 如果想修改复制集的配置,也可以使用rs.reconfig(config,{"force":true})强制更新配置
var config = rs.config()
config.members[0].host = '172.18.169.230:27017'
config.members[1].host = '172.18.169.232:27017'
config.members[2].host = '172.18.169.232:27018'
rs.reconfig(config,{"force":true})
- secondary节点默认是不可读的,如果需要读secondary节点,需要在secondary节点上输入命令
db.getMongo().setSlaveOk()
// 或者
rs.slaveOk()
只是每次重新登录secondary节点都需要输入此命令
- 顺便贴一下mongoose连接复制集的option
options = {
autoReconnect: true,
poolSize: 8,
promiseLibrary: global.Promise,
useMongoClient: true,
keepAlive: 1,
connectTimeoutMS: 30000,
reconnectTries: 100,
replicaSet: 'COOL',
readPreference: 'secondaryPreferred',
}
- 测试数据同步
进入任何一个从节点,查看数据是否被同步
use test
rs.slaveOk()
db.test.find()