数据库知识

336 阅读1分钟

MongoDB

增删改查

增:给集合中所有对象添加同一个字段

db.tests.update({},{$set: {itemCode:"fntv_xfzf_flfgk"}}, {multi: true})

导出数据:从数据库中导出集合数据

 mongoexport --port 28017 -d Ytv -c tests -o ./list.json

数据库基本操作

启动数据库

mongod --dbpath c:\database  //数据库开机
mongoimport -d test -c lists ./data.js --drop //导入数据
mongoexport -d test -c lists -o ./模拟数据.js //导出数据
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}) 只插入一条数据
  • 数据库配置文件
#数据库路径
dbpath=D:\database\MongoDB\db1\data
#日志输出文件路径
logpath=D:\database\MongoDB\db1\logs\mongodb.log
#错误日志采用追加模式,配置这个选项后mongodb的日志会追加到现有的日志文件,而不是从新创建一个新文件
logappend=true
#启用日志文件,默认启用,MongoDB的数据操作将会写入到journal文件夹的文件里
journal=true
#这个选项可以过滤掉一些无用的日志信息,若需要调试使用请设置为false
quiet=false
#端口号 默认为27020
port=27020

链接数据库

const mongoose = require("mongoose");

mongoose.connect("mongodb://localhost:/test", {
    // 避免“不建议使用当前URL字符串解析器”警告
    useNewUrlParser: true,
    // 避免警告信息
    useUnifiedTopology: true,
    // mongodb 建立索引
    useCreateIndex: true,
    // mongos连接池
    poolSize: 5
});

module.exports = mongoose;

连接mongodb的配置信息

const mongoose = require('mongoose');
mongoose.connect(
  "mongodb://192.168.77.137:27017,192.168.77.137:27018/test?replicaSet=rs", //连接多个数据库用来配合主从集群
  {
    useNewUrlParser: true,
    poolSize: 5,
    readPreference: "secondary" //集群配置
  });
//判断连接是否生效
const conn = mongoose.connection;

conn.on("open", () => {
    console.log('mongodb连接成功');
})
conn.on("error", () => {
    console.log('mongodb连接失败');
});
  • 操作数据库
const mongoose = require("../dbs/db.js");

// 制定规则
const UserSchema = new mongoose.Schema({
    username: {
        type: String
    },
    password: {
        type: String
    }
});

// 使用规则
const User = mongoose.model("User", UserSchema);

module.exports = {User};

配置复制集replset

复制集配置 复制集配置 连接复制集

Mongodb的replication主要有两种:主从和副本集(replica set)。主从的原理和mysql类似,主节点记录在其上的所有操作oplog,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点一致。现在mongodb官方建议用副本集替代主从复制,现在我们来了解下如何配置复制集。

数据库配置

#ip绑定,限制ip访问
#bind_ip=127.0.0.1
#启用身份认证
#auth=true
#指定存储引擎(默认先不加此引擎,如果报错了,大家在加进去)只要不是win7,32位的,可以不用配这个
#storageEngine=mmapv1
#后台启动,是否以守护进程方式运行
#fork=true

#数据库路径
dbpath=D:\database\MongoDB\db1\data
#日志输出文件路径
logpath=D:\database\MongoDB\db1\logs\mongodb.log
#错误日志采用追加模式,配置这个选项后mongodb的日志会追加到现有的日志文件,而不是从新创建一个新文件
logappend=true
#启用日志文件,默认启用,MongoDB的数据操作将会写入到journal文件夹的文件里
journal=true
#这个选项可以过滤掉一些无用的日志信息,若需要调试使用请设置为false
quiet=false
#端口号 默认为27020
port=27020
#复制集名称
replSet=rs0

#MongoDB的启动
#mongod --config D:\database\MongoDB\db1\config\mongo.conf

主从配置信息,连接任意一个服务器,初始化命令只执行一次即可

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

需要安装的依赖

mysql co-mysql md5-node
"dependencies": {
    "co-mysql": "^1.0.0",
    "md5-node": "^1.0.1",
    "mysql": "^2.18.1"
  }

数据库拆分

dbs 下的db.js 文件

const mysql = require("mysql"); //数据库操作是异步的
const co = require("co-mysql"); //同步的方法操作数据库

// 数据库链接池
let db = mysql.createPool({
    host: "localhost",
    user: "root",
    password: "663067",
    database: "user"
});

module.exports = co(db);

使用

const md5 = require("md5-node");
const conn = require("../dbs/db.js");

router.post("/", async (ctx) => {
    let {username, password} = ctx.request.body;
    // 写入数据库
    password = md5(password);
    let sql = `INSERT INTO admin (user,password) VALUES ("${username}","${password}")`;
    await conn.query(sql);
    ctx.body = (JSON.stringify({"status": 200, "message": "注册成功"}));
});

拆分方法二

const mysql = require("mysql"); //数据库操作是异步的
const co = require("co-mysql"); //同步的方法操作数据库
const config = require("../config");

// 数据库链接池
let db = mysql.createPool({
    host: "config.host",
    user: "config.user",
    password: "config.password",
    database: "config.database"
});

module.exports = co(db);

config 文件配置

module.exports = {
    host: "localhost",
    user: "root",
    password: "663067",
    database: "user"
}