mongodb简介、安装、搭建复制集以及切片

news2025/4/24 8:15:36

一、 简介

NoSQL数据库四大家族:列存储 Hbase,键值(Key-Value)存储 Redis,图像存储 Neo4j,基于分布式文档存储的数据库MongoDb。

MongoDB 和关系型数据库对比

关系型数据库MongoDB
database(库)database(库)
table(表)collection(表)
row(行)document(BSON文档)
column(列)field(字段)
index(索引)index(地理索引、全文索引、hash索引)
join(主外键关联)embedded Document (嵌套文档)
primary key(指定1至N个列做主键)primary key(指定1至N个列做主键)

 BSON是一种类json的一种二进制形式的存储格式,简称Binary JSON,它和JSON一样,支持内嵌的文 档对象和数组对象,但是BSON有JSON没有的一些数据类型,如Date和Binary Data类型。

 二、Linux安装Mongodb

解压: tar -xvf mongodb-linux-x86_64-4.1.3.tgz

 启动的两种方式:

1)默认27017的端口启动:./bin/mongod 

2)指定配置文件的方式启动:./bin/mongod -f mongo_37017.conf

注意:若启动报目录缺失, 需要创建对应的目录的文件,如: mkdir -p /data/mongo/data/server1

mongo shell 的启动

启动mongo shell :./bin/mongo

指定主机和端口的方式启动 :./bin/mongo --host=主机IP --port=端口

三、MongoDb的GUI工具

NoSQLBooster是MongoDB CLI界面中非常流行的GUI工具。它正式名称为MongoBooster。

默认安装即可。

四、简单操作

查看数据库:

         show dbs;

切换数据库 如果没有对应的数据库则创建:

         use 数据库名;

创建集合:

         db.createCollection("集合名")

查看集合:

         show tables;

        show collections;

删除集合:

         db.集合名.drop();

删除当前数据库:

         db.dropDatabase();

聚合操作:

        单目的聚合操作:count() 和 distinct()

        聚合管道(Aggregation Pipeline):

        聚合(aggregate)主要用于统计数据(诸如统计平均值,求和等),并返回计算后的数据结果。

        MapReduce 编程模型:

        MapReduce是一种计算模型,简单的说就是将大批量的工作(数据)分解(MAP)执行,然后再将结 果合并成最终结果(REDUCE)。

五、索引

1. 单键索引

2. 复合索引

3. 多键索引

4. 地理空间索引

5. 全文索引

6. 哈希索引

六、索引底层实现原理

        MongoDb使用BSON格式保存数据。与mysql使用B+树不一样,MongoDb用的是B-树,所有节点都有Data域,每个节点既保存数据又保存索引,搜索时相当于二分查找。

        B-树的特点: (1) 多路 非二叉树 (2) 每个节点 既保存数据 又保存索引 (3) 搜索时 相当于二分查找

        B+ 树的特点: (1) 多路非二叉 (2) 只有叶子节点保存数据 (3) 搜索时 也相当于二分查找 (4) 增加了 相邻节点指针

七、高可用

7.1 主从复制架构

        主从结构没有自动故障转移功能,需要指定master和slave端,不推荐在生产中使用。 mongodb4.0后不再支持主从复制!

[main] Master/slave replication is no longer supported

7.2 复制集replica sets

        原理:一个复制集中Primary节点上能够完成读写操作,Secondary节点仅能用于读操作。Primary节点需要记录所有改变数据库状态的操作,这些记录保存在 oplog 中,这个文件存储在 local 数据库,各个Secondary 节点通过此 oplog 来复制数据并应用于本地,保持本地的数据与主节点的一致。oplog 具有幂等性,即无论执行几次其结果一致,这个比 mysql 的二进制日志更好用。

        复制集数据同步分为初始化同步和keep复制同步。初始化同步指全量从主节点同步数据,如果Primary 节点数据量比较大同步时间会比较长。而keep复制指初始化同步过后,节点之间的实时同步一般是增量 同步。

        初始化同步有以下两种情况会触发: (1) Secondary第一次加入。 (2) Secondary落后的数据量超过了oplog的大小,这样也会被全量复制。

        主节点选举触发的时机:

         第一次初始化一个复制集

        Secondary节点权重比Primary节点高时,发起替换选举

        Secondary节点发现集群中没有Primary时,发起选举 Primary节点不能访问到大部分(Majority)成员时主动降级

        当触发选举时,Secondary节点尝试将自身选举为Primary。主节点选举是一个二阶段过程+多数派协议。

第一阶段: 检测自身是否有被选举的资格,如果符合资格会向其它节点发起本节点是否有选举资格的 FreshnessCheck,进行同僚仲裁

第二阶段: 发起者向集群中存活节点发送Elect(选举)请求,仲裁者收到请求的节点会执行一系列合法性检查,如果检查通过,则仲裁者(一个复制集中最多50个节点 其中只有7个具有投票权)给发起者投一票。

pv0通过30秒选举锁防止一次选举中两次投票。

pv1使用了terms(一个单调递增的选举计数器)来防止在一次选举中投两次票的情况。

多数派协议:

        发起者如果获得超过半数的投票,则选举通过,自身成为Primary节点。获得低于半数选票的原因,除了常见的网络问题外,相同优先级的节点同时通过第一阶段的同僚仲裁并进入第二阶段也是一个原因。因此,当选票不足时,会sleep[0,1]秒内的随机时间,之后再次尝试选举。

 7.3 环境搭建

1. 创建目录: mkdir replica_sets

2. 进到目录中,解压mongodb: tar -xvf mongodb-linux-x86_64-4.1.3.tgz

3. 确保当前没有正在运行的monodb

4. 创建,编写mogo的配置文件:vi mongo_37017.conf

# 主节点配置

dbpath=/data/mongo/data/server1

bind_ip=0.0.0.0

port=37017

fork=true

logpath=/data/mongo/logs/server1.log

replSet=lagouCluster

#从节点配置

dbpath=/data/mongo/data/server2

bind_ip=0.0.0.0

port=37018

fork=true

logpath=/data/mongo/logs/server2.log

replSet=lagouCluster

#从节点配置

dbpath=/data/mongo/data/server3

bind_ip=0.0.0.0

port=37019

fork=true

logpath=/data/mongo/logs/server3.log

replSet=lagouCluster

 5. 创建缺失目录:

6. 根据配置文件加载启动3个节点:

./bin/mongod -f mongo_37017.conf

./bin/mongod -f mongo_37018.conf

./bin/mongod -f mongo_37019.conf

7. 初始化节点配置,进入任意一个节点比如37017节点运行如下命令:

var cfg ={"_id":"lagouCluster",
... "protocolVersion" : 1,
... "members":[
... {"_id":1,"host":"192.168.0.203:37017","priority":10},
... {"_id":2,"host":"192.168.0.203:37018"}
... ]
... }
 

 37017初始化后,该节点由“SECONDARY”变为“PRIMARY”。

8. 主节点可以进行增删节点操作:

 rs.add("192.168.0.203:37019")

rs.remove("192.168.0.203:37019")

9. 插入数据验证结果:

进入主节点 ----- 插入数据 ------ 进入从节点验证

注意:默认节点下从节点不能读取数据。调用 rs.slaveOk() 解决。

37017主节点:

37018从节点:

节点说明:

        PRIMARY 节点: 可以查询和新增数据

        SECONDARY 节点:只能查询 不能新增 基于priority 权重可以被选为主节点

        ARBITER 节点: 不能查询数据 和新增数据 ,不能变成主节点 

7.4 切片

1)解压并重命名切片目录:

tar -xvf mongodb-linux-x86_64-4.1.3.tgz

mv mongodb-linux-x86_64-4.1.3 shard_cluster

2)进入目录中,创建config文件夹,配置节点集群

mkdir config

vi config-17017.conf

# 数据库文件位置

dbpath=config/config1

#日志文件位置

logpath=config/logs/config1.log

# 以追加方式写入日志

logappend=true

# 是否以守护进程方式运行

fork = true

bind_ip=0.0.0.0

port = 17017

# 表示是一个配置服务器

configsvr=true

#配置服务器副本集名称

replSet=configsvr

3)同理配置 config-17018.conf、config-17019.conf

4)创建缺失目录

 mkdir config1 logs config2 config3

5)启动节点

./bin/mongod -f config/config-17017.conf

./bin/mongod -f config/config-17018.conf

./bin/mongod -f config/config-17019.conf

6)进入任一节点,配置节点集群,使用admin,初始化,查看状态

[root@rac1 shard_cluster]# ./bin/mongo --port=17017 
MongoDB shell version v4.1.3
connecting to: mongodb://127.0.0.1:17017/
Implicit session: session { "id" : UUID("62ab236a-a0f4-4b74-8064-2b22180f786d") }
MongoDB server version: 4.1.3
Server has startup warnings: 
2023-10-11T22:14:21.557-0400 I CONTROL  [initandlisten] 
2023-10-11T22:14:21.557-0400 I CONTROL  [initandlisten] ** NOTE: This is a development version (4.1.3) of MongoDB.
2023-10-11T22:14:21.557-0400 I CONTROL  [initandlisten] **       Not recommended for production.
2023-10-11T22:14:21.557-0400 I CONTROL  [initandlisten] 
2023-10-11T22:14:21.557-0400 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
2023-10-11T22:14:21.557-0400 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.
2023-10-11T22:14:21.557-0400 I CONTROL  [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.
2023-10-11T22:14:21.557-0400 I CONTROL  [initandlisten] 
2023-10-11T22:14:21.558-0400 W CONTROL  [initandlisten] 
2023-10-11T22:14:21.558-0400 W CONTROL  [initandlisten] 
2023-10-11T22:14:21.558-0400 I CONTROL  [initandlisten] 
> use admin
switched to db admin
> var cfg ={"_id":"configsvr",
... "members":[
... {"_id":1,"host":"192.168.0.203:17017"},
... {"_id":2,"host":"192.168.0.203:17018"},
... {"_id":3,"host":"192.168.0.203:17019"}]
... };
> rs.initiate(cfg)
{
	"ok" : 1,
	"$gleStats" : {
		"lastOpTime" : Timestamp(1697077081, 1),
		"electionId" : ObjectId("000000000000000000000000")
	},
	"lastCommittedOpTime" : Timestamp(0, 0),
	"$clusterTime" : {
		"clusterTime" : Timestamp(1697077081, 1),
		"signature" : {
			"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
			"keyId" : NumberLong(0)
		}
	},
	"operationTime" : Timestamp(1697077081, 1)
}
configsvr:SECONDARY> rs.status()

7)配置shard集群,先配置shard1,再按相同步骤配置shard2

cd shard_cluster/

8) 创建shard目录,在进入创建shard1和shard2目录

9)进入shard1中,创建并编辑vi shard-37017.conf

dbpath=shard/shard1/shard1-37017

bind_ip=0.0.0.0 port=37017

fork=true

logpath=shard/shard1/shard1-37017.log

replSet=shard1

shardsvr=true

10)在同样的位置,同理创建vi shard-37018.conf、vi shard-37019.conf

11)创建缺失文件目录

mkdir shard1-37017 shard1-37018 shard1-37019

12)启动shard1集群每隔节点,随机mongo shell进去中一个,进行集群配置,初始化、并查看状态

[root@rac1 shard_cluster]# ./bin/mongo --port 37017
MongoDB shell version v4.1.3
connecting to: mongodb://127.0.0.1:37017/
Implicit session: session { "id" : UUID("e2a51d10-5626-43db-846d-cc2391d71604") }
MongoDB server version: 4.1.3
Server has startup warnings: 
2023-10-11T22:30:19.852-0400 I CONTROL  [initandlisten] 
2023-10-11T22:30:19.852-0400 I CONTROL  [initandlisten] ** NOTE: This is a development version (4.1.3) of MongoDB.
2023-10-11T22:30:19.852-0400 I CONTROL  [initandlisten] **       Not recommended for production.
2023-10-11T22:30:19.852-0400 I CONTROL  [initandlisten] 
2023-10-11T22:30:19.852-0400 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
2023-10-11T22:30:19.852-0400 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.
2023-10-11T22:30:19.852-0400 I CONTROL  [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.
2023-10-11T22:30:19.852-0400 I CONTROL  [initandlisten] 
2023-10-11T22:30:19.852-0400 W CONTROL  [initandlisten] 
2023-10-11T22:30:19.852-0400 W CONTROL  [initandlisten] 
2023-10-11T22:30:19.852-0400 I CONTROL  [initandlisten] 
> var cfg ={"_id":"shard1",
... "protocolVersion" : 1,
... "members":[
... {"_id":1,"host":"192.168.0.203:37017"},
... {"_id":2,"host":"192.168.0.203:37018"},
... {"_id":3,"host":"192.168.0.203:37019"}
... ]
... };
> rs.initiate(cfg)
{
	"ok" : 1,
	"$clusterTime" : {
		"clusterTime" : Timestamp(1697077902, 1),
		"signature" : {
			"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
			"keyId" : NumberLong(0)
		}
	},
	"operationTime" : Timestamp(1697077902, 1)
}
shard1:SECONDARY> rs.status()

13)同理shard2集群搭建47017到47019,其中shard2-47017.conf内容如下:

dbpath=shard/shard2/shard2-47017

bind_ip=0.0.0.0 port=47017

fork=true

logpath=shard/shard2/logs/shard2-47017.log

replSet=shard2

shardsvr=true

14)进入任一节点,配置集群,初始化,查看

[root@rac1 shard_cluster]# ./bin/mongod -f shard/shard2/shard2-47019.conf 
about to fork child process, waiting until server is ready for connections.
forked process: 16666
child process started successfully, parent exiting
[root@rac1 shard_cluster]# ./bin/mongo --port 47017
MongoDB shell version v4.1.3
connecting to: mongodb://127.0.0.1:47017/
Implicit session: session { "id" : UUID("c98ecf26-5f82-47c6-a026-8b0beb94bc4f") }
MongoDB server version: 4.1.3
Server has startup warnings: 
2023-10-11T22:37:15.189-0400 I CONTROL  [initandlisten] 
2023-10-11T22:37:15.189-0400 I CONTROL  [initandlisten] ** NOTE: This is a development version (4.1.3) of MongoDB.
2023-10-11T22:37:15.189-0400 I CONTROL  [initandlisten] **       Not recommended for production.
2023-10-11T22:37:15.189-0400 I CONTROL  [initandlisten] 
2023-10-11T22:37:15.189-0400 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
2023-10-11T22:37:15.189-0400 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.
2023-10-11T22:37:15.189-0400 I CONTROL  [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.
2023-10-11T22:37:15.189-0400 I CONTROL  [initandlisten] 
2023-10-11T22:37:15.189-0400 W CONTROL  [initandlisten] 
2023-10-11T22:37:15.189-0400 W CONTROL  [initandlisten] 
2023-10-11T22:37:15.189-0400 I CONTROL  [initandlisten] 
> var cfg ={"_id":"shard2",
... "protocolVersion" : 1,
... "members":[
... {"_id":1,"host":"192.168.0.203:47017"},
... {"_id":2,"host":"192.168.0.203:47018"},
... {"_id":3,"host":"192.168.0.203:47019"}
... ]
... };
> rs.initiate(cfg)
{
	"ok" : 1,
	"$clusterTime" : {
		"clusterTime" : Timestamp(1697078414, 1),
		"signature" : {
			"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
			"keyId" : NumberLong(0)
		}
	},
	"operationTime" : Timestamp(1697078414, 1)
}
shard2:SECONDARY> rs.status()

15)配置路由节点,首先创建route目录

[root@rac1 shard_cluster]# mkdir -p route/logs

16)配置文件

[root@rac1 route]# vi route-27017.conf

port=27017
bind_ip=0.0.0.0
fork=true
logpath=route/logs/route.log
configdb=configsvr/192.168.0.203:17017,192.168.0.203:17018,192.168.0.203:17019

17)用mongos启动路由节点,并查看最初的状态

[root@rac1 shard_cluster]# ./bin/mongos -f route/route-27017.conf 
about to fork child process, waiting until server is ready for connections.
forked process: 17138
child process started successfully, parent exiting
[root@rac1 shard_cluster]# ./bin/mongo --port 27017
MongoDB shell version v4.1.3
connecting to: mongodb://127.0.0.1:27017/
Implicit session: session { "id" : UUID("69b121a0-4b5d-40a6-8187-cdadcfe11e13") }
MongoDB server version: 4.1.3
Server has startup warnings: 
2023-10-11T22:43:51.014-0400 I CONTROL  [main] 
2023-10-11T22:43:51.014-0400 I CONTROL  [main] ** NOTE: This is a development version (4.1.3) of MongoDB.
2023-10-11T22:43:51.014-0400 I CONTROL  [main] **       Not recommended for production.
2023-10-11T22:43:51.014-0400 I CONTROL  [main] 
2023-10-11T22:43:51.014-0400 I CONTROL  [main] ** WARNING: Access control is not enabled for the database.
2023-10-11T22:43:51.014-0400 I CONTROL  [main] **          Read and write access to data and configuration is unrestricted.
2023-10-11T22:43:51.014-0400 I CONTROL  [main] ** WARNING: You are running this process as the root user, which is not recommended.
2023-10-11T22:43:51.014-0400 I CONTROL  [main] 
mongos> sh.status()
--- Sharding Status --- 
  sharding version: {
  	"_id" : 1,
  	"minCompatibleVersion" : 5,
  	"currentVersion" : 6,
  	"clusterId" : ObjectId("65275767e63b0b69060b85eb")
  }
  shards:
  active mongoses:
  autosplit:
        Currently enabled: yes
  balancer:
        Currently enabled:  yes
        Currently running:  no
        Failed balancer rounds in last 5 attempts:  0
        Migration Results for the last 24 hours: 
                No recent migrations
  databases:
        {  "_id" : "config",  "primary" : "config",  "partitioned" : true }

18)向路由中添加分片节点

mongos> sh.addShard("shard1/192.168.0.203:37017,192.168.0.203:37018,192.168.0.203:37019");
{
	"shardAdded" : "shard1",
	"ok" : 1,
	"operationTime" : Timestamp(1697078828, 7),
	"$clusterTime" : {
		"clusterTime" : Timestamp(1697078828, 7),
		"signature" : {
			"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
			"keyId" : NumberLong(0)
		}
	}
}
mongos> sh.addShard("shard2/192.168.0.203:47017,192.168.0.203:47018,192.168.0.203:47019");
{
	"shardAdded" : "shard2",
	"ok" : 1,
	"operationTime" : Timestamp(1697078840, 6),
	"$clusterTime" : {
		"clusterTime" : Timestamp(1697078840, 6),
		"signature" : {
			"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
			"keyId" : NumberLong(0)
		}
	}
}
mongos> sh.status()
--- Sharding Status --- 
  sharding version: {
  	"_id" : 1,
  	"minCompatibleVersion" : 5,
  	"currentVersion" : 6,
  	"clusterId" : ObjectId("65275767e63b0b69060b85eb")
  }
  shards:
        {  "_id" : "shard1",  "host" : "shard1/192.168.0.203:37017,192.168.0.203:37018,192.168.0.203:37019",  "state" : 1 }
        {  "_id" : "shard2",  "host" : "shard2/192.168.0.203:47017,192.168.0.203:47018,192.168.0.203:47019",  "state" : 1 }
  active mongoses:
        "4.1.3" : 1
  autosplit:
        Currently enabled: yes
  balancer:
        Currently enabled:  yes
        Currently running:  no
        Failed balancer rounds in last 5 attempts:  0
        Migration Results for the last 24 hours: 
                No recent migrations
  databases:
        {  "_id" : "config",  "primary" : "config",  "partitioned" : true }

19)创建数据库,创建集合,并开启hash分片

mongos> sh.enableSharding("lagou_resume")
{
	"ok" : 1,
	"operationTime" : Timestamp(1697078917, 5),
	"$clusterTime" : {
		"clusterTime" : Timestamp(1697078917, 5),
		"signature" : {
			"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
			"keyId" : NumberLong(0)
		}
	}
}
mongos> sh.shardCollection("lagou_resume.lagou_resume_datas",{"name":"hashed"}
... )
{
	"collectionsharded" : "lagou_resume.lagou_resume_datas",
	"collectionUUID" : UUID("84fd313d-c5cd-4d83-9572-bf57873e2827"),
	"ok" : 1,
	"operationTime" : Timestamp(1697078999, 25),
	"$clusterTime" : {
		"clusterTime" : Timestamp(1697078999, 25),
		"signature" : {
			"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
			"keyId" : NumberLong(0)
		}
	}
}
mongos> use lagou_resume;
switched to db lagou_resume
mongos> for(var i=1;i<= 1000;i++){
... db.lagou_resume_datas.insert({"name":"test"+i,
... salary:(Math.random()*20000).toFixed(2)});
... }
WriteResult({ "nInserted" : 1 })

20)去shard1分片和shard2分片查询信息:

八、安全

设置用户、密码确保安全性。

1. 生成密钥文件 并修改权限

openssl rand -base64 756 > data/mongodb/testKeyFile.file

chmod 600 data/mongodb/keyfile/testKeyFile.file

2. 在路由配置文件中 设置密钥文件

keyFile=data/mongodb/testKeyFile.file

3. 配置节点集群和分片节点集群开启安全认证和指定密钥文件

auth=true

keyFile=data/mongodb/testKeyFile.file

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1087295.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uniapp小程序中给web-view页面添加授权弹窗(使用cover-view组件覆盖实现该功能)

效果图&#xff1a; web-view是承载网页的容器。会自动铺满整个小程序页面&#xff0c;个人类型的小程序暂不支持使用。 再看下面一个提示&#xff1a; 每个页面只能有一个 web-view&#xff0c;web-view 会自动铺满整个页面&#xff0c;并覆盖其他组件。 也就是说&#xff0c;…

DB2 数据库监控用户赋权手册

DB2 数据库监控用户赋权手册 1、系统管理表查询权限2、系统管理表函数执行权限3、数据库 mon 监控数据访问权限 皮皮运维平台数据统一采集用户&#xff08;DBAA&#xff09;需要被监控数据库赋予对应下查询表、表函数以 及获取数据库监控数据的权限&#xff0c;具体授权操作有以…

day14I102.二叉树的层序遍历

1、102.二叉树的层序遍历 题目链接&#xff1a;https://leetcode.cn/problems/binary-tree-level-order-traversal/ 文章链接&#xff1a;https://programmercarl.com/0102.%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E5%B1%82%E5%BA%8F%E9%81%8D%E5%8E%86.html#%E7%AE%97%E6%B3%95…

记一次Redis Cluster Pipeline导致的死锁问题

作者&#xff1a;vivo 互联网服务器团队- Li Gang 本文介绍了一次排查Dubbo线程池耗尽问题的过程。通过查看Dubbo线程状态、分析Jedis连接池获取连接的源码、排查死锁条件等方面&#xff0c;最终确认是因为使用了cluster pipeline模式且没有设置超时时间导致死锁问题。 一、背…

【C++】:内存管理

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家解读一下有关Linux的基础知识点&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; C 语 言 专 栏&#xff1a;C语言&#xff1a;从入门到精通 数…

Webmin远程命令执行漏洞复现

文章目录 Webmin_1.910_rce(CVE-2019-15107)漏洞编号漏洞描述影响版本漏洞评级利用方法&#xff08;利用案例&#xff09;漏洞挖掘加固建议参考信息漏洞分类 Webmin_1.910_rce(CVE-2019-15107) 漏洞编号 CVE-2019-15107 漏洞描述 Webmin是一个用于管理类Unix系统的管理配置…

MytatisP详解

MP详解 一、基础使用1.引入2.Entry中的常用注解3.BaseMapper 、IService、ServiceImpl3.1BaseMapper 3.2IService、ServiceImpl 4.常用配置4.1 application.yml配置4.2 configuration 配置 5.Wrapper6.分页6.1使用分页方式一 7.自定义分页&#xff1a;查询指定列7.1 先用MP的分…

nginx绑定tomcat与tomcat联合使用的配置(nginx反向代理tomcat的配置说明)

nginx反向代理tomcat通信配置 &#xff08;内容来自网上&#xff0c;注解部分才是原创&#xff09; 切记&#xff1a; url的意思就是 unifed resource location 统一资源定位 其中location就是定位的意思 所以上文中的location就有 对应匹配的 url 标识的资源的相关配置之…

go 递归 数据多层级横向展开 插入数据库

需求&#xff0c;在两张表(一张主表&#xff0c;一张明细表&#xff0c;一对多的关系)中有层级关系&#xff0c;比如A(主表数据)&#xff0c;A1&#xff0c;A2&#xff0c;A3&#xff0c;A4(明细表数据)&#xff0c;而A1这些数据下面还有别的数据那它们也会出现在主表中&#x…

Pygame中将鼠标形状设置为图片2-2

3 编写主程序 在主程序中&#xff0c;首先创建屏幕并且完成一些准备工作&#xff0c;之后在while循环中不断更新sprite实例即可。 3.1 创建屏幕及准备工作 创建屏幕及准备工作的代码如图5所示。 图5 创建屏幕及准备工作 其中&#xff0c;第20行代码调用pygame.mouse模块中的…

足球公平盘、实力盘和盘口合理性的模型探讨

1. 公平盘模型事件 9月份&#xff0c;突然间好多人加我vx问及公平盘模型能否依靠下图做出来&#xff0c;几年没有人提及公平盘&#xff0c;突然好多人这么一问应该是从同一个讨论群过来的。 1.1 公平盘介绍 按照字面意思&#xff1a;真实反应即将开赛的两支球队在主客场时的让…

【Spring Boot】RabbitMQ消息队列 — RabbitMQ入门

💠一名热衷于分享知识的程序员 💠乐于在CSDN上与广大开发者交流学习。 💠希望通过每一次学习,让更多读者了解我 💠也希望能结识更多志同道合的朋友。 💠将继续努力,不断提升自己的专业技能,创造更多价值。🌿欢迎来到@"衍生星球"的CSDN博文🌿 🍁本…

微服务11-Sentinel中的授权规则以及Sentinel服务规则持久化

文章目录 授权规则自定义异常结果规则持久化实现Push模式 授权规则 根据来源名称对请求进行拦截 ——>我们需要解析来源名称&#xff08;RequestOriginParser默认解析都为default&#xff09;&#xff0c;所以我们要自定义一个实现类&#xff08;根据请求头解析&#xff0c…

MIT 6.S081 Operating System/Fall 2020 macOS搭建risc-v与xv6开发调试环境

文章目录 本机配置安装环境Homebrew执行安装脚本查看安装是否成功 RISC-V tools执行brew的安装脚本 QEMUXV6 测试有用的参考链接&#xff08;感谢前辈&#xff09;写在结尾 本机配置 电脑型号&#xff1a;Apple M2 Pro 2023 操作系统&#xff1a;macOS Ventura 13.4 所以我的电…

CTFHub SSRF 题目

文章目录 CTFHub SSRF 通关教程1. 内网访问&#xff0c;伪协议利用1.1 内网访问1.2 伪协议读取文件1.3 端口扫描 2. POST请求&#xff0c;上传文件&#xff0c;FastCGI协议&#xff0c;Redis协议2.1 POST请求2.2 上传文件2.3 FastCGI协议2.4 Redis协议 3. Bypass系列3.1 URL By…

中国人民大学与加拿大女王大学金融硕士究竟适合金融国企人还是金融外企人呢?

随着中国经济的快速发展&#xff0c;金融业已经成为国民经济的重要支柱产业。在这个背景下&#xff0c;金融国企和金融外企的发展也日益繁荣。想发展不断学习的脚步是一刻不能停歇的&#xff0c;由此&#xff0c;免联考双证的中国人民大学与加拿大女王大学金融硕士就开始逐渐走…

有哪些好用的电容笔?苹果平板触控笔推荐

对于学生党来说&#xff0c;用哪种电容笔比较合适&#xff1f;苹果的原装电容笔&#xff0c;尽管性能很好&#xff0c;功能也很多&#xff0c;却就是太贵了&#xff0c;一般人根本买不起&#xff0c;而且重量还挺重&#xff0c;握在手上使用久了会很费劲。如果你只是想单纯地用…

申博|2024国内985院校申博时间参考

转眼已近10月中旬&#xff0c;小编给大家总结了2024年国内985院校博士申请预计时间汇总&#xff0c;一般各高校都是临近博士报名启动才会发布具体的招生通知&#xff0c;所以想要申博的同学们可以在日期临近前注意查看高校官方信息。 以下申请时间为2023年博士申请的时间&…

4.添加3DTiles

愿你出走半生,归来仍是少年&#xff01; 在构建好的三维场景中添加3DTile&#xff08;本地离线数据以及在线服务&#xff09;。 1.在线服务 首先需要准备一个已发布出来的3DTile服务. 打开Cesium面板&#xff0c;添加Blank 3D Tileset &#xff0c;然后选中该对象&#xff0c;…

WIFI产品使用指导说明

一、登录服务器 二、新建产品 三、设置WIFI产品的联网参数 1、恢复出厂设置 2、设置参数 四、操作更新 网络连接特性&#xff1a; 路由器掉线得情况下&#xff0c; 第一次&#xff0c;搜索网络1分钟间隔第二次&#xff0c;搜索网络1分钟间隔第三次&#xff0c;搜索网络…