Để ứng dụng kết nối với máy chủ cơ sở dữ liệu, chúng phải sử dụng chuỗi kết nối, là một biểu thức chứa tất cả các tham số cần thiết. Chuỗi kết nối cung cấp phiên bản máy chủ, tên cơ sở dữ liệu, chi tiết xác thực và các tham số khác để tương tác với máy chủ cơ sở dữ liệu.
Định dạng cho chuỗi kết nối
Một trong các phương thức đã cho sẽ thiết lập chuỗi kết nối MongoDB. Định dạng kết nối danh sách hạt giống DNS hoặc Định dạng chuỗi kết nối chuẩn.
Định dạng chuẩn để kết nối các chuỗi
Có ba loại triển khai MongoDB cơ bản:độc lập, tập hợp bản sao và cụm phân đoạn, tất cả đều được mô tả ở đây.
Đây là cách điển hình để tham gia các URI.
mongodb://[username:password@]host1[:port1][,...hostN[:portN]][/[defaultauthdb][?options]]
Ví dụ:
Độc lập
mongodb://mongodb0.example.com:27017
Độc lập thực thi kiểm soát truy cập:
mongodb://myDBReader:D1fficultP%[email protected]:27017/?authSource=admin
Bộ bản sao
mongodb://mongodb0.example.com:27017,mongodb1.example.com:27017,mongodb2.example.com:27017/?replicaSet=myRepl
Bộ bản sao thực thi kiểm soát truy cập:
mongodb://myDBReader:D1fficultP%[email protected]:27017,mongodb1.example.com:27017,mongodb2.example.com:27017/?authSource=admin&replicaSet=myRepl
Cụm được chia nhỏ
mongodb://mongos0.example.com:27017,mongos1.example.com:27017,mongos2.example.com:27017
Cụm phân đoạn thực thi kiểm soát truy cập:
mongodb://myDBReader:D1fficultP%[email protected]:27017,mongos1.example.com:27017,mongos2.example.com:27017/?authSource=admin
Các thành phần của chuỗi kết nối
Các thành phần của chuỗi kết nối URI tiêu chuẩn:
- mongodb:// - Một tiền tố cần thiết cho biết một chuỗi kết nối chuẩn.
- tên người dùng:password @ - Thông tin xác thực là tùy chọn. Nếu authSource được cung cấp, máy khách sẽ cố gắng xác thực người dùng. Nếu không chỉ định authSource, ứng dụng khách sẽ xác minh người dùng dựa trên defaultauthdb. Ngoài ra, cơ sở dữ liệu quản trị được sử dụng nếu không có defaultauthdb.
- máy chủ [:port] - Máy chủ lưu trữ (và tùy chọn số cổng) mà cá thể mongod đang hoạt động (hoặc cá thể mongos trong trường hợp cụm phân đoạn). Bạn có thể chỉ ra tên máy chủ, địa chỉ IP hoặc ổ cắm trong miền UNIX. Cho biết số lượng máy chủ cần thiết cho cấu trúc liên kết giới thiệu của bạn:
Trong trường hợp chỉ có một phiên bản mongod, hãy cung cấp tên máy chủ của phiên bản mongod.
Cung cấp (các) tên máy chủ của (các) phiên bản mongod được chỉ định trong cài đặt tập hợp bản sao cho tập hợp bản sao.
Chỉ ra (các) tên máy chủ của bản sao mongos cho một cụm phân đoạn. Không chỉ định số cổng, cổng chung 27017 được sử dụng. - / defaultauthdb - Không bắt buộc. Nếu chuỗi kết nối chứa tên người dùng:password @ thông tin đăng nhập, nhưng tùy chọn authSource không được cung cấp, thì cơ sở dữ liệu xác thực sẽ được sử dụng. Máy khách sử dụng cơ sở dữ liệu quản trị để xác thực người dùng nếu cả authSource và defaultauthdb đều không được cung cấp.
- ?
- Không bắt buộc. Các tham số dành riêng cho kết nối được chỉ định trong các cặp name> =value> trong chuỗi truy vấn. Danh sách các lựa chọn có sẵn có thể được xem trong phần Tùy chọn chuỗi kết nối. Dấu gạch chéo (/) phải được bao gồm giữa máy chủ và dấu chấm hỏi (?) Để bắt đầu chuỗi tùy chọn nếu không có cơ sở dữ liệu nào được chỉ định trong chuỗi kết nối.
Định dạng kết nối cho danh sách gốc DNS
Ngoài ra còn có một danh sách hạt giống do DNS xây dựng cho các kết nối MongoDB. Sử dụng DNS để xây dựng danh sách các máy chủ có thể truy cập cung cấp khả năng triển khai linh hoạt hơn và khả năng chuyển đổi máy chủ theo chu kỳ mà không cần định cấu hình lại máy khách.
Sử dụng tiền tố mongodb + srv thay vì tiền tố chuỗi kết nối MongoDB thông thường để sử dụng danh sách hạt giống DNS. Để cho người dùng biết rằng tên máy chủ sau đây là bản ghi DNS SRV, hãy sử dụng tiền tố + srv. Sau đó, mongosh hoặc trình điều khiển sẽ truy vấn hệ thống tên miền (DNS) để khám phá máy chủ nào đang thực thi các phiên bản mongod.
Lưu ý: Tùy chọn tls (hoặc ssl tương ứng) được đặt thành true nếu biến chuỗi kết nối + srv được sử dụng. Bằng cách chỉ định rõ ràng tùy chọn tls thành false trong chuỗi truy vấn, bạn có thể ghi đè hành vi này và sử dụng tls =false thay thế.
Chuỗi kết nối danh sách hạt giống DNS thường trông giống như ví dụ sau:
mongodb+srv://server.example.com/
Thiết lập DNS có thể trông giống như sau:
Record TTL Class Priority Weight Port Target _mongodb._tcp.server.example.com. 86400 IN SRV 0 5 27317 mongodb1.example.com. _mongodb._tcp.server.example.com. 86400 IN SRV 0 5 27017 mongodb2.example.com.
Kết nối với các thành viên của danh sách hạt giống cho phép khách hàng truy cập vào thư mục của các thành viên tập hợp bản sao khác để thiết lập kết nối. Máy chủ có thể tạo danh sách máy chủ khác với danh sách gốc vì máy khách thường sử dụng bí danh DNS trong danh sách gốc của họ. Các thành viên tập hợp bản sao chỉ có thể được truy cập thông qua tên máy chủ của họ; do đó, nếu điều này xảy ra, người dùng sẽ sử dụng tên máy chủ được cung cấp bởi bản sao thay vì những tên được nêu trong danh sách gốc.
Lưu ý: Bản ghi SRV được cung cấp bởi tên máy chủ được chỉ định phải có cùng tên miền mẹ (example.com) với chính tên máy chủ đó. Bạn sẽ không được phép kết nối nếu miền mẹ và tên máy chủ không khớp.
Ngoài ra, chuỗi kết nối danh sách hạt giống DNS cho phép bạn cung cấp các tham số như một phần của URL theo cách giống như cách mà các chuỗi thông thường làm. Bạn cũng có thể sử dụng bản ghi TXT để chỉ ra các cài đặt sau khi sử dụng chuỗi kết nối danh sách gốc DNS:
authSource replicaSet
Chỉ một bản ghi TXT có thể được chỉ định cho mỗi phiên bản mongod. Máy khách sẽ trả về lỗi nếu DNS có nhiều mục nhập TXT hoặc nếu mục nhập TXT chứa thuộc tính không phải là replicaSet hoặc authSource.
Bản ghi TXT cho server.example.com sẽ giống như sau:
Record TTL Class Text server.example.com. 86400 IN TXT "replicaSet=mySet&authSource=authDB"
Chuỗi kết nối này được tạo từ các mục DNS SRV cũng như cài đặt bản ghi TXT như sau:
mongodb://mongodb1.example.com:27317,mongodb2.example.com:27017/?replicaSet=mySet&authSource=authDB
Các lựa chọn của bản ghi TXT có thể bị ghi đè bằng cách cung cấp tham số chuỗi truy vấn của URL. Chuỗi truy vấn trong trường hợp sau sẽ ghi đè tùy chọn authSource được đặt trong bản ghi TXT của mục nhập DNS.
mongodb+srv://server.example.com/?connectTimeoutMS=300000&authSource=aDifferentAuthDB
Sử dụng ghi đè authSource, chuỗi kết nối điển hình sẽ giống như sau:
mongodb://mongodb1.example.com:27317,mongodb2.example.com:27017/?connectTimeoutMS=300000&replicaSet=mySet&authSource=aDifferentAuthDB
Lưu ý: Nếu tên máy chủ được chỉ định trong chuỗi kết nối không có bất kỳ bản ghi DNS nào được liên kết với nó, thì tham số mongodb + srv sẽ không thành công. Lưu ý cuối cùng, khi sử dụng sửa đổi chuỗi kết nối + srv, tùy chọn sử dụng TLS (hoặc bảo mật SSL tương đương) được đặt thành true cho kết nối. Bằng cách chỉ định rõ ràng tùy chọn tls thành false trong chuỗi truy vấn, bạn có thể ghi đè hành vi này và sử dụng tls =false thay thế.
Nhận chuỗi kết nối MongoDB của bạn
Bạn sẽ cần một chuỗi URI để kết nối với MongoDB. Nếu bạn liên kết đến triển khai MongoDB bằng trình điều khiển Mongo shell, La bàn hoặc MongoDB, bạn sẽ được yêu cầu cung cấp URI (Mã định danh tài nguyên đồng nhất).
Giả sử rằng bạn đã thiết lập xác thực trong MongoDB và tạo tên người dùng và mật khẩu cho quyền đọc và ghi đối với cơ sở dữ liệu MongoDB khi sử dụng chuỗi URI được cung cấp.
Trong trường hợp này, bạn có thể sử dụng thông tin đăng nhập và mật khẩu bạn đã tạo cho vai trò readWriteAnyDatabase cũng như tên cơ sở dữ liệu quản trị trong chuỗi kết nối của bạn để kết nối với MongoDB.
Tùy chọn cho chuỗi kết nối
Phần này giải thích các cách khác nhau mà bạn có thể kết nối với Internet.
- Ở dạng cặp tên =giá trị, các tùy chọn kết nối có sẵn.
- Khi sử dụng trình điều khiển, tên tùy chọn không phân biệt chữ hoa chữ thường.
- Tên tùy chọn không phân biệt chữ hoa chữ thường khi sử dụng mongosh hoặc mongo shell truyền thống (phiên bản 4.2 trở lên).
- Tên tùy chọn có phân biệt chữ hoa chữ thường khi sử dụng shell mongo phiên bản 4.0 hoặc cũ hơn.
- Trường hợp không bao giờ là vấn đề khi hiển thị giá trị.
Ký tự dấu và (&) có thể phân tách các lựa chọn, chẳng hạn như name1 =value1 &name2 =value2. Các tham số ReplicaSet và connectTimeoutMS được bao gồm trong kết nối sau:
mongodb://db1.example.net:27017,db2.example.net:2500/?replicaSet=test&connectTimeoutMS=300000
Lưu ý: Trình điều khiển hiện chấp nhận dấu chấm phẩy (;) làm dấu phân tách tùy chọn để duy trì khả năng tương thích với phần mềm cũ hơn.
Ví dụ về chuỗi kết nối
Bạn sẽ tìm thấy các ví dụ về URI cho các điểm kết nối phổ biến trong các ví dụ bên dưới.
Chạy cục bộ Máy chủ cơ sở dữ liệu
Cổng mặc định của máy chủ cơ sở dữ liệu cục bộ có thể được sử dụng để thiết lập kết nối bằng lệnh sau:
mongodb://localhost
Cơ sở dữ liệu quản trị
Để đăng nhập vào cơ sở dữ liệu quản trị dưới dạng hóa thạch bằng mật khẩu Foillinux, bạn phải tuân theo các lệnh sau:
mongodb://foss:fosslinux@localhost
Cơ sở dữ liệu hồ sơ
Kết nối và đăng nhập vào cơ sở dữ liệu hồ sơ bằng mật khẩu Folinux với tư cách là quản trị viên hệ thống.
mongodb://foss:fosslinux@localhost/records
Cổng miền trong UNIX
Khi gắn vào ổ cắm miền UNIX, hãy sử dụng chuỗi kết nối được mã hóa URL.
MongoDB liên kết đến điểm cuối miền UNIX bằng đường dẫn sau:
mongodb://%2Ftmp%2Fmongodb-27017.sock
Lưu ý: tất cả các trình điều khiển không hỗ trợ ổ cắm miền UNIX. Để tìm hiểu thêm về trình điều khiển của bạn, hãy chuyển đến phần tài liệu Trình điều khiển.
Đặt bản sao với người dùng trên các máy riêng biệt
Dưới đây là kết nối đến tập hợp bản sao hai thành viên trên db1.example.net và db2.example.net:
mongodb://db1.example.net,db2.example.com/?replicaSet=test
Lưu ý: (Các) bản sao mongod được cung cấp trong cấu hình bộ bản sao phải được chỉ định cho một bộ bản sao.
Đặt bản sao với người dùng trên máy chủ cục bộ
Các cổng 27017, 27018 và 27019 được sử dụng để thiết lập kết nối với tập hợp bản sao hoạt động trên localhost:
mongodb://localhost,localhost:27018,localhost:27019/?replicaSet=test
Đọc bộ bản sao phân phối
Việc kết nối với một tập hợp bản sao ba thành viên và phân phối các lần đọc cho các thành viên thứ cấp yêu cầu phương pháp được liệt kê bên dưới:
mongodb://example1.com,example2.com,example3.com/?replicaSet=test&readPreference=secondary
Tập hợp bản sao viết về mối quan tâm ở mức cao
Kết nối với một tập hợp bản sao có chứa mối quan tâm ghi và thời gian chờ hai giây trong khi chờ sao chép qua phần lớn các thành viên biểu quyết mang dữ liệu được thực hiện bằng cách sử dụng cấu hình này:
mongodb://example1.com,example2.com,example3.com/?replicaSet=test&w=majority&wtimeoutMS=2000
Cụm được chia sẻ
Có thể kết nối với một cụm phân đoạn nhiều phiên bản bằng cách sử dụng như sau:
mongodb://router1.example.com:27017,router2.example2.com:27017,router3.example3.com:27017/
Cụm bản đồ MongoDB
Phần sau thiết lập kết nối với cụm MongoDB Atlas bằng thông tin đăng nhập AWS IAM để xác thực:
mongosh 'mongodb+srv://<aws access key id>:<aws secret access key>@cluster0.example.com/testdb?authSource=$external&authMechanism=MONGODB-AWS'
Ví dụ này cho thấy cách sử dụng phương thức xác thực MONGODB-AWS và $ bên ngoài authSource để kết nối với Atlas thông qua thông tin đăng nhập AWS IAM.
Giá trị AWS SESSION TOKEN authMechanismProperties phải được cung cấp nếu bạn đang sử dụng mã thông báo phiên AWS, như sau:
mongosh 'mongodb+srv://<aws access key id>:<aws secret access key>@cluster0.example.com/testdb?authSource=$external&authMechanism=MONGODB-AWS&authMechanismProperties=AWS_SESSION_TOKEN:<aws session token>'
Lưu ý: Miễn là ID khóa truy cập AWS hoặc Khóa truy cập bí mật chứa bất kỳ ký tự nào sau đây:(: /? # [] @ ), bạn phải sử dụng mã hóa phần trăm để mã hóa chúng.
Bạn cũng có thể sử dụng các biến môi trường AWS IAM thông thường để chỉ định các thông tin xác thực này trên nền tảng của mình. Khi sử dụng xác thực MONGODB-AWS, mongosh kiểm tra và xác định nếu có các biến môi trường sau:
-
AWS_ACCESS_KEY_ID
-
AWS_SECRET_ACCESS_KEY
-
AWS_SESSION_TOKEN
Chuỗi kết nối không cần bao gồm các thông tin đăng nhập này nếu được định cấu hình.
Trong bash shell, các biến sau được đặt trong ví dụ sau:
export AWS_ACCESS_KEY_ID='<aws access key id>' export AWS_SECRET_ACCESS_KEY='<aws secret access key>' export AWS_SESSION_TOKEN='<aws session token>'
Cú pháp để thiết lập các biến môi trường sẽ khác trong các trình bao khác, vì vậy hãy lưu ý điều này. Để biết thêm thông tin, hãy truy cập tài liệu về nền tảng của bạn.
Lệnh sau sẽ xác nhận xem một số biến môi trường nhất định đã được đặt hay chưa:
env | grep AWS
Đoạn mã sau trình bày cách thiết lập kết nối với cụm MongoDB Atlas bằng cách sử dụng các biến được liệt kê bên dưới:
mongosh 'mongodb+srv://cluster0.example.com/testdb?authSource=$external&authMechanism=MONGODB-AWS'
Đó là tất cả những gì bạn cần biết về chuỗi kết nối trong MongoDB. Chúng tôi hy vọng bạn thấy hướng dẫn bài viết hữu ích. Nếu có, vui lòng để lại nhận xét trong phần bình luận. Cảm ơn vì đã đọc.