MongoDB không bắt đầu sau khi thay đổi thư mục dữ liệu


10

Tôi đã cài đặt một mongodbcá thể bằng cách sử dụng yum. . Bây giờ mọi thứ hoạt động tốt. Tôi bắt đầu sử dụng dịch vụ service mongod start. Nó hoạt động tốt. Sau đó, tôi đã thay đổi data directorylog pathtrong tập tin cấu hình. Tôi khởi động lại máy chủ một lần nữa và tôi bắt đầu dịch vụ. Nhưng tôi nhận được lỗi dưới đây:

Restarting mongod (via systemctl):  Job for mongod.service failed. See 'systemctl status mongod.service' and 'journalctl -xn' for details.
                                                           [FAILED]

Khi tôi đưa systemctl status mongod.servicetôi nhận được dưới đây:

 Loaded: loaded (/etc/rc.d/init.d/mongod)
   Active: failed (Result: exit-code) since Wed 2015-03-18 11:35:56 IST; 22s ago
  Process: 10672 ExecStop=/etc/rc.d/init.d/mongod stop (code=exited, status=0/SUCCESS)
  Process: 10841 ExecStart=/etc/rc.d/init.d/mongod start (code=exited, status=1/FAILURE)
 Main PID: 10509 (code=exited, status=0/SUCCESS)

Mar 18 11:35:56 localhost systemd[1]: Starting SYSV: Mongo is a scalable, document-oriented database....
Mar 18 11:35:56 localhost runuser[10850]: pam_unix(runuser:session): session opened for user mongod by (uid=0)
Mar 18 11:35:56 localhost runuser[10850]: pam_unix(runuser:session): session closed for user mongod
Mar 18 11:35:56 localhost mongod[10841]: Starting mongod: [FAILED]
Mar 18 11:35:56 localhost systemd[1]: mongod.service: control process exited, code=exited status=1
Mar 18 11:35:56 localhost systemd[1]: Failed to start SYSV: Mongo is a scalable, document-oriented database..
Mar 18 11:35:56 localhost systemd[1]: Unit mongod.service entered failed state.

Khi tôi đưa journalctl -xntôi nhận được dưới đây:

-- Logs begin at Wed 2015-03-18 08:56:56 IST, end at Wed 2015-03-18 11:35:56 IST. --
Mar 18 11:30:01 localhost systemd[1]: Starting Session 20 of user root.
-- Subject: Unit session-20.scope has begun with start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit session-20.scope has begun starting up.
Mar 18 11:30:01 localhost systemd[1]: Started Session 20 of user root.
-- Subject: Unit session-20.scope has finished start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit session-20.scope has finished starting up.
-- 
-- The start-up result is done.
Mar 18 11:30:01 localhost CROND[10712]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Mar 18 11:35:56 localhost systemd[1]: Starting SYSV: Mongo is a scalable, document-oriented database....
-- Subject: Unit mongod.service has begun with start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit mongod.service has begun starting up.
Mar 18 11:35:56 localhost runuser[10850]: pam_unix(runuser:session): session opened for user mongod by (uid=0)
Mar 18 11:35:56 localhost runuser[10850]: pam_unix(runuser:session): session closed for user mongod
Mar 18 11:35:56 localhost mongod[10841]: Starting mongod: [FAILED]
Mar 18 11:35:56 localhost systemd[1]: mongod.service: control process exited, code=exited status=1
Mar 18 11:35:56 localhost systemd[1]: Failed to start SYSV: Mongo is a scalable, document-oriented database..
-- Subject: Unit mongod.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel

Bất cứ ai có thể giúp tôi khắc phục điều này? Cảm ơn!!!

PS : Thư mục dữ liệu tôi đã tạo có tất cả các quyền cho người dùng. Nhưng một lần nữa nếu tôi thay đổi thư mục dữ liệu thành default ( /var/lib/mongodb) thì nó hoạt động tốt.

Câu trả lời:


6

Tôi gặp phải một vấn đề tương tự và thấy nó là một mongod.conftập tin bị định cấu hình sai trong trường hợp của tôi. Nó cũng có thể là các quyền trên thư mục mới không được đặt đúng. chown -R mongod:mongod <directory name>là cách tôi đảm bảo quyền truy cập (và tất nhiên chmod 600 <dir>là tốt). Cuối cùng, chạy một ls -Zđể đảm bảo bối cảnh là chính xác. Tôi chỉ so sánh với thư mục mặc định làm việc cho tôi.

Nếu điều này chưa được giải quyết, vui lòng hiển thị nội dung của tệp nhật ký của bạn. Có thể có một số manh mối ở đó.


4

Mở rộng về những gì @mustaccio đã nói, câu trả lời cho tôi là bối cảnh SELinux trên mới logpathdbpath. Tôi đã chạy các lệnh sau và tất cả đều tốt:

sudo chcon -Rv --type=mongod_log_t $logpath
sudo chcon -Rv --type=mongod_var_lib_t $dbpath

(đây là trên RHEL 7.1 btw)


4

Tôi đã có cái này trên Raspberry Pi cũng như trên máy chủ Ubuntu của tôi.

Công việc dành cho mongod.service thất bại. Xem 'systemctl status mongod.service' và 'Journalctl -xn' để biết chi tiết.

Tôi đã có vấn đề này vào những dịp khác nhau vì những lý do khác nhau:

  1. Tên tệp .conf được đặt tên sai - Tập lệnh mongodb (mà tôi đã chuyển đến /etc/init.d/mongodb), dòng 57 CONF=/etc/mongod.confkhi tệp thực tế của tôi là /etc/mongodb.conf. Thay đổi dòng 57 đã sửa nó. Ngoài ra, tôi có thể đã thay đổi tên tập lệnh giống nhau.

  2. tập tin mongod.lock - Lần cuối cùng mongod dừng lại, nó không có cơ hội đóng cơ sở dữ liệu. Điều này để lại một tập tin trong thư mục cơ sở dữ liệu của bạn được gọi là mongod.lock. Bên trong thư mục là một con số (tôi tin rằng đó là bộ PID mà mongo đã sử dụng lần trước). Nếu tệp này tồn tại, bạn sẽ không thể bắt đầu dịch vụ mongod. Xóa tập tin và thử lại.

  3. người dùng mongo - Tôi cần tạo một người dùng linux chịu trách nhiệm bắt đầu và chạy mongod.service. Tôi đặt tên cho mongo của tôi và cập nhật /etc/init.d/mongodbkịch bản của tôi , dòng 95 cho tôi, để nói DAEMONUSER=${DAEMONUSER:-mongo}. Điều này tất nhiên sẽ chỉ hoạt động nếu bạn đã tạo một người dùng mới có tên mongo (hoặc bất cứ điều gì bạn muốn tôi nghĩ).

  4. Quyền DB - Đây là một phổ biến. Khi bạn khai báo vị trí thư mục cơ sở dữ liệu, bạn cần đảm bảo rằng người dùng 'mongo' của bạn có quyền sở hữu tệp đó. Ví dụ, cơ sở dữ liệu của tôi được lưu trữ tại /data/db. Tôi đã chạy lệnh sau:
    sudo chown –R mongo:mongo /data
    và điều này đã chuyển quyền sở hữu /datavà tất cả các thư mục con của nó cho người dùng mongo.

  5. Dịch vụ sai - Điều này là một chút xấu hổ đối với tôi. Tôi đã cố gắng để bắt đầu mongonhư là dịch vụ thay vì mongod. mongolà hệ vỏ mà bạn có thể chạy và nhập lệnh bằng tay vào mongo. Đây là cách tôi tạo cơ sở dữ liệu của mình và thêm một vài đối tượng chẳng hạn. mongodmặt khác là daemon mongo chạy trong nền lưu trữ cơ sở dữ liệu của bạn cho các ứng dụng khác mà bạn viết / sử dụng để truy cập. Hãy chắc chắn rằng bạn không trộn chúng lên bất cứ nơi nào trong tập tin conf, script, v.v.

Hy vọng một trong những điều này sẽ khắc phục vấn đề cho bạn.

Trên một lưu ý phụ, mongodb.conftập tin của tôi là trống rỗng. Mặc dù với nó trống, mặc dù, bạn cần phải chỉ cho nó một cách chính xác.


2

Tôi đã thử điều này và nó đã làm việc.

sudo chown -R mongodb:mongodb /var/log/mongodb
sudo chown -R mongodb:mongodb /var/lib/mongodb
sudo chmod -R 755 /var/lib/mongodb
sudo chmod -R 755 /var/log/mongodb

1

Tôi gặp phải vấn đề nâng cấp từ mongo đi kèm với Centos 7 Repos, đến repos của chính Mongos. Nâng cấp hiệu quả từ V2 lên V3.

Hóa ra repo centos 7 yêu cầu người dùng mongodb , trong khi repo riêng của mongos muốn người dùng mongod

Cuối cùng, đó là tệp nhật ký vẫn tồn tại từ bản cài đặt cũ mà bản cài đặt mới không thể ghi vào, vì tên người dùng khác nhau và tôi đã không nhận thấy.


1

Trên hệ thống của tôi (Fedora) tôi có "/ var / log" trên một tmpfs (ram), mỗi lần tôi khởi động lại mọi thứ trên phân vùng đó sẽ bị mất. Nhiều người vì điều này vì họ có ổ SSD và muốn giảm I / O (tiết kiệm tuổi thọ ổ đĩa).

Giải pháp là tạo thư mục / var / log / mongodb và đặt mongodb làm chủ sở hữu mỗi khi hệ thống khởi động lại.

Sử dụng một tập lệnh như:

#!/bin/sh
sudo mkdir /var/log/mongodb
sudo chown mongodb:mongodb /var/log/mongodb

Nếu bạn không chắc chắn người dùng được sử dụng bởi mongod chỉ cần làm:

cat /etc/passwd | grep mongo

Thêm tập lệnh để khởi động hệ thống của bạn.


0

Bạn không chỉnh sửa đường dẫn. Tôi đã giải quyết vấn đề bằng lệnh:

mongod --dbpath /data/mongo

0

Đây là một vấn đề cho phép. Khi chúng ta thay đổi đường dẫn của thư mục dữ liệu hoặc tệp nhật ký thì chúng ta phải cấp quyền cho thư mục mới. Sau đó, nó chạy tốt. Nếu có bất kỳ vấn đề nào xảy ra như thế này, trước tiên hãy kiểm tra tệp nhật ký "mongod.log".


Điều này không có ích, tôi đã cấp quyền đầy đủ cho thư mục "Nhật ký" cho người dùng đang chạy dịch vụ mongod, tôi đang sử dụng Windows Server 2016. Vẫn không thể khởi động lại dịch vụ sau khi thay đổi đường dẫn đến tệp nhật ký, vẫn nhận được lỗi: "Dịch vụ không đáp ứng với chức năng điều khiển.", có ý kiến ​​nào không?
Eddie Kumar

0

Dừng máy chủ MongoDB:

service mongod stop

Sao chép thư mục mongo vào thư mục mới:

rsync -av /var/lib/mongo /home/data/

Đổi tên thư mục cũ:

mv /var/lib/mongo /var/lib/mongo.bak

Symlink đến vị trí mới:

ln -s /home/data/mongo /var/lib/mongo

Khởi động máy chủ MongoDB:

service mongod start
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.