数据库基础知识

241 阅读3分钟

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()

MySQL 基础