TCP/IP
真實(shí)環(huán)境中,數(shù)據(jù)庫服務(wù)器進(jìn)程和客戶端進(jìn)程可能運(yùn)行在不同的主機(jī)中,它們之間必須通過網(wǎng)絡(luò)來進(jìn)行通訊。MySQL采用TCP作為服務(wù)器和客戶端之間的網(wǎng)絡(luò)通信協(xié)議。在網(wǎng)絡(luò)環(huán)境下,每臺(tái)計(jì)算機(jī)都有一個(gè)唯一的IP地址,如果某個(gè)進(jìn)程有需要采用TCP協(xié)議進(jìn)行網(wǎng)絡(luò)通信方面的需求,可以向操作系統(tǒng)申請(qǐng)一個(gè)端口號(hào),這是一個(gè)整數(shù)值,它的取值范圍是0~65535。這樣在網(wǎng)絡(luò)中的其他進(jìn)程就可以通過IP地址 + 端口號(hào)的方式來與這個(gè)進(jìn)程連接,這樣進(jìn)程之間就可以通過網(wǎng)絡(luò)進(jìn)行通信了。
MySQL服務(wù)器啟動(dòng)的時(shí)候會(huì)默認(rèn)申請(qǐng)3306端口號(hào),之后就在這個(gè)端口號(hào)上等待客戶端進(jìn)程進(jìn)行連接,用書面一點(diǎn)的話來說,MySQL服務(wù)器會(huì)默認(rèn)監(jiān)聽3306端口。
如果3306端口號(hào)已經(jīng)被別的進(jìn)程占用了或者我們單純的想自定義該數(shù)據(jù)庫實(shí)例監(jiān)聽的端口號(hào),那我們可以在啟動(dòng)服務(wù)器程序的命令行里添加-P參數(shù)來明確指定一下端口號(hào),比如這樣:
mysqld -P3307
這樣MySQL服務(wù)器在啟動(dòng)時(shí)就會(huì)去監(jiān)聽我們指定的端口號(hào)3307。
如果客戶端進(jìn)程想要使用TCP/IP網(wǎng)絡(luò)來連接到服務(wù)器進(jìn)程,比如我們?cè)谑褂胢ysql來啟動(dòng)客戶端程序時(shí),在-h參數(shù)后必須跟隨IP地址來作為需要連接的服務(wù)器進(jìn)程所在主機(jī)的主機(jī)名,如果客戶端進(jìn)程和服務(wù)器進(jìn)程在一臺(tái)計(jì)算機(jī)中的話,我們可以使用127.0.0.1來代表本機(jī)的IP地址。另外,如果服務(wù)器進(jìn)程監(jiān)聽的端口號(hào)不是默認(rèn)的3306,我們也可以在使用mysql啟動(dòng)客戶端程序時(shí)使用-P參數(shù)(大寫的P,小寫的p是用來指定密碼的)來指定需要連接到的端口號(hào)。比如我們現(xiàn)在已經(jīng)在本機(jī)啟動(dòng)了服務(wù)器進(jìn)程,監(jiān)聽的端口號(hào)為3307,那我們啟動(dòng)客戶端程序時(shí)可以這樣寫:
mysql -h127.0.0.1 -uroot -P3307 -p
命名管道和共享內(nèi)存
如果你是一個(gè)Windows用戶,那么客戶端進(jìn)程和服務(wù)器進(jìn)程之間可以考慮使用命名管道或共享內(nèi)存進(jìn)行通信。不過啟用這些通信方式的時(shí)候需要在啟動(dòng)服務(wù)器程序和客戶端程序時(shí)添加一些參數(shù):
使用命名管道來進(jìn)行進(jìn)程間通信
需要在啟動(dòng)服務(wù)器程序的命令中加上–enable-named-pipe參數(shù),然后在啟動(dòng)客戶端程序的命令中加入–pipe或者–protocol=pipe參數(shù)。
使用共享內(nèi)存來進(jìn)行進(jìn)程間通信
需要在啟動(dòng)服務(wù)器程序的命令中加上–shared-memory參數(shù),在成功啟動(dòng)服務(wù)器后,共享內(nèi)存便成為本地客戶端程序的默認(rèn)連接方式,不過我們也可以在啟動(dòng)客戶端程序的命令中加入–protocol=memory參數(shù)來顯式的指定使用共享內(nèi)存進(jìn)行通信。
不過需要注意的是,使用共享內(nèi)存的方式進(jìn)行通信的服務(wù)器進(jìn)程和客戶端進(jìn)程必須在同一臺(tái)Windows主機(jī)中。
Unix域套接字文件
如果我們的服務(wù)器進(jìn)程和客戶端進(jìn)程都運(yùn)行在同一臺(tái)操作系統(tǒng)為類Unix的機(jī)器上的話,我們可以使用Unix域套接字文件來進(jìn)行進(jìn)程間通信。如果我們?cè)趩?dòng)客戶端程序的時(shí)候指定的主機(jī)名為localhost,或者指定了–protocol=socket的啟動(dòng)參數(shù),那服務(wù)器程序和客戶端程序之間就可以通過Unix域套接字文件來進(jìn)行通信了。MySQL服務(wù)器程序默認(rèn)監(jiān)聽的Unix域套接字文件路徑為/tmp/mysql.sock,客戶端程序也默認(rèn)連接到這個(gè)Unix域套接字文件。如果我們想改變這個(gè)默認(rèn)路徑,可以在啟動(dòng)服務(wù)器程序時(shí)指定socket參數(shù),就像這樣:
mysqld --socket=/tmp/a.txt
這樣服務(wù)器啟動(dòng)后便會(huì)監(jiān)聽/tmp/a.txt。在服務(wù)器改變了默認(rèn)的UNIX域套接字文件后,如果客戶端程序想通過UNIX域套接字文件進(jìn)行通信的話,也需要顯式的指定連接到的UNIX域套接字文件路徑,就像這樣:
mysql -hlocalhost -uroot --socket=/tmp/a.txt -p文章來源:http://www.zghlxwxcb.cn/news/detail-856696.html
這樣該客戶端進(jìn)程和服務(wù)器進(jìn)程就可以通過路徑為/tmp/a.txt的Unix域套接字文件進(jìn)行通信了。文章來源地址http://www.zghlxwxcb.cn/news/detail-856696.html
到了這里,關(guān)于MySQL客戶端和服務(wù)器進(jìn)程通信的幾種方式的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!