MongoDB 数据放在不同的磁盘上

--directoryperdb 选项是用于指定MongoDB每个数据库的数据文件都存储在单独的目录下。

如果 directoryPerDB: false, 查看 /data/db 目录:

root@d206935c473f:~# ls -al
total 76
drwxr-xr-x 5 mongodb root    4096 Mar 10 07:40 .
drwxr-xr-x 1 root    root      29 Mar 10 07:40 ..
drwx------ 3 root    root      21 Mar 10 07:40 .mongodb
-rw------- 1 mongodb mongodb   50 Mar 10 07:40 WiredTiger
-rw------- 1 mongodb mongodb   21 Mar 10 07:40 WiredTiger.lock
-rw------- 1 mongodb mongodb 1165 Mar 10 07:40 WiredTiger.turtle
-rw------- 1 mongodb mongodb 4096 Mar 10 07:40 WiredTiger.wt
-rw------- 1 mongodb mongodb 4096 Mar 10 07:40 WiredTigerHS.wt
-rw------- 1 mongodb mongodb 4096 Mar 10 07:40 _mdb_catalog.wt
-rw------- 1 mongodb mongodb 4096 Mar 10 07:40 collection-0-2451291976179211861.wt
-rw------- 1 mongodb mongodb 4096 Mar 10 07:40 collection-2-2451291976179211861.wt
-rw------- 1 mongodb mongodb 4096 Mar 10 07:40 collection-4-2451291976179211861.wt
-rw------- 1 mongodb mongodb 4096 Mar 10 07:40 collection-7-2451291976179211861.wt
drwx------ 2 mongodb mongodb   71 Mar 10 07:40 diagnostic.data
-rw------- 1 mongodb mongodb 4096 Mar 10 07:40 index-1-2451291976179211861.wt
-rw------- 1 mongodb mongodb 4096 Mar 10 07:40 index-3-2451291976179211861.wt
-rw------- 1 mongodb mongodb 4096 Mar 10 07:40 index-5-2451291976179211861.wt
-rw------- 1 mongodb mongodb 4096 Mar 10 07:40 index-6-2451291976179211861.wt
-rw------- 1 mongodb mongodb 4096 Mar 10 07:40 index-8-2451291976179211861.wt
drwx------ 2 mongodb mongodb  110 Mar 10 07:40 journal
-rw------- 1 mongodb mongodb    2 Mar 10 07:40 mongod.lock
-rw------- 1 mongodb mongodb 4096 Mar 10 07:40 sizeStorer.wt
-rw------- 1 mongodb mongodb  114 Mar 10 07:40 storage.bson

可以看到数据都放在 /data/db(collection-xxxx, index-xxx).

如果 directoryPerDB: true, 查看 /data/db 目录:

root@00904472f897:/# ls -al /data/db
total 228
drwxr-xr-x 8 mongodb root      327 Mar 10 07:59 .
drwxr-xr-x 1 root    root       29 Mar 10 07:52 ..
-rw------- 1 root    root      266 Mar 10 07:57 .bash_history
drwx------ 3 root    root       21 Mar 10 07:53 .mongodb
-rw------- 1 mongodb mongodb    50 Mar 10 07:52 WiredTiger
-rw------- 1 mongodb mongodb    21 Mar 10 07:52 WiredTiger.lock
-rw------- 1 mongodb mongodb  1467 Mar 10 07:59 WiredTiger.turtle
-rw------- 1 mongodb mongodb 77824 Mar 10 07:59 WiredTiger.wt
-rw------- 1 mongodb mongodb  4096 Mar 10 07:52 WiredTigerHS.wt
-rw------- 1 mongodb mongodb 36864 Mar 10 07:54 _mdb_catalog.wt
drwx------ 2 mongodb mongodb    87 Mar 10 07:52 admin
drwx------ 2 mongodb mongodb   125 Mar 10 07:52 config
drwx------ 2 mongodb mongodb    71 Mar 10 07:59 diagnostic.data
drwx------ 2 mongodb mongodb   110 Mar 10 07:52 journal
drwx------ 2 mongodb mongodb    87 Mar 10 07:52 local
-rw------- 1 mongodb mongodb     2 Mar 10 07:52 mongod.lock
drwx------ 2 mongodb mongodb    11 Mar 10 07:52 order
-rw------- 1 mongodb mongodb 36864 Mar 10 07:59 sizeStorer.wt
-rw------- 1 mongodb mongodb   114 Mar 10 07:52 storage.bson

可以看到数据都根据 db 名称放在表示的目录中.

如果要将MongoDB数据文件存储在不同的磁盘上,可以按照以下步骤操作:

创建需要存储MongoDB数据的目录,可以使用mkdir命令来创建目录。例如,我们在磁盘1和磁盘2上创建两个目录/data/db/user/data/db/order
启动MongoDB时,使用–dbpath选项来指定MongoDB数据文件的根目录。例如,使用以下命令启动MongoDB,将MongoDB数据文件的根目录设置为/data/db:

mongod --dbpath /data --directoryperdb

创建MongoDB数据库时,MongoDB会自动在数据文件根目录下创建一个以数据库名为名称的目录,并将该数据库的数据文件存储在这个目录下。为了将不同的数据库的数据文件存储在不同的磁盘上,可以为每个数据库创建一个单独的目录,并在创建MongoDB数据库时指定这个目录为该数据库的数据文件存储目录。

例如,在磁盘1上创建一个目录/data/db/user,在磁盘2上创建一个目录/data/db/order。然后,在MongoDB的shell中使用以下命令创建两个数据库mydb和myotherdb:

use user
db.createCollection("users")
use order
db.createCollection("orders")

这样,MongoDB就会自动在/data/db目录下创建一个 user 目录,并将 user 数据库的数据文件存储在这个目录下。同样,MongoDB会在/data/db目录下创建一个order 目录,并将 order 数据库的数据文件存储在这个目录下。
注意,使用--directoryperdb选项可以将每个数据库的数据文件存储在单独的目录下,但是无法精确地将不同的数据库的数据文件存储在不同的磁盘上。MongoDB会自动将不同的数据库的数据文件分散在不同的目录中,从而实现将MongoDB数据文件存储在不同的磁盘上的功能。 可以通过手动设置精确的指定不同的db在不同磁盘上.

  • 注意目录的权限
  • 使用软连接也可以
  • 如果现有的 MongoDB 没有 启动 --directoryperdb, 现在设置为启动, 则启动会失败 (但是也是可以实现的)

启动日志中会出现以下错误:

 {"t":{"$date":"2023-03-10T07:47:09.601+00:00"},"s":"E",  "c":"CONTROL",  "id":20557,   "ctx":"initandlisten","msg":"DBException in initAndListen, terminating","attr":{"error":"InvalidOptions: Requested option conflicts with current storage engine option for dire
ctoryPerDB; you requested true but the current server storage is already set to false and cannot be changed"}}

这时需要做多一点工作开启.

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值