使用MongoDB Connector連接MongoDB數(shù)據(jù)庫(kù)
本文介紹如何創(chuàng)建MongoDB Connector,將MongoDB數(shù)據(jù)庫(kù)和云消息隊(duì)列 Kafka 版的數(shù)據(jù)進(jìn)行雙向同步。
前提條件
已開(kāi)通對(duì)象存儲(chǔ)OSS服務(wù)并創(chuàng)建存儲(chǔ)空間(Bucket)。更多信息,請(qǐng)參見(jiàn)控制臺(tái)創(chuàng)建存儲(chǔ)空間。
已開(kāi)通Serverless應(yīng)用引擎服務(wù),更多信息,請(qǐng)參見(jiàn)準(zhǔn)備工作。
已創(chuàng)建專(zhuān)有網(wǎng)絡(luò)及交換機(jī)。更多信息,請(qǐng)參見(jiàn)快速搭建(ROS)。
已購(gòu)買(mǎi)并部署云消息隊(duì)列 Kafka 版實(shí)例。更多信息,請(qǐng)參見(jiàn)購(gòu)買(mǎi)并部署實(shí)例。
步驟一:創(chuàng)建數(shù)據(jù)表
登錄云數(shù)據(jù)庫(kù)MongoDB管理控制臺(tái),創(chuàng)建實(shí)例或使用已有實(shí)例。以創(chuàng)建分片集群實(shí)例為例,詳細(xì)步驟,請(qǐng)參見(jiàn)創(chuàng)建分片集群實(shí)例。
重要創(chuàng)建實(shí)例或使用已有實(shí)例時(shí),請(qǐng)保證實(shí)例與前提條件中云消息隊(duì)列 Kafka 版實(shí)例使用相同的VPC,否則將會(huì)導(dǎo)致鏈路不通。
創(chuàng)建實(shí)例時(shí)會(huì)自動(dòng)創(chuàng)建root用戶名,設(shè)置密碼時(shí)請(qǐng)勿包含at(@)或冒號(hào)(:)。
創(chuàng)建實(shí)例時(shí),請(qǐng)選擇與云消息隊(duì)列 Kafka 版實(shí)例相同的vSwitch,若使用已有實(shí)例,請(qǐng)檢查vSwitch是否相同,若不在同一vSwitch且在同一VPC下,可以將Kafka實(shí)例的vSwitch網(wǎng)段添加至MongoDB訪問(wèn)白名單中。詳情請(qǐng)見(jiàn)設(shè)置白名單。vSwitch的網(wǎng)段信息可以在專(zhuān)有網(wǎng)絡(luò)控制臺(tái)的交換機(jī)詳情頁(yè)面獲取。
實(shí)例創(chuàng)建完成后,在實(shí)例列表頁(yè)面單擊目標(biāo)實(shí)例,然后在實(shí)例詳情頁(yè)面的左側(cè)導(dǎo)航欄,完成以下操作。
將DMS服務(wù)器的IP地址加入白名單。更多信息,請(qǐng)參見(jiàn)設(shè)置白名單。
在基本信息頁(yè)面的連接信息區(qū)域,記錄專(zhuān)有網(wǎng)絡(luò)的連接地址。
在基本信息頁(yè)面,單擊登錄數(shù)據(jù)庫(kù)進(jìn)入DMS數(shù)據(jù)管理服務(wù)平臺(tái)。更多信息,請(qǐng)參見(jiàn)通過(guò)DMS連接MongoDB分片集群實(shí)例。
在目標(biāo)實(shí)例中創(chuàng)建數(shù)據(jù)庫(kù)和集合。
在SQL Console頁(yè)面中,執(zhí)行以下命令,創(chuàng)建test數(shù)據(jù)庫(kù)。
use test
在test數(shù)據(jù)庫(kù)中執(zhí)行以下命令,創(chuàng)建名為mongo的集合。
db.createCollection("mongo")
更多信息,請(qǐng)參見(jiàn)創(chuàng)建數(shù)據(jù)庫(kù)和集合并寫(xiě)入數(shù)據(jù)。
步驟二:創(chuàng)建Connector
Source Connector
下載MongoDB Connector1.8.1版本文件,解壓至本地,目錄結(jié)構(gòu)如下所示。
重要下載MongoDB Connector文件時(shí)請(qǐng)選擇適配Java 8的版本。
. ├── assets │ ├── mongodb-leaf.png │ └── mongodb-logo.png ├── doc │ ├── LICENSE.txt │ └── README.md ├── etc │ ├── MongoSinkConnector.properties │ └── MongoSourceConnector.properties ├── lib │ └── mongo-kafka-connect-1.9.1-confluent.jar └── manifest.json
從Maven倉(cāng)庫(kù)中下載avro-1.9.2.jar和mongodb-driver-sync-4.9.0.jar,將這兩個(gè)jar包移動(dòng)至MongoDB Connector文件夾中的lib目錄下,然后將其壓縮成.ZIP文件,上傳至提前創(chuàng)建好的OSS Bucket。更多信息,請(qǐng)參見(jiàn)控制臺(tái)上傳文件。
登錄云消息隊(duì)列 Kafka 版控制臺(tái),在概覽頁(yè)面的資源分布區(qū)域,選擇地域。
在左側(cè)導(dǎo)航欄,選擇
。在任務(wù)列表頁(yè)面,單擊創(chuàng)建任務(wù)列表。
在創(chuàng)建任務(wù)面板。設(shè)置任務(wù)名稱,配置以下配置項(xiàng)。
任務(wù)創(chuàng)建
在Source(源)配置向?qū)Вx擇數(shù)據(jù)提供方為Apache Kafka Connect,單擊下一步。
在連接器配置配置向?qū)ВO(shè)置以下配置項(xiàng),然后單擊下一步。
配置項(xiàng)
參數(shù)
說(shuō)明
Kafka Connect插件
Bucket存儲(chǔ)桶
選擇OSS Bucket。
文件
選擇上傳的.ZIP文件。
Kafka資源信息
Kafka參數(shù)配置
選擇Source Connect。
Kafka實(shí)例
選擇前提條件中創(chuàng)建的實(shí)例。
專(zhuān)有網(wǎng)絡(luò)VPC
選擇VPC ID。
交換機(jī)
選擇vSwitch ID。
安全組
選擇安全組。
Kafka Connect配置信息
解析當(dāng)前ZIP包下的properties文件
選擇新建properties文件。選擇.ZIP文件中包含的SourceConnector對(duì)應(yīng)的.properties文件。路徑為/etc/MongoSourceConnector.properties。
字段名
描述
connector.class
運(yùn)行的Connector包名稱,無(wú)需修改。
tasks.max
Task的最大數(shù)量。在MongoDB Source Connector中此參數(shù)取值只能為1。
connection.url
填寫(xiě)步驟一:創(chuàng)建數(shù)據(jù)表中獲取的MongoDB數(shù)據(jù)庫(kù)的專(zhuān)有網(wǎng)絡(luò)連接地址。地址中的****需替換為root賬號(hào)的密碼。
database
MongoDB數(shù)據(jù)庫(kù)名稱。
collection
MongoDB集合名稱。
topic.namespace.map
目標(biāo)Topic信息,為Key-Value 結(jié)構(gòu),Key的組成為
database.{collection}
,Value為目標(biāo)Topic名稱,此參數(shù)表示指定Collection的數(shù)據(jù)變化會(huì)傳輸至指定Topic中。在投遞數(shù)據(jù)前,請(qǐng)?zhí)崆皠?chuàng)建好目標(biāo)Topic。copy.existing
是否將源MongoDB Collection中的已存在數(shù)據(jù)全量同步至Kafka中。若為true,則在Connector首次啟動(dòng)時(shí),就會(huì)將MongoDB Collection中的存量數(shù)據(jù)全量同步至下游Kafka Topic中。建議在首次全量同步完成后,將該值更新為false,防止后續(xù)將Connector刪除重建后,再次進(jìn)行數(shù)據(jù)全量同步,導(dǎo)致重復(fù)消費(fèi)。
connector.class=com.mongodb.kafka.connect.MongoSourceConnector name=mongo-source batch.size=0 change.stream.full.document=updateLookup collection=testCollection connection.uri=mongodb://[username:password@]host1[:port1][,...hostN[:portN]][/[defaultauthdb][?options]] database=testDatabase poll.await.time.ms=5000 poll.max.batch.size=1000 tasks.max=1 topic.namespace.map={"testDatabase.testCollection": "targetTopic"} # 是否將源MongoDB Collection中的已存在數(shù)據(jù)全量同步至Kafka中。 # 若為true,則在Connector首次啟動(dòng)時(shí),就會(huì)將MongoDB Collection中的存量數(shù)據(jù)全量同步至下游Kafka Topic中。 # 建議在首次全量同步完成后,將該值更新為false,防止后續(xù)將Connector刪除重建后,再次進(jìn)行數(shù)據(jù)全量同步,導(dǎo)致重復(fù)消費(fèi)。 copy.existing=true
Connector全量參數(shù),請(qǐng)參見(jiàn)MongoDB Source Connector Properties。
在實(shí)例配置配置向?qū)ВO(shè)置以下參數(shù),然后單擊下一步。
配置項(xiàng)
參數(shù)
說(shuō)明
Worker規(guī)格
Worker規(guī)格
選擇合適的Worker規(guī)格。
最小Worker數(shù)
設(shè)置為1。
最大Worker數(shù)
設(shè)置為1。
Kafka Connect Worker配置
自動(dòng)創(chuàng)建Kafka Connect Worker依賴資源
建議勾選此項(xiàng),此時(shí)會(huì)在選擇的Kafka實(shí)例中自動(dòng)創(chuàng)建Kafka Connect運(yùn)行所需的一些Internal Topic以及ConsumerGroup,并將這些必填配置自動(dòng)填入配置框中,包括以下配置項(xiàng):
Offset Topic:用于存儲(chǔ)源數(shù)據(jù)偏移量,命名規(guī)則為
connect-eb-offset-<任務(wù)名稱>
。Config Topic:用于存儲(chǔ)Connectors以及Tasks的配置信息,命名規(guī)則為
connect-eb-config-<任務(wù)名稱>
。Status Topic:用于存儲(chǔ)Connectors以及Tasks狀態(tài)信息,命名規(guī)則為
connect-eb-status-<任務(wù)名稱>
。Kafka Connect Consumer Group:Kafka Connect Worker用于消費(fèi)Internal Topics的消費(fèi)組,命名規(guī)則為
connect-eb-cluster-<任務(wù)名稱>
。Kafka Source Connector Consumer Group:只針對(duì)Sink Connector有效,用于消費(fèi)源Kafka Topic中的數(shù)據(jù),命名規(guī)則為
connector-eb-cluster-<任務(wù)名稱>-<connector名稱>
。
在運(yùn)行配置配置向?qū)В瑢?b data-tag="uicontrol" id="uicontrol-g7e-c0c-q3o" class="uicontrol">日志投遞方式設(shè)置為投遞至SLS或者投遞至Kafka,在角色授權(quán)卡片設(shè)置Connect依賴的角色配置,然后單擊保存。
重要建議配置的角色包含AliyunSAEFullAccess權(quán)限,否則可能會(huì)導(dǎo)致任務(wù)運(yùn)行失敗。
任務(wù)屬性
設(shè)置此任務(wù)的重試策略及死信隊(duì)列。更多信息,請(qǐng)參見(jiàn)重試和死信。
等待任務(wù)狀態(tài)變?yōu)?b data-tag="uicontrol" id="uicontrol-vtx-cm0-vwk" class="uicontrol">運(yùn)行中,此時(shí)Connector已經(jīng)在正常工作中。
Sink Connector
下載MongoDB Connector1.8.1版本文件,解壓至本地,目錄結(jié)構(gòu)如下所示。
重要下載MongoDB Connector文件時(shí)請(qǐng)選擇適配Java 8的版本。
. ├── assets │ ├── mongodb-leaf.png │ └── mongodb-logo.png ├── doc │ ├── LICENSE.txt │ └── README.md ├── etc │ ├── MongoSinkConnector.properties │ └── MongoSourceConnector.properties ├── lib │ └── mongo-kafka-connect-1.9.1-confluent.jar └── manifest.json
從Maven倉(cāng)庫(kù)中下載avro-1.9.2.jar和mongodb-driver-sync-4.9.0.jar,將這兩個(gè)jar包移動(dòng)至MongoDB Connector文件夾中的lib目錄下,然后將其壓縮成.ZIP文件,上傳至提前創(chuàng)建好的OSS Bucket。更多信息,請(qǐng)參見(jiàn)控制臺(tái)上傳文件。
登錄云消息隊(duì)列 Kafka 版控制臺(tái),在概覽頁(yè)面的資源分布區(qū)域,選擇地域。
在左側(cè)導(dǎo)航欄,選擇
。在任務(wù)列表頁(yè)面,單擊創(chuàng)建任務(wù)列表。
在創(chuàng)建任務(wù)面板。設(shè)置任務(wù)名稱,配置以下配置項(xiàng)。
任務(wù)創(chuàng)建
在Source(源)配置向?qū)Вx擇數(shù)據(jù)提供方為Apache Kafka Connect,單擊下一步。
在連接器配置配置向?qū)ВO(shè)置以下配置項(xiàng),然后單擊下一步。
配置項(xiàng)
參數(shù)
說(shuō)明
Kafka Connect插件
Bucket存儲(chǔ)桶
選擇OSS Bucket。
文件
選擇上傳的.ZIP文件。
Kafka資源信息
Kafka參數(shù)配置
選擇Sink Connect。
Kafka實(shí)例
選擇前提條件中創(chuàng)建的實(shí)例。
專(zhuān)有網(wǎng)絡(luò)VPC
選擇VPC ID。
交換機(jī)
選擇vSwitch ID。
安全組
選擇安全組。
Kafka Connect配置信息
解析當(dāng)前ZIP包下的properties文件
選擇新建properties文件。選擇.ZIP文件中包含的SinkConnector對(duì)應(yīng)的.properties文件。路徑為/etc/MongoSinkConnector.properties。
字段名
描述
connector.class
運(yùn)行的Connector包名稱,無(wú)需修改。
tasks.max
Task的最大數(shù)量。
topics
數(shù)據(jù)源Topic名稱。不同Topic間以英文逗號(hào)(,)分隔。
connection.url
數(shù)據(jù)庫(kù)連接地址。填寫(xiě)步驟一:創(chuàng)建數(shù)據(jù)表中獲取的專(zhuān)有網(wǎng)絡(luò)連接地址。地址中的****需替換為root賬號(hào)的密碼。
database
目標(biāo)MongoDB數(shù)據(jù)庫(kù)名稱。
connection
目標(biāo)MongoDB集合名稱。
connector.class=com.mongodb.kafka.connect.MongoSinkConnector name=mongo-sink collection=testCollection connection.uri=mongodb://[username:password@]host1[:port1][,...hostN[:portN]][/[defaultauthdb][?options]] database=testDatabase delete.on.null.values=false key.converter=org.apache.kafka.connect.storage.StringConverter key.converter.schemas.enable=false max.batch.size=0 rate.limiting.every.n=0 rate.limiting.timeout=0 tasks.max=2 topics=testTopic value.converter=org.apache.kafka.connect.storage.StringConverter value.converter.schemas.enable=true writemodel.strategy=com.mongodb.kafka.connect.sink.writemodel.strategy.UpdateOneTimestampsStrategy
Connector全量參數(shù),請(qǐng)參見(jiàn)MongoDB Sink Connector Properties。
在實(shí)例配置配置向?qū)ВO(shè)置以下參數(shù),然后單擊下一步。
配置項(xiàng)
參數(shù)
說(shuō)明
Worker規(guī)格
Worker規(guī)格
選擇合適的Worker規(guī)格。
最小Worker數(shù)
設(shè)置為1。
最大Worker數(shù)
設(shè)置為1。此值不能超過(guò)tasks.max的取值。
Kafka Connect Worker 配置
自動(dòng)創(chuàng)建Kafka Connect Worker依賴資源
建議勾選此項(xiàng),此時(shí)會(huì)在選擇的Kafka實(shí)例中自動(dòng)創(chuàng)建Kafka Connect運(yùn)行所需的一些Internal Topic以及ConsumerGroup,并將這些必填配置自動(dòng)填入配置框中,包括以下配置項(xiàng):
Offset Topic:用于存儲(chǔ)源數(shù)據(jù)偏移量,命名規(guī)則為
connect-eb-offset-<任務(wù)名稱>
。Config Topic:用于存儲(chǔ)Connectors以及Tasks的配置信息,命名規(guī)則為
connect-eb-config-<任務(wù)名稱>
。Status Topic:用于存儲(chǔ)Connectors以及Tasks狀態(tài)信息,命名規(guī)則為
connect-eb-status-<任務(wù)名稱>
。Kafka Connect Consumer Group:Kafka Connect Worker用于消費(fèi)Internal Topics的消費(fèi)組,命名規(guī)則為
connect-eb-cluster-<任務(wù)名稱>
。Kafka Source Connector Consumer Group:只針對(duì)Sink Connector有效,用于消費(fèi)源Kafka Topic中的數(shù)據(jù),命名規(guī)則為
connector-eb-cluster-<任務(wù)名稱>-<connector名稱>
。
在運(yùn)行配置配置向?qū)В瑢?b data-tag="uicontrol" id="28bad2e183dw5" class="uicontrol">日志投遞方式設(shè)置為投遞至SLS或者投遞至Kafka,在角色授權(quán)卡片設(shè)置Connect依賴的角色配置,然后單擊保存。
重要建議配置的角色包含AliyunSAEFullAccess權(quán)限,否則可能會(huì)導(dǎo)致任務(wù)運(yùn)行失敗。
任務(wù)屬性
設(shè)置此任務(wù)的重試策略及死信隊(duì)列。更多信息,請(qǐng)參見(jiàn)重試和死信。
等待任務(wù)狀態(tài)變?yōu)?b data-tag="uicontrol" id="uicontrol-m6v-xxa-n1r" class="uicontrol">運(yùn)行中,此時(shí)Connector已經(jīng)在正常工作中。
步驟三:測(cè)試Connector
Source Connector
在DMS數(shù)據(jù)管理服務(wù)平臺(tái),向步驟一:創(chuàng)建數(shù)據(jù)表中創(chuàng)建的Connection插入一條數(shù)據(jù)。例如,插入一條Key為testKey,Value為testValue的數(shù)據(jù),命令如下。
db.testCollection.insert({"testKey":"testValue"})
登錄云消息隊(duì)列 Kafka 版控制臺(tái),在實(shí)例列表頁(yè)面,單擊目標(biāo)實(shí)例。
在目標(biāo)實(shí)例頁(yè)面,單擊目標(biāo)Topic,然后單擊消息查詢,查看插入的消息數(shù)據(jù),消息Value示例如下。
{"_id": {"_data": "826464A63D000000012B022C0100296E5A1004CB11AB15FD6D4C409E37370B43A4B82246645F696400646464A624458CE6B7B626645B****"}, "operationType": "insert", "clusterTime": {"$timestamp": {"t": 1684317757, "i": 1}}, "fullDocument": {"_id": {"$oid": "6464a624458ce6b7b626****"}, "testKey": "testValue"}, "ns": {"db": "test", "coll": "mongo"}, "documentKey": {"_id": {"$oid": "6464a624458ce6b7b626****"}}}
Sink Connector
登錄云消息隊(duì)列 Kafka 版控制臺(tái),在實(shí)例列表頁(yè)面,單擊目標(biāo)實(shí)例。
在左側(cè)導(dǎo)航欄,單擊Topic管理,然后單擊目標(biāo)Topic。
在Topic詳情頁(yè)面右上角,單擊體驗(yàn)發(fā)送消息。
在快速體驗(yàn)消息收發(fā)面板,設(shè)置消息內(nèi)容。例如在目標(biāo)表格中添加一條Key為Key1,Value為Value1的數(shù)據(jù),消息內(nèi)容如下。
{"key1": "value1"}
在DMS數(shù)據(jù)管理服務(wù)平臺(tái),執(zhí)行以下命令,查看目標(biāo)集合中接收的數(shù)據(jù)。
db.mongo.find()
接收數(shù)據(jù)示例如下:
{ "_id":"ObjectId("643f4d5551daf4552246****")" "_insertedTS":"ISODate("2023-05-18T02:09:25.314Z")" "_modifiedTS":"ISODate("2023-05-18T02:09:25.314Z")" "key1":"value1" }
常見(jiàn)報(bào)錯(cuò)
場(chǎng)景一:所有Tasks運(yùn)行失敗
錯(cuò)誤信息:
All tasks under connector mongo-source failed, please check the error trace of the task.
解決方法:在消息流入任務(wù)詳情頁(yè)面,單擊基礎(chǔ)信息區(qū)域的診斷鏈接,即可跳轉(zhuǎn)到Connector監(jiān)控頁(yè)面,可以看到Tasks運(yùn)行失敗的詳細(xì)錯(cuò)誤信息。
場(chǎng)景二:Kafka Connect退出
錯(cuò)誤信息:
Kafka connect exited! Please check the error log /opt/kafka/logs/connect.log on sae application to find out the reason why kafka connect exited and update the event streaming with valid arguments to solve it.
解決方法:由于狀態(tài)獲取可能會(huì)有延遲,建議您先嘗試刷新頁(yè)面。若刷新后仍然是失敗狀態(tài),您可以按照以下步驟查看錯(cuò)誤信息。
在消息流入任務(wù)詳情頁(yè)面的Worker信息區(qū)域,單擊SAE應(yīng)用后的實(shí)例名稱,跳轉(zhuǎn)到SAE應(yīng)用詳情頁(yè)面。
在基本信息頁(yè)面,單擊實(shí)例部署信息頁(yè)簽。
在實(shí)例右側(cè)操作列,單擊Webshell登錄Kafka Connect運(yùn)行環(huán)境。
執(zhí)行
vi /home/admin/connector-bootstrap.log
命令,查看Connector啟動(dòng)日志,查找其中是否包含錯(cuò)誤信息。執(zhí)行
vi /opt/kafka/logs/connect.log
命令,查看Connector運(yùn)行日志,在其中查找ERROR或者WARN字段來(lái)查看是否有錯(cuò)誤信息。
基于錯(cuò)誤信息提示進(jìn)行修復(fù)操作后,可以重新啟動(dòng)對(duì)應(yīng)任務(wù)。
場(chǎng)景三:Connector參數(shù)校驗(yàn)失敗
錯(cuò)誤信息:
Start or update connector xxx failed. Error code=400. Error message=Connector configuration is invalid and contains the following 1 error(s):
Value must be one of never, initial_only, when_needed, initial, schema_only, schema_only_recovery
You can also find the above list of errors at the endpoint `/connector-plugins/{connectorType}/config/validate`
解決方法:此時(shí)需要根據(jù)錯(cuò)誤信息,找出具體哪個(gè)參數(shù)出錯(cuò),更新對(duì)應(yīng)參數(shù)即可。若基于上述錯(cuò)誤信息無(wú)法定位具體的出錯(cuò)參數(shù),可以參考上文場(chǎng)景二中的步驟登錄Kafka Connect運(yùn)行環(huán)境,執(zhí)行以下命令,查詢參數(shù)是否校驗(yàn)通過(guò)。
curl -i -X PUT -H "Accept:application/json" -H "Content-Type:application/json" -d @$CONNECTOR_PROPERTIES_MAPPING http://localhost:8083/connector-plugins/io.confluent.connect.jdbc.JdbcSinkConnector/config/validate
該指令會(huì)返回Connector參數(shù)中每個(gè)參數(shù)是否校驗(yàn)通過(guò),若不通過(guò),則errors屬性非空,如下所示。
"value":{
"name":"snapshot.mode",
"value":null,
"recommended_values":[
"never",
"initial_only",
"when_needed",
"initial",
"schema_only",
"schema_only_recovery"
],
"errors":[
"Value must be one of never, initial_only, when_needed, initial, schema_only, schema_only_recovery"
],
"visible":true
}
場(chǎng)景四:無(wú)法連接服務(wù)器
錯(cuò)誤信息:
Start or update connector mongo-source failed. Error code=400. Error message=Connector configuration is invalid and contains the following 1 error(s):Unable to connect to the server.
解決方法:請(qǐng)查看Connector的配置信息是否正確,然后檢查MongoDB實(shí)例與Kafka實(shí)例是否在同一個(gè)VPC及vSwitch下,如果不在一個(gè)vSwitch但是在同一VPC下,那么需要將Kafka實(shí)例所在的交換機(jī)網(wǎng)段加入MongoDB實(shí)例的白名單。
場(chǎng)景五:數(shù)據(jù)庫(kù)用戶名或者密碼信息包含特殊字符
錯(cuò)誤信息:
The connection string contains invalid user information. If the username or password contains a colon (:) or an at-sign (@) then it must be urlencoded\nYou can also find the above list of errors at the endpoint `/connector-plugins/{connectorType}/config/validate`"}
解決方法:請(qǐng)檢查MongoDB賬戶名和密碼中是否包含有at(@)或冒號(hào)(:),如有請(qǐng)轉(zhuǎn)義對(duì)應(yīng)的符號(hào)。at(@)和冒號(hào)(:)進(jìn)行16進(jìn)制URL編碼后分別為%40
和%3A
。