MongoDB: ngoại lệ trong initAndListen: 20 Đã cố tạo tệp khóa trên thư mục chỉ đọc: / data / db, chấm dứt


147

Tôi đã tạo /data/dbtrong thư mục gốc và chạy ./mongod:

[initandlisten] exception in initAndListen: 20 Attempted to create a lock file on a read-only directory: /data/db, terminating
[initandlisten] shutdown: going to close listening sockets...
[initandlisten] shutdown: going to flush diaglog...
[initandlisten] now exiting
[initandlisten] shutting down with code:100

4
Trông giống như một vấn đề quyền. Người dùng đang chạy mongod có quyền ghi vào thư mục / data / db không? Chia sẻ đầu ra ls -ld /data/dbidvì vậy chúng tôi có thể tư vấn.
Bjorn Roche

gốc rễ drwxr-xr-x 2 4096
whinytween96

uid = 1000 (người dùng) gid = 1000 (người dùng) nhóm = 1000 (người dùng), 4 (adm), 24 (cdrom), 27 (sudo), 30 (nhúng), 46 (plugdev), 113 (lpadmin), 128 (sambashare)
whinytween96

@BjornRoche cảm ơn vì -ldphần này :)
Skynet

@BjornRoche đầu ra của tôi là drwxrwxrwx. 4 mongod mongod 4096 Sep 17 18:18 /data/dbvà tôi vẫn nhận được lỗi. Có ý kiến ​​gì không?
Blake

Câu trả lời:


279

Vấn đề là thư mục bạn đã tạo, /data/dbđược sở hữu và chỉ có thể ghi bởi người dùng root, nhưng bạn đang chạy mongod như chính mình. Có một số cách để giải quyết vấn đề này, nhưng cuối cùng, bạn phải cung cấp cho thư mục nghi vấn quyền. Nếu đây là sản xuất, tôi sẽ khuyên bạn nên kiểm tra các tài liệu và suy nghĩ kỹ về vấn đề này - bạn có thể muốn chăm sóc đặc biệt.

Tuy nhiên, nếu đây chỉ là để thử nghiệm và bạn chỉ cần nó hoạt động và tiếp tục với nó, bạn có thể thử nó, điều này sẽ khiến thư mục có thể ghi được bởi mọi người:

> sudo chmod -R go+w /data/db

hoặc điều này, sẽ làm cho thư mục thuộc sở hữu của bạn:

> sudo chown -R $USER /data/db

4
Tôi nghĩ rằng ai đó có thể cần -Rphải thay đổi tất cả các /data/dbtệp bên trong đệ quy.
YongHao Hu

2
Cảm ơn vì điều đó. Đã thử nó và vẫn nhận được cùng một lỗi
Samuel Dare

1
Chủ đề này đã hơi cũ rồi, nhưng đối với tôi, sử dụng đã chmodtạo ra một lỗi mới initAndListen : operation not permitted, nhưng chownđã hoạt động.
bachinblack

chown cũng đã làm điều đó cho tôi
dwagnerkc

Đó là một thực hành xấu để cung cấp 777 umask cho một thư mục. Bạn có thể thiết lập 755 và nó hoạt độngchmod -R 755 /data/db
Juan-Kabbali

61

Trên máy Mac, tôi phải làm như sau:

sudo chown -R $USER /data/db
sudo chown -R $USER /tmp/

bởi vì cũng có một tập tin bên trong /tmpmà Mongo cũng cần truy cập


2
Hoạt động trong Fedora 28 Linux
Samuel Ivan

2
Điều này nên được đặt lên hàng đầu
Yashwanth Kambala

điều này đã làm điều đó cho tôi là tốt.
Canovice

25

Nếu hệ thống của bạn đang sử dụng SELinux, hãy đảm bảo rằng bạn sử dụng đúng ngữ cảnh cho thư mục bạn đã tạo:

ls -dZ /data/db/
ls -dZ /var/lib/mongo/

và sao chép bối cảnh với:

chcon -R --reference=/var/lib/mongo /data/db

1
Bạn đã cứu ngày của tôi! Cảm ơn bạn rất nhiều
Keerthivasan

2
ls -dZ / var / lib / mongodb / cho các phiên bản mới hơn của mongo
đặc biệt là

18

Tôi đã trải nghiệm cùng một vấn đề và giải pháp sau đây đã giải quyết vấn đề này. Bạn nên thử giải pháp sau.

sudo mkdir -p / data / db
sudo chown -R 'tên người dùng' / data / db


11

nhập mô tả hình ảnh ở đâyTrước hết, dừng tất cả các dịch vụ mongoDB , sau đó tạo một thư mục trên /, nó có nghĩa là root, nếu bạn không có và cũng xóa tệp cổng. cấp tất cả quyền cho thư mục đó, trở thành chủ sở hữu thư mục đó, chạy bên dưới lệnh:

sudo service mongod stop
sudo rm -rf /tmp/mongod*
sudo mkdir -p /data/db
sudo chmod -R a+wxr /data
sudo chown -R $USER:$USER /data

Bây giờ bạn đã hoàn tất, chỉ cần bắt đầu dịch vụ MongoDB, nếu không giúp đỡ, hãy thử thay đổi cổng như sau:

sudo service mongod restart && mongod # if didn't help run below cmd
mongod --port 27018

Lưu ý: Đối với tôi tất cả những thứ này hoạt động và hy vọng sẽ làm việc cho bạn, chàng trai!


6

Sửa các quyền của /data/db(hoặc /var/lib/mongodb):

sudo chown -R mongodb: /data/db

sau đó khởi động lại MongoDB, ví dụ như sử dụng

sudo systemctl restart mongod

Trong trường hợp không có ích, hãy kiểm tra thông báo lỗi của bạn nếu bạn đang sử dụng thư mục dữ liệu khác với / var / lib / mongodb. Trong trường hợp đó chạy

sudo chown -R mongodb: <insert your data directory here>

nguồn


5

Nếu bạn đang kiểm tra nhật ký mongodb của mình và bạn đang gặp phải một lỗi như vậy thì chỉ cần làm theo các bước như tôi đã làm. Nó xảy ra do vấn đề cấp phép với /data/dbthư mục của bạn . Tôi đang sử dụng ubfox16.04 và tôi tìm giải pháp bằng cách chạy hai lệnh đơn giản như sau.

Bước 1: Cấp quyền cho thư mục / data / db:

sudo chmod -R 0777 /data/db

Bước 2: Cố gắng bắt đầu dịch vụ mongod như:

sudo service mongod start

Bước 3: Kiểm tra trạng thái dịch vụ mongod:

sudo service mongod status

2
Bước 1 sẽ cấp quyền đọc / ghi / thực thi cho tất cả người dùng. Điều này không nên được sử dụng.
Jonas Franz

Cảm ơn, @JonasFranz, vì phản hồi của bạn, vì vậy trong trường hợp đó, chúng tôi có thể sử dụng quyền 0755 cho máy chủ sản xuất. Xin hãy sửa tôi nếu tôi sai.
Jitendra

4

Giải pháp tốt, nhưng tôi tự hỏi tại sao không ai đưa ra giải pháp cho windows.

Nếu bạn đang sử dụng windows, bạn chỉ cần "Chạy với tư cách quản trị viên" cmd.


6
Tôi nghĩ đó là bởi vì mọi người thường không chạy các máy chủ cơ sở dữ liệu trên Windows.
Blake

1
Ngoài ra, việc chạy cơ sở dữ liệu với tư cách quản trị viên / root là một ý tưởng tồi, hãy kiểm tra các bình luận khác ở đây như thế này để biết thêm chi tiết
Nino Filiu

4

Tôi xử lý cùng một vấn đề:

Thay đổi thư mục MongoDB chứa binthư mục và chạy:

sudo bin/mongod 

Chạy MongoDB với tư cách là người dùng root, bạn có thể được yêu cầu nhập mật khẩu gốc. Nếu bạn vẫn không thể chạy MongoDB, thì hãy kiểm tra các quyền cho thư mục dữ liệu của MongoDB. Đi vào:

ls -ld /data

hoặc gõ ls -l /quyền cho tất cả các thư mục và tệp trong thư mục bao gồm /datathư mục.

Chế độ cấp phép cho người dùng root phải là " rwx", nghĩa là người dùng root có thể đọc, ghi và thực thi các tệp. Để thực hiện điều này, chúng tôi sử dụng:

chmod 755 /data 

755là một ký hiệu bát phân để đặt quyền, của /datathư mục thành " rwxr-xr-x", có nghĩa là người dùng root có thể đọc, viết và thực thi, trong khi "nhóm" và "mọi người" chỉ có thể đọc và thực thi.

Lưu ý: Khi bạn không thể làm điều này, hãy nhập thay thế:

sudo chmod 755 /data   

để thiết lập quyền như người dùng root.

Sau đó, khi thực hiện xong bước đó, hãy lấy lại các chế độ cho phép bằng cách sử dụng:

ls -ld /data

trông giống như:

drwxr-xr-x  3 root  wheel  102 Mar  3 17:00 /data

Bạn không cần phải lo lắng về " d" lúc đầu và lưu ý rằng các quyền phản ánh " rwxr-xr-x".

Bây giờ bạn có thể thay đổi trở lại thư mục MongoDB và gõ:

sudo bin/mongod  

để chạy MongoDB.


2
Ý tưởng tồi, KHÔNG BAO GIỜ chạy nó như sudo. Có những giải pháp tốt hơn để quản lý người dùng / nhóm thành mongod hoặc mongodb tùy thuộc vào bản phân phối của bạn. Không sử dụng giải pháp này.
Andy

3

Nếu bạn không cần phải có các thư mục cơ sở dữ liệu trong root, bạn có thể tạo data/dbtrong thư mục chính của bạn ( mkdir -p ~/data/db).

Sau đó, bạn có thể khởi động máy chủ MongoDB với --dbpathtùy chọn:

mongod --dbpath=$(echo ~)/data/db

(Điều này giả sử bạn đang khởi động nó từ một thiết bị đầu cuối. Vì một số lý do lạ, mongodkhông chấp nhận ~ là đường dẫn thư mục chính, do đó, thủ thuật thay thế bash echo, bạn cũng có thể viết /home/yourusername/data/db)

Trong thực tế, nó không phải là ~/data/db, nó có thể là bất cứ nơi nào bạn muốn và theo cách này bạn có thể có nhiều đường dẫn cơ sở dữ liệu và sắp xếp mọi thứ độc đáo. Có thể không phải là lựa chọn tốt nhất cho sản xuất (tùy thuộc vào những gì bạn muốn làm), nhưng để phát triển hoạt động tốt.


2

bạn chỉ cần chạy lệnh như một siêu người dùng:

chỉ cần gõ từ thiết bị đầu cuối: sudo su mongod


1
Luôn luôn là một ý tưởng tồi để chạy các chương trình như thế này như một siêu người dùng. Tốt hơn hết là sửa các quyền của các thư mục
Jason

2

Nếu bạn đang ở trên Windows và bạn đang cố gắng thiết lập MongoDB, hãy chạy cmd vì Người quản trị là con đường phía trước như Enrique đã đề xuất ở trên, xem nó ở đây


-1

Điều này làm việc cho tôi trong Ubuntu LTS 20.04:

$ sudo service mongod start

1
Hãy giải thích, tại sao bạn nghĩ rằng nó cũng sẽ làm việc cho người khác!
sauhardnc

1
Vui lòng mô tả độ phân giải chi tiết hơn với nhiều thông tin chi tiết hơn như giải thích lý do thực tế, thêm đoạn mã làm việc và các bước thực hiện để xóa bỏ các vấn đề. Để biết thêm chi tiết, hãy truy cập hướng dẫn của StackOverflow.
Kapil Raghuwanshi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.