--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"}}
这时需要做多一点工作开启.