Ở 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.
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ủ
2. Một số lệnh thiết lập cơ bản trong mongodb
a. Lỗi không thể start server mongodb => khắc phục
- 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:
=> 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
Tham khảo thêm:
https://docs.mongodb.com/v3.2/tutorial/change-own-password-and-custom-data/
- 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]+ 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
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
- 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
- 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
- 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.
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.createUser({
- 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/
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
- 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
- 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
- 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
=> 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
Tham khảo thêm:
https://docs.mongodb.com/v3.2/tutorial/change-own-password-and-custom-data/