Hướng Dẫn Cài Đặt, Cấu Hình và Khăc Phục Một Số Lỗi Cơ Bản Khi Cài Đặt Mongodb

Ở bài viết này mình sẽ cùng các bạn lược qua cách 1 số cài đặt cơ bản và cách khắc phục 1 số lỗi phát sinh khi làm việc với mongodb. Về giới thiệu sơ lược về nó mình sẽ không đề cập vì có quá nhiều bài viết về nó. Dưới đây là những phần cơ bản mà mình sẽ đề cập trong bài viết này.
  • Cài đặt mongodb cơ bản
  • Một số thiết lập cơ bản trong mongodb
  • Các lỗi phát sinh khi sử dụng mongodb
  • Một số công cụ làm việc với mongodb


1. Cài đặt mongodb cơ bản.
a. Cài đặt mongodb
 - Các cài đơn giản nhất là làm theo hướng dẫn trên trang chủ của mongodb
 - Tại đó có 2 phân chính được định rõ là:
            + Install mongodb comunity edition: Phiên bản dành cho người dùng thường
            + Install mongodb enterprise: Phiên bản dành cho doanh nghiệp
 Tất nhiên ở đây mình sẽ chọn bản community dành cho cộng đồng và quan trọng hơn hết là nó free. Bạn có thể xem chi tiết tại đây
 Trong liên kết này ở đây bạn chọn hđh tương thích để cài đặt. ở đây máy tính mình là centos lên mình sẽ chọn RedHad (các hệ điều hành khác cũng tương tự bạn nhé 😃). Mình tiến hành theo các bước (mình chọn bản mongo là 3.4)
     + B1: tạo file mongodb-org-3.4.repo theo đường dẫn: /etc/yum.repos.d/
     + B2: copy nội dung theo hướng dẫn trên trang chủ
[mongodb-org-3.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc
    + B3: vào cửa sổ terminal gõ lệnh: sudo yum install -y mongodb-org , lệnh này cài đặt với quyền admin lên cần tiền tố sudo phía trước
  • Tương tự nếu bạn muốn gỡ cài đặt bạn cũng xem tại phần lựa chọn này có cả hướng dẫn cài đặt
        Sau khi cài đặt xong bạn nhớ chạy lệnh sau:
  • sudo service mongod start : để start service mongodb
  • sudo chkconfig mongod on: để thiết lập cho mongodb tự động khởi động cùng windows
  • sudo service mongod restart: để khởi động lại sau mỗi thiết lập trên mongodb
  • systemctl enable mongod.service: sử dụng thiết lập tự động khởi động sau khi reboot server
   b. Các tập tin cần chú ý và liên quan tới cấu hình mongodb trong quá trình sử dụng
  • mongod.conf: đường dẫn (/etc/mongod.conf), với các thiết lập
    • Authenticate: thay đổi tùy chọn #security thành security: {authorization: "enabled"} => chấp nhận các kết nối từ xa phải có thông tin tài khoản và mật khẩu  (nhớ bỏ dấu # nhé hehe)
    • Thay đổi port: xem trong file để chỉnh sửa, mặc định là port 27017
    • Thay đổi cổng, và ip: mặc định là 127.0.0.1 => lên thay thành 0.0.0.0 để đảm bảo authen mongodb được từ xa.
     Chú ý: Các cài đặt trên ubuntu và hệ điều hành khác tương tự. Bạn có thể xem danh sách cài đặt chi tiết tại trang chủ mongodb tại đây.
2. Một số lệnh thiết lập cơ bản trong mongodb
  • use name_db: vừa switch sang db mới, đồng thời tạo db mới nếu db switch không tồn tại. (Chú ý nếu bạn không tạo collection nào trong db bạn vừa switch qua lần đầu thì db này sẽ không tồn tại => vì vậy ngay khi switch qua 1 db mới tạo bạn phải insert 1 collection test để đảm bảo db này tồn tai. Cách kiểm tra tồn tại sử dụng show dbs để xem danh sách db)
  • db.createUser({user: <user_name>, pwd: <password>, roles:[ ... ]}) : Tạo 1 tài khoản truy cập cơ sở dữ liệu chỉ định. Sử dụng thiết lập này rất hữu ích vì như mình đã đề cập trên thì ta sử dụng thiết lập này sẽ chỉ cho phép truy cập csdl từ xa mà không cần phải cấp phép cho ip. Ví dụ: 
    • db.createUser({
             user:"demo_user_login",
             pwd:"demo_user_pass",
             roles:["readWrite"]
      })
  • db.auth(‘ username ’, ‘ password ’) : check quyền authen với db vừa switch qua, Nếu xác thực thành công trả về 1, thất bại trả về 0
  • db.changeUserPassword("accountUser", "SOh3TbYhx8ypJPxmt1oOfL"): Đổi mật khẩu cho user
  • show databases hoặc show dbs: Hiển thị danh sách các db có sẵn trên môi trường
  • show collections: Hiển thị toàn bộ các collection trong database
  • Và khá nhiều lệnh khác cần bạn khám phá thêm ở đây: https://docs.mongodb.com/manual/reference/mongo-shell/
3. Các lỗi phát sinh khi sử dụng Mongodb
 a. Lỗi không thể start server mongodb => khắc phục
  • Cách 1: Gỡ đi cài lại theo hướng dân trên trang chủ như đã đề cập ở trên
  • Cách 2: Thử lại với khối lệnh tương tự như service kia
    • sudo systemctl stop mongod.service
    • sudo systemctl restart mongod.service
    • sudo systemctl start mongod.service
  • Cách 3:  Xem lại thiết đặt trong file mongodb: nếu thêm thừa chỗ nào đó xóa đi => khởi động lại service mongodb
  • Cách 4:    + Xóa file mongod.lock theo đường dẫn: /var/lib/mongo
                            + Xóa file mongod.pid theo đường dẫn /run/mongodb
  • Cài dặt lại monodb: đây là cách cũng không phải là một cách tồi để thử lại
  b. Không thể tạo user khi create database, không thể tạo database (thường báo lỗi authentication..)
     - Thử kiểm tra cấu hình trong tập tin etc/mongo.conf
       => Tìm tới dòng security, bạn command lại dòng đó thành #security .
       => Khởi động lại service mongo: sudo restart service mongod
       => Thử tạo 1 db mới hoặc thêm 1 user mới vào db đã tồn tại
   Giải thích: Do bạn thiết lập chế độ bảo mật ở trong file mongod.conf (mình đã đề cập ở trên đầu) vậy lên bạn sẽ không thể tạo tài khoản cho 1 database được tạo mới. Bạn buộc phải tắt chế độ này đi để tạo lại database mới và kèm theo là tài khoản sử dụng cho db.
   Chú ý: Sau khi cài đặt db mới và quyền người dùng thiết lập cho db thành công bạn hãy bật lại chế độ security để đảm bảo quyền authen từ xa được thiết lập (bằng cách bỏ dấu “#” ở trước đi và nhớ restart lại service mongo nhé)
c. Không thể truy cập cở sở dữ liệu mongodb từ xa (từ client code chẳng hạn hay từ tool client)
 - Mặc dù đã tạo 1 user và phân quyền cho nó rồi, Khi sử dụng ở client truy cập thông qua ip server+ các thông tin kết nối tới db tuy nhiên bạn lại không thể viết nodejs, C#, Java ... kết nối tới mongodb từ client hay dùng tool kết nối được. Dưới đây là các cách khắc phục nó
    Cách 1: Mở 1 port khai để chấp nhận kết nối từ xa trong mongodb với csf
     Mở port 27017 bằng cách thêm vào file csf hoặc iptable (mình sẽ thêm vào csf vì csf quản lý iptable của mình rồi, nếu bạn dùng iptable thì cách thêm tương tự). Cách thêm
        Mở file csf.conf ( /etc/csf/csf.conf) : Tìm tới 4 dòng trông giống như thế này
                 # Allow incoming IPv6 TCP ports
                 TCP6_IN = "20,21,22,25,53,80, ....
                 # Allow outgoing IPv6 TCP ports
                 TCP6_OUT = "993,995,465,587,20, ...
                 # Allow incoming IPv4 TCP ports
                 TCP4_IN = "20,21,22,25,53,80, ....
                 # Allow outgoing IPv4 TCP ports
                 TCP4_OUT = "993,995,465,587,20, ...
     Thực hiện:
  • Thêm port 27017 vào 4 dòng này TCP6_IN, TCP6_OUT, TCP4_IN và TCP4_OUT
  • Vào file mongod.conf (/etc/mongod.conf): enable authenticate theo đề cập ở trên
  • Restart service csf với lệnh: csf –r
  • Restart service mongodb theo như hướng dẫn ở trên
    Cách 2: Chỉ cho phép 1 ip chỉ định được phép truy cập vào port mongodb
  • Mở file csf.allow (/etc/csf/csf.allow): thêm đoạn lệnh này vào cuối file: tcp|in|d=27017|s=117.6.39.60 
    • Trong đó 27017 là cổng mongodb, 117.6.39.60 thay bằng ip của bạn (để xem ip của bạn vui lòng vào địa chỉ sau https://whoer.net/ )
  • Restart lại csf: csf -r 
       => Cách này không hay vì ip có thể bị thay đổi bất cư khi nào, khi khởi động lại máy hay mất mạng đều dẫn tới tình trang ip bị đổi => phải cấp phép lại ip vào mongo rất mất thời gian
=> Khuyên dùng: Cách 1
d. Một số lỗi khác
Khi chaỵ mongo với console nếu bạn thấy xuất hiện lỗi như này:

Error loading history file: FileOpenFailed: Unable to fopen() file /root/.dbshell: No
=> Khắc phục xem tại đây
4. Một số công cụ làm việc với mongodb
  • MongoChef: (https://studio3t.com/ ) 1 supper tool quản lý mongodb. Có cả bản mất phí và bản free cho bạn sử dụng. hỗ trợ tốt các dòng lệnh truy vấn với snippet khá tốt. Hỗ trợ export, import data …vv và rất nhiều tính năng mà bạn có thể tải về để trải nghiệm thêm
  • Robomongo: Tool này khá nhẹ. Không hỗ trợ snippet được tốt như mongoChef. Cửa số truy vấn hơn nhỏ. Tuy nhiên nếu để sử dụng view thì khá oke
  • Mongo booter: dùng ổn cũng tương tự như Robomongo
Trên đây là 1 số thiết lập cơ bản cũng như cách sử dụng cơ bản với mongodb. Ở bài sau mình sẽ cùng các bạn đi tìm hiểu qua 1 số câu lệnh cơ bản trong mongodb!. Đừng quên chia sẻ quan điểm của bạn để chúng ta cùng học hỏi thêm nhé 🤗!
Tham khảo thêm:
    https://docs.mongodb.com/v3.2/tutorial/change-own-password-and-custom-data/