本文是數(shù)據(jù)庫與計算機網(wǎng)絡(luò)系列刷題筆記的第五篇,重點梳理數(shù)據(jù)庫服務(wù)與計算機網(wǎng)絡(luò)服務(wù)的交叉應(yīng)用、核心配置及常見考點。
一、數(shù)據(jù)庫服務(wù):從存儲到網(wǎng)絡(luò)接口
- 數(shù)據(jù)庫連接方式
- 本地連接:客戶端與數(shù)據(jù)庫服務(wù)器在同一臺物理機器上,通常通過IPC(進程間通信)或本地套接字連接,速度快、開銷小。
- 網(wǎng)絡(luò)連接:客戶端通過網(wǎng)絡(luò)協(xié)議遠程訪問數(shù)據(jù)庫服務(wù)器。這是現(xiàn)代分布式應(yīng)用的主流方式。
- 網(wǎng)絡(luò)服務(wù)端口
- MySQL:默認(rèn)端口 3306。
- PostgreSQL:默認(rèn)端口 5432。
- Oracle:默認(rèn)端口 1521。
- MongoDB:默認(rèn)端口 27017。
- Redis:默認(rèn)端口 6379。
- 記憶要點:這些端口是配置防火墻、客戶端連接和服務(wù)監(jiān)聽的常見考點。
- 連接驅(qū)動與協(xié)議
- JDBC/ODBC:Java/通用數(shù)據(jù)庫連接標(biāo)準(zhǔn),提供統(tǒng)一的API,底層使用廠商特定的驅(qū)動程序通過網(wǎng)絡(luò)與數(shù)據(jù)庫通信。
- 特定協(xié)議:如MySQL使用其專有協(xié)議,PostgreSQL使用基于消息的協(xié)議。
二、計算機網(wǎng)絡(luò)服務(wù):支撐數(shù)據(jù)庫訪問的基石
- 傳輸層協(xié)議的選擇
- TCP:絕大多數(shù)數(shù)據(jù)庫服務(wù)(如MySQL, PostgreSQL, Oracle)默認(rèn)使用TCP協(xié)議,因為它提供可靠的、面向連接的、有序的數(shù)據(jù)流傳輸,確保SQL語句和查詢結(jié)果的完整送達。
- 注意點:某些緩存數(shù)據(jù)庫(如Redis的早期版本)也主要使用TCP。UDP在數(shù)據(jù)庫核心服務(wù)中極少使用,因其不可靠性。
- 服務(wù)發(fā)現(xiàn)與連接字符串
- 一個典型的數(shù)據(jù)庫連接字符串(如JDBC URL)包含了網(wǎng)絡(luò)尋址的關(guān)鍵信息:
jdbc:mysql://<主機名或IP>:<端口>/<數(shù)據(jù)庫名>?參數(shù)=值
- 這里的
主機名或IP、端口直接對應(yīng)計算機網(wǎng)絡(luò)中的網(wǎng)絡(luò)層(IP)和傳輸層(端口)尋址。
- 網(wǎng)絡(luò)安全與訪問控制
- 防火墻:必須在網(wǎng)絡(luò)層面開放對應(yīng)數(shù)據(jù)庫服務(wù)的端口,客戶端才能建立連接。
- 數(shù)據(jù)庫自身權(quán)限:如MySQL的
GRANT語句可以指定允許連接的用戶、客戶端源IP地址('username'@'192.168.1.%')以及操作權(quán)限,這是應(yīng)用層之上的訪問控制。
- 加密連接:使用SSL/TLS(如MySQL的
REQUIRE SSL選項)對網(wǎng)絡(luò)傳輸中的數(shù)據(jù)進行加密,防止竊聽和篡改,涉及TCP連接之上的安全層。
三、典型場景與刷題要點
- 場景:應(yīng)用服務(wù)器無法連接數(shù)據(jù)庫
- 排查思路(經(jīng)典考點):
- 網(wǎng)絡(luò)連通性:應(yīng)用服務(wù)器是否能
ping通數(shù)據(jù)庫服務(wù)器的IP?
- 端口可達性:使用
telnet <數(shù)據(jù)庫IP> <端口>或nc -zv <數(shù)據(jù)庫IP> <端口>測試端口是否開放。
- 服務(wù)狀態(tài):數(shù)據(jù)庫服務(wù)進程是否在運行并監(jiān)聽正確端口?(
netstat -tlnp | grep <端口>)
- 本地防火墻:數(shù)據(jù)庫服務(wù)器本機的防火墻(如
iptables,firewalld)是否允許該端口入站?
- 數(shù)據(jù)庫權(quán)限:連接使用的用戶名、密碼是否正確?該用戶是否被授權(quán)從應(yīng)用服務(wù)器的IP地址進行連接?
- 連接池(Connection Pool)
- 概念:為避免頻繁創(chuàng)建和銷毀昂貴的數(shù)據(jù)庫連接,在應(yīng)用層維護一個“池子”存放已建立的連接,用時取出,用完放回。
- 網(wǎng)絡(luò)意義:減少了TCP三次握手/四次揮手的次數(shù),降低了網(wǎng)絡(luò)開銷和數(shù)據(jù)庫服務(wù)器并發(fā)連接壓力。
- 常見組件:HikariCP, Druid, Tomcat JDBC Pool等。
- 分布式數(shù)據(jù)庫與網(wǎng)絡(luò)
- 主從復(fù)制:主庫與從庫之間通過網(wǎng)絡(luò)傳輸二進制日志(Binlog)進行數(shù)據(jù)同步。考點包括網(wǎng)絡(luò)延遲對復(fù)制滯后(Replication Lag)的影響。
- 分片(Sharding):數(shù)據(jù)分散在不同網(wǎng)絡(luò)節(jié)點,應(yīng)用層或中間件需要知道如何將查詢路由到正確的分片節(jié)點,這依賴于配置好的網(wǎng)絡(luò)地址映射。
四、
數(shù)據(jù)庫不僅僅是數(shù)據(jù)存儲系統(tǒng),更是重要的網(wǎng)絡(luò)服務(wù)提供者。理解其服務(wù)如何通過網(wǎng)絡(luò)暴露(端口、協(xié)議),如何被安全訪問(防火墻、權(quán)限、加密),以及如何在網(wǎng)絡(luò)環(huán)境中高效運行(連接池、分布式),是后端開發(fā)、運維和架構(gòu)設(shè)計的核心能力。刷題時,應(yīng)著重練習(xí)將數(shù)據(jù)庫知識與網(wǎng)絡(luò)診斷、配置和安全知識相結(jié)合的綜合應(yīng)用題。
關(guān)鍵記憶:一個成功的遠程數(shù)據(jù)庫連接,需要網(wǎng)絡(luò)通、端口開、服務(wù)在、權(quán)限有四個條件同時滿足。