mongodb副本集部署

1、mongodb副本集部署

服务器信息
序号 hostname ip 配置
1 mongodb01 192.168.0.216 4核8g1T
2 mongodb02 192.168.0.217 4核8g1T
3 mongodb03 192.168.0.218 4核8g1T

1.1、 集群拓扑图

1.2、下载二进制包

  • 本次部署集群所使用mongodb版本为3.6.20

    官网下载地址:https://www.mongodb.com/try/download/community
    

1.3、规划数据目录

在mongodb_01上

  • 创建安装目录

    [root@mongodb_01 ~]# mkdir /hdata/mongo_data/{data,log,conf,keyfile} -pv
    mkdir: 已创建目录 "/hdata"
    mkdir: 已创建目录 "/hdata/mongo_data"
    mkdir: 已创建目录 "/hdata/mongo_data/data"
    mkdir: 已创建目录 "/hdata/mongo_data/log"
    mkdir: 已创建目录 "/hdata/mongo_data/conf"
    mkdir: 已创建目录 "/hdata/mongo_data/keyfile"
    
  • 软件路径

    [root@mongodb_01 ~]# mkdir /opt/software -pv
    mkdir: 已创建目录 "/opt/software"
    
  • 将mongodb二进制文件解压到/opt/software

    [root@mongodb_01 software]# tar xf mongodb-linux-x86_64-rhel70-3.6.20.tgz -C /opt/software/
    [root@mongodb_01 software]# ll
    总用量 119116
    drwxr-xr-x. 3 root root       135 921 15:03 mongodb-linux-x86_64-rhel70-3.6.20
    -rw-r--r--. 1 root root 121973145 921 15:00 mongodb-linux-x86_64-rhel70-3.6.20.tgz
    

1.4、其他服务器部署

分别在mongodb02和03上安装第五章3节3.3操作

1.5、创建mongodb配置文件

  • 创建配置文件

    [root@mongodb_01 ~]# vim /hdata/mongo_data/conf/mongod.conf
    # mongod.conf
    
    systemLog:
      destination: file
      logAppend: true
      path: /hdata/mongo_data/log/mongod.log
    storage:
      dbPath: /hdata/mongo_data/data
      journal:
        enabled: true
    processManagement:
      fork: true  # fork and run in background
      pidFilePath: /hdata/mongo_data/log/mongod.pid  # location of pidfile
      timeZoneInfo: /usr/share/zoneinfo
    net:
      port: 27018
      bindIp: 0.0.0.0  # Listen to local interface only, comment to listen on all interfaces.
    #security:
    #  authorization: enabled
    #  keyFile: /home/mongodb/37017/keyfile/keyfile
    
    # 设置副本集名称
    replication:
      replSetName: "rs01"
    
  • 将mongodb_01的配置文件拷贝到另外2个节点

    # 拷贝到mongodb_02
    [root@mongodb_01 ~]# scp /hdata/mongo_data/conf/mongod.conf mongodb_02:/hdata/mongo_data/conf/
    # 拷贝到mongodb_03上
    [root@mongodb_01 ~]# scp /hdata/mongo_data/conf/mongod.conf mongodb_03:/hdata/mongo_data/conf/
    

1.6、 分别启动mongodb

  • mongodb_01

    [root@mongodb_01 ~]# /opt/software/mongodb-linux-x86_64-rhel70-3.6.20/bin/mongod -f /hdata/mongo_data/conf/mongod.conf 
    about to fork child process, waiting until server is ready for connections.
    forked process: 2402
    child process started successfully, parent exiting
    [root@mongodb_01 ~]# ss -nutl | grep 27018
    tcp    LISTEN     0      128       *:27018                 *:*
    
  • mongodb_02

    [root@mongodb_02 ~]# /opt/software/mongodb-linux-x86_64-rhel70-3.6.20/bin/mongod -f /hdata/mongo_data/conf/mongod.conf
    about to fork child process, waiting until server is ready for connections.
    forked process: 4418
    child process started successfully, parent exiting
    [root@mongodb_02 ~]# ss -nutl | grep 27018
    tcp    LISTEN     0      128       *:27018                 *:*
    
  • mongodb_03

    [root@mongodb_03 ~]# /opt/software/mongodb-linux-x86_64-rhel70-3.6.20/bin/mongod -f /hdata/mongo_data/conf/mongod.conf
    about to fork child process, waiting until server is ready for connections.
    forked process: 4453
    child process started successfully, parent exiting
    [root@mongodb_03 ~]# ss -nutl | grep 27018
    tcp    LISTEN     0      128       *:27018                *:*
    

1.7、登陆任意一个节点

a> 开启副本集集群

[root@mongodb_01 ~]# /opt/software/mongodb-linux-x86_64-rhel70-3.6.20/bin/mongo --port 27018
# 创建副本集配置文件
> conf={"_id":"rs01","members":[{"_id":0,"host":"192.168.0.216:27018"},{"_id":1,"host":"192.168.0.217:27018"},{"_id":2,"host":"192.168.0.218:27018"}]}
{
	"_id" : "rs01",
	"members" : [
		{
			"_id" : 0,
			"host" : "192.168.0.216:27018"
		},
		{
			"_id" : 1,
			"host" : "192.168.0.217:27018"
		},
		{
			"_id" : 2,
			"host" : "192.168.0.218:27018"
		}
	]
}
# 初始化副本集配置文件
> rs.initiate(conf)
{
	"ok" : 1,
	"operationTime" : Timestamp(1600674253, 1),
	"$clusterTime" : {
		"clusterTime" : Timestamp(1600674253, 1),
		"signature" : {
			"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
			"keyId" : NumberLong(0)
		}
	}
}

b> 查看副本集集群状态

rs01:SECONDARY> rs.status()
{
	"set" : "rs01",
	"date" : ISODate("2020-09-21T07:45:25.575Z"),
	"myState" : 1,
	"term" : NumberLong(1),
	"syncingTo" : "",
	"syncSourceHost" : "",
	"syncSourceId" : -1,
	"heartbeatIntervalMillis" : NumberLong(2000),
	"optimes" : {
		"lastCommittedOpTime" : {
			"ts" : Timestamp(1600674316, 1),
			"t" : NumberLong(1)
		},
		"readConcernMajorityOpTime" : {
			"ts" : Timestamp(1600674316, 1),
			"t" : NumberLong(1)
		},
		"appliedOpTime" : {
			"ts" : Timestamp(1600674316, 1),
			"t" : NumberLong(1)
		},
		"durableOpTime" : {
			"ts" : Timestamp(1600674316, 1),
			"t" : NumberLong(1)
		}
	},
	"members" : [
		{
			"_id" : 0,										#第一个节点的id号
			"name" : "192.168.0.216:27018",					#第一个节点的ip+port
			"health" : 1,									#第一个节点的健康情况:1表示正常,0表示不正常
			"state" : 1,
			"stateStr" : "PRIMARY",							#第一个节点在副本集的集群状态,primary表示主节点,secondary表示从节点
			"uptime" : 1087,
			"optime" : {
				"ts" : Timestamp(1600674316, 1),
				"t" : NumberLong(1)
			},
			"optimeDate" : ISODate("2020-09-21T07:45:16Z"),
			"syncingTo" : "",
			"syncSourceHost" : "",
			"syncSourceId" : -1,
			"infoMessage" : "could not find member to sync from",
			"electionTime" : Timestamp(1600674264, 1),
			"electionDate" : ISODate("2020-09-21T07:44:24Z"),
			"configVersion" : 1,
			"self" : true,
			"lastHeartbeatMessage" : ""
		},
		{
			"_id" : 1,
			"name" : "192.168.0.217:27018",
			"health" : 1,
			"state" : 2,
			"stateStr" : "SECONDARY",
			"uptime" : 72,
			"optime" : {
				"ts" : Timestamp(1600674316, 1),
				"t" : NumberLong(1)
			},
			"optimeDurable" : {
				"ts" : Timestamp(1600674316, 1),
				"t" : NumberLong(1)
			},
			"optimeDate" : ISODate("2020-09-21T07:45:16Z"),
			"optimeDurableDate" : ISODate("2020-09-21T07:45:16Z"),
			"lastHeartbeat" : ISODate("2020-09-21T07:45:24.593Z"),
			"lastHeartbeatRecv" : ISODate("2020-09-21T07:45:25.379Z"),
			"pingMs" : NumberLong(0),
			"lastHeartbeatMessage" : "",
			"syncingTo" : "192.168.31.11:27017",
			"syncSourceHost" : "192.168.31.11:27017",
			"syncSourceId" : 0,
			"infoMessage" : "",
			"configVersion" : 1
		},
		{
			"_id" : 2,
			"name" : "192.168.0.218:27018",
			"health" : 1,
			"state" : 2,
			"stateStr" : "SECONDARY",
			"uptime" : 72,
			"optime" : {
				"ts" : Timestamp(1600674316, 1),
				"t" : NumberLong(1)
			},
			"optimeDurable" : {
				"ts" : Timestamp(1600674316, 1),
				"t" : NumberLong(1)
			},
			"optimeDate" : ISODate("2020-09-21T07:45:16Z"),
			"optimeDurableDate" : ISODate("2020-09-21T07:45:16Z"),
			"lastHeartbeat" : ISODate("2020-09-21T07:45:24.592Z"),
			"lastHeartbeatRecv" : ISODate("2020-09-21T07:45:25.379Z"),
			"pingMs" : NumberLong(0),
			"lastHeartbeatMessage" : "",
			"syncingTo" : "192.168.31.11:27017",
			"syncSourceHost" : "192.168.31.11:27017",
			"syncSourceId" : 0,
			"infoMessage" : "",
			"configVersion" : 1
		}
	],
	"ok" : 1,
	"operationTime" : Timestamp(1600674316, 1),
	"$clusterTime" : {
		"clusterTime" : Timestamp(1600674316, 1),
		"signature" : {
			"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
			"keyId" : NumberLong(0)
		}
	}
}

c> 查看副本集集群配置

rs01:PRIMARY> rs.conf()
{
	"_id" : "rs01",
	"version" : 1,
	"protocolVersion" : NumberLong(1),
	"members" : [
		{
			"_id" : 0,
			"host" : "192.168.0.216:27018",
			"arbiterOnly" : false,
			"buildIndexes" : true,
			"hidden" : false,
			"priority" : 1,							#该节点的优先级
			"tags" : {
				
			},
			"slaveDelay" : NumberLong(0),
			"votes" : 1
		},
		{
			"_id" : 1,
			"host" : "192.168.0.217:27018",
			"arbiterOnly" : false,
			"buildIndexes" : true,
			"hidden" : false,
			"priority" : 1,
			"tags" : {
				
			},
			"slaveDelay" : NumberLong(0),
			"votes" : 1
		},
		{
			"_id" : 2,
			"host" : "192.168.0.218:27018",
			"arbiterOnly" : false,
			"buildIndexes" : true,
			"hidden" : false,
			"priority" : 1,
			"tags" : {
				
			},
			"slaveDelay" : NumberLong(0),
			"votes" : 1
		}
	],
	"settings" : {
		"chainingAllowed" : true,
		"heartbeatIntervalMillis" : 2000,
		"heartbeatTimeoutSecs" : 10,
		"electionTimeoutMillis" : 10000,
		"catchUpTimeoutMillis" : -1,
		"catchUpTakeoverDelayMillis" : 30000,
		"getLastErrorModes" : {
			
		},
		"getLastErrorDefaults" : {
			"w" : 1,
			"wtimeout" : 0
		},
		"replicaSetId" : ObjectId("5f6859cde1d641b3427af2a7")
	}
}

d> 修改mongodb01和02优先级,03优先级保持不变,只参与选举及数据同步

#自定义服务配置信息
rs01:PRIMARY> cfg=rs.conf()
{
	"_id" : "rs01",
	"version" : 1,
	"protocolVersion" : NumberLong(1),
	"members" : [
		{
			"_id" : 0,
			"host" : "192.168.0.216:27018",
			"arbiterOnly" : false,
			"buildIndexes" : true,
			"hidden" : false,
			"priority" : 1,
			"tags" : {
				
			},
			"slaveDelay" : NumberLong(0),
			"votes" : 1
		},
		{
			"_id" : 1,
			"host" : "192.168.0.217:27018",
			"arbiterOnly" : false,
			"buildIndexes" : true,
			"hidden" : false,
			"priority" : 1,
			"tags" : {
				
			},
			"slaveDelay" : NumberLong(0),
			"votes" : 1
		},
		{
			"_id" : 2,
			"host" : "192.168.0.218:27018",
			"arbiterOnly" : false,
			"buildIndexes" : true,
			"hidden" : false,
			"priority" : 1,
			"tags" : {
				
			},
			"slaveDelay" : NumberLong(0),
			"votes" : 1
		}
	],
	"settings" : {
		"chainingAllowed" : true,
		"heartbeatIntervalMillis" : 2000,
		"heartbeatTimeoutSecs" : 10,
		"electionTimeoutMillis" : 10000,
		"catchUpTimeoutMillis" : -1,
		"catchUpTakeoverDelayMillis" : 30000,
		"getLastErrorModes" : {
			
		},
		"getLastErrorDefaults" : {
			"w" : 1,
			"wtimeout" : 0
		},
		"replicaSetId" : ObjectId("5f6859cde1d641b3427af2a7")
	}
}
# mongodb_02服务器优先级,id=1,优先级是2  或 如果做高可用,1宕机,2提升主,3一直为SECONDARY,可以把1和2的优先级都设置为2,3还是1,保持不变
# 这样就可以实现1宕机,2提升主,3参与选举,并且1恢复后以从节点加入,避免不必要的主从切换,确保2的数据能及时同步到1
rs01:PRIMARY> cfg.members[1].priority=2
2
rs01:PRIMARY> cfg.members[0].priority=2
2
# 重新加载配置信息
rs01:PRIMARY> rs.reconfig(cfg)
{
	"ok" : 1,
	"operationTime" : Timestamp(1600675177, 1),
	"$clusterTime" : {
		"clusterTime" : Timestamp(1600675177, 1),
		"signature" : {
			"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
			"keyId" : NumberLong(0)
		}
	}
}

e> 重新查看集群配置信息

rs01:SECONDARY> rs.conf()
{
	"_id" : "rs01",
	"version" : 2,
	"protocolVersion" : NumberLong(1),
	"members" : [
		{
			"_id" : 0,
			"host" : "192.168.0.216:27018",
			"arbiterOnly" : false,
			"buildIndexes" : true,
			"hidden" : false,
			"priority" : 1,
			"tags" : {
				
			},
			"slaveDelay" : NumberLong(0),
			"votes" : 1
		},
		{
			"_id" : 1,
			"host" : "192.168.0.217:27018",
			"arbiterOnly" : false,
			"buildIndexes" : true,
			"hidden" : false,
			"priority" : 2,
			"tags" : {
				
			},
			"slaveDelay" : NumberLong(0),
			"votes" : 1
		},
		{
			"_id" : 2,
			"host" : "192.168.0.218:27018",
			"arbiterOnly" : false,
			"buildIndexes" : true,
			"hidden" : false,
			"priority" : 1,
			"tags" : {
				
			},
			"slaveDelay" : NumberLong(0),
			"votes" : 1
		}
	],
	"settings" : {
		"chainingAllowed" : true,
		"heartbeatIntervalMillis" : 2000,
		"heartbeatTimeoutSecs" : 10,
		"electionTimeoutMillis" : 10000,
		"catchUpTimeoutMillis" : -1,
		"catchUpTakeoverDelayMillis" : 30000,
		"getLastErrorModes" : {
			
		},
		"getLastErrorDefaults" : {
			"w" : 1,
			"wtimeout" : 0
		},
		"replicaSetId" : ObjectId("5f6859cde1d641b3427af2a7")
	}
}

f> 重新查看集群状态

rs01:SECONDARY> rs.status()
{
	"set" : "rs01",
	"date" : ISODate("2020-09-21T08:04:54.966Z"),
	"myState" : 2,
	"term" : NumberLong(2),
	"syncingTo" : "192.168.0.216:27018",
	"syncSourceHost" : "192.168.0.216:27018",
	"syncSourceId" : 2,
	"heartbeatIntervalMillis" : NumberLong(2000),
	"optimes" : {
		"lastCommittedOpTime" : {
			"ts" : Timestamp(1600675488, 1),
			"t" : NumberLong(2)
		},
		"readConcernMajorityOpTime" : {
			"ts" : Timestamp(1600675488, 1),
			"t" : NumberLong(2)
		},
		"appliedOpTime" : {
			"ts" : Timestamp(1600675488, 1),
			"t" : NumberLong(2)
		},
		"durableOpTime" : {
			"ts" : Timestamp(1600675488, 1),
			"t" : NumberLong(2)
		}
	},
	"members" : [
		{
			"_id" : 0,
			"name" : "192.168.0.216:27018",
			"health" : 1,
			"state" : 2,
			"stateStr" : "SECONDARY",
			"uptime" : 2256,
			"optime" : {
				"ts" : Timestamp(1600675488, 1),
				"t" : NumberLong(2)
			},
			"optimeDate" : ISODate("2020-09-21T08:04:48Z"),
			"syncingTo" : "192.168.0.216:27018",
			"syncSourceHost" : "192.168.0.216:27018",
			"syncSourceId" : 2,
			"infoMessage" : "",
			"configVersion" : 2,
			"self" : true,
			"lastHeartbeatMessage" : ""
		},
		{
			"_id" : 1,
			"name" : "192.168.0.217:27018",
			"health" : 1,
			"state" : 1,
			"stateStr" : "PRIMARY",											#id为1的服务已提升为主节点
			"uptime" : 1241,
			"optime" : {
				"ts" : Timestamp(1600675488, 1),
				"t" : NumberLong(2)
			},
			"optimeDurable" : {
				"ts" : Timestamp(1600675488, 1),
				"t" : NumberLong(2)
			},
			"optimeDate" : ISODate("2020-09-21T08:04:48Z"),
			"optimeDurableDate" : ISODate("2020-09-21T08:04:48Z"),
			"lastHeartbeat" : ISODate("2020-09-21T08:04:53.510Z"),
			"lastHeartbeatRecv" : ISODate("2020-09-21T08:04:54.489Z"),
			"pingMs" : NumberLong(0),
			"lastHeartbeatMessage" : "",
			"syncingTo" : "",
			"syncSourceHost" : "",
			"syncSourceId" : -1,
			"infoMessage" : "",
			"electionTime" : Timestamp(1600675187, 1),
			"electionDate" : ISODate("2020-09-21T07:59:47Z"),
			"configVersion" : 2
		},
		{
			"_id" : 2,
			"name" : "192.168.0.218:27018",
			"health" : 1,
			"state" : 2,
			"stateStr" : "SECONDARY",
			"uptime" : 1241,
			"optime" : {
				"ts" : Timestamp(1600675488, 1),
				"t" : NumberLong(2)
			},
			"optimeDurable" : {
				"ts" : Timestamp(1600675488, 1),
				"t" : NumberLong(2)
			},
			"optimeDate" : ISODate("2020-09-21T08:04:48Z"),
			"optimeDurableDate" : ISODate("2020-09-21T08:04:48Z"),
			"lastHeartbeat" : ISODate("2020-09-21T08:04:53.436Z"),
			"lastHeartbeatRecv" : ISODate("2020-09-21T08:04:52.966Z"),
			"pingMs" : NumberLong(0),
			"lastHeartbeatMessage" : "",
			"syncingTo" : "192.168.0.216:27018",
			"syncSourceHost" : "192.168.0.216:27018",
			"syncSourceId" : 1,
			"infoMessage" : "",
			"configVersion" : 2
		}
	],
	"ok" : 1,
	"operationTime" : Timestamp(1600675488, 1),
	"$clusterTime" : {
		"clusterTime" : Timestamp(1600675488, 1),
		"signature" : {
			"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
			"keyId" : NumberLong(0)
		}
	}
}

1.8、测试

  • 主节点插入数据

    rs01:PRIMARY> for(var i=0;i<10000;i++){db.customer.insert({"name":"user"+i})}
    WriteResult({ "nInserted" : 1 })
    rs01:PRIMARY> db.customer.count()
    10000
    
  • 从节点查数据

    rs01:SECONDARY> rs.secondaryOk()					#开启从节点可查询条件
    rs01:SECONDARY> db.customer.count()
    10000
    

1.9、开启用户认证

a> 在主节点创建用户

rs01:PRIMARY> use admin
switched to db admin
rs01:PRIMARY> db.createUser({user:"root",pwd:"root@0321",roles:[{role:"root",db:"admin"}]})
Successfully added user: {
	"user" : "root",
	"roles" : [
		{
			"role" : "root",
			"db" : "admin"
		}
	]
}

b> 创建安全认证

  • 依次停止mongodb副本集集群

  • 首先停从节点,然后停止主节点

    #主节点是mongodb_02,从节点是mongodb_01和mongodb_03
    #停止从节点
    /opt/software/mongodb-linux-x86_64-rhel70-3.6.20/bin/mongod -shutdown -dbpath=/hdata/mongo_data/data
    #停止主节点
    /opt/software/mongodb-linux-x86_64-rhel70-3.6.20/bin/mongod -shutdown -dbpath=/hdata/mongo_data/data
    

c> 创建keyfile文件

  • 在任意一台服务器上创建,再复制到其他服务器上

    [root@mongodb_01 keyfile]# pwd
    /hdata/mongo_data/keyfile
    [root@mongodb_01 keyfile]# openssl rand -base64 756 > keyfile
    [root@mongodb_01 keyfile]# ll
    总用量 4
    -rw-r--r--. 1 root root 1024 921 16:32 keyfile
    [root@mongodb_01 keyfile]# chmod 600 keyfile 
    [root@mongodb_01 keyfile]# ll
    总用量 4
    -rw-------. 1 root root 1024 921 16:32 keyfile
    [root@mongodb_01 keyfile]# scp keyfile 192.168.0.217:/hdata/mongo_data/keyfile/
    root@192.168.0.217's password: 
    keyfile                                                                                                                                                      100% 1024     1.1MB/s   00:00    
    [root@mongodb_01 keyfile]# scp keyfile 192.168.0.218:/hdata/mongo_data/keyfile/
    root@192.168.0.218's password: 
    keyfile                                                                                                                                                      100% 1024   994.4KB/s   00:00    
    [root@mongodb_01 keyfile]#
    
  • 配置mongodb配置文件,然后分发到其他2台服务器上

    vim /hdata/mongo_data/conf/mongod.conf
    # mongod.conf
    
    systemLog:
      destination: file
      logAppend: true
      path: /hdata/mongo_data/log/mongod.log
    storage:
      dbPath: /hdata/mongo_data/data
      journal:
        enabled: true
    processManagement:
      fork: true  # fork and run in background
      pidFilePath: /hdata/mongo_data/log/mongod.pid  # location of pidfile
      timeZoneInfo: /usr/share/zoneinfo
    net:
      port: 27018
      bindIp: 0.0.0.0  # Listen to local interface only, comment to listen on all interfaces.
    #开启认证
    security:
      authorization: enabled
      keyFile: /hdata/mongo_data/keyfile/keyfile
    
    # 设置副本集名称
    replication:
      replSetName: "rs01"
    

1.10、启动集群

  • 先启动主节点,再启动从节点

  • 启动mongodb02主节点

    /opt/software/mongodb-linux-x86_64-rhel70-3.6.20/bin/mongod -f /hdata/mongo_data/conf/mongod.conf
    
  • 启动从节点01和03

    /opt/software/mongodb-linux-x86_64-rhel70-3.6.20/bin/mongod -f /hdata/mongo_data/conf/mongod.conf
    

1.11、验证集群状态

rs01:PRIMARY> use admin
switched to db admin
rs01:PRIMARY> db.auth("root","root@0321")
1
rs01:PRIMARY> rs.status()

1.12、导入数据测试账户密码认证及数据是否同步

  • 主节点导入数据

    #主节点导入数据
    [root@mongodb_02 mongo_data]# /opt/software/mongodb-linux-x86_64-rhel70-3.6.20/bin/mongoimport --host 127.0.0.1 --port 27017 -d testa -u root -p root@0321 --authenticationDatabase admin -c thumb_image --file thumb_image.json 
    2020-09-21T16:52:28.555+0800	connected to: 127.0.0.1:27017
    2020-09-21T16:52:31.328+0800	imported 178 documents
    
  • 检查从节点数据

    rs01:SECONDARY> db.auth("root","root@0321")
    1
    rs01:SECONDARY> rs.secondaryOk()
    rs01:SECONDARY> show dbs
    admin   0.000GB
    config  0.000GB
    local   0.027GB
    test    0.000GB
    testa   0.026GB
    rs01:SECONDARY> use testa
    switched to db testa
    rs01:SECONDARY> show collections
    thumb_image
    

版权声明:本文为qq_16125927原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。