Förstå anslutningsproblem med databasspegling
Databasspegling är en viktig strategi för att säkerställa hög tillgänglighet och redundans i SQL Server-miljöer. Men att konfigurera spegling kan ibland leda till frustrerande fel, till exempel fel 1418, som säger att serverns nätverksadress inte kan nås eller inte existerar.
Det här specifika felet uppstår ofta när man försöker ställa in en speglingssession mellan två SQL Server-instanser, även om båda databaserna är åtkomliga individuellt. Problemet uppstår när speglingsändpunkterna misslyckas med att kommunicera med varandra.
I det aktuella fallet är ett lokalt skrivbord (192.168.0.80) och en mini-PC (192.168.0.85) involverade i speglingsprocessen. Mini-PC:n är avsedd att fungera som en skrivskyddad replika för en mobilapplikation, med hjälp av "High Performance"-läget för spegling.
Trots korrekt portkonfiguration och brandväggsjusteringar, stöter användaren på fel 1418 när han försöker initiera speglingssessionen. Den här artikeln kommer att utforska potentiella orsaker och lösningar för att lösa detta problem.
Kommando | Exempel på användning |
---|---|
ALTER ENDPOINT | Detta kommando används för att ändra tillståndet för en databasspeglingsslutpunkt i SQL Server. I samband med att lösa fel 1418 säkerställer den att slutpunkten startas korrekt och lyssnar på den angivna porten. Exempel: ALTER ENDPOINT [Spegling] STATE = STARTAD; |
GRANT CONNECT ON ENDPOINT | Tillåter en specifik inloggning att ansluta till en speglingsslutpunkt. Detta är avgörande för att tillåta SQL Server-instanser att kommunicera säkert under databasspegling. Exempel: BEHANDLA ANSLUTNING PÅ ENDPOINT::[Mirroring_Endpoint] TILL [DOMAINUserAccount]; |
SET PARTNER | Konfigurerar en SQL Server-instans som partner i en databasspeglingssession. Detta kommando fastställer nätverksadressen för partnerservern. Exempel: ALTER DATABASE YourDatabaseName SET PARTNER = 'TCP://192.168.0.85:5022'; |
CREATE ENDPOINT | Skapar en speglingsslutpunkt som lyssnar på en specifik port och hanterar databasspeglingssessioner. Den specificerar kommunikationsrollen (t.ex. PARTNER). Exempel: CREATE ENDPOINT [Mirroring_Endpoint] AS TCP (LISTENER_PORT = 5022) FÖR DATABAS_MIRRORING (ROLE = PARTNER); |
netsh advfirewall firewall add rule | Används för att konfigurera brandväggsregler för att tillåta trafik genom specifika portar som krävs för SQL Server och spegling (t.ex. 1433 och 5022). Detta är väsentligt för att möjliggöra kommunikation mellan speglingspartners. Exempel: netsh advfirewall brandvägg lägg till regelnamn="SQLPort" dir=in action=tillåt protokoll=TCP lokalport=1433 |
socket.create_connection | Ett Python-kommando som används för att upprätta en TCP-anslutning till en specificerad server och port. I detta sammanhang används den för att kontrollera om SQL Server-instansen är nåbar över nätverket. Exempel: socket.create_connection((server, port), timeout=5); |
New-Object System.Net.Sockets.TcpClient | Ett PowerShell-kommando som används för att skapa en TCP-klient för att testa portanslutning. Det hjälper till att verifiera om de nödvändiga speglingsportarna är öppna och tillgängliga mellan servrar. Exempel: $tcpClient = New-Object System.Net.Sockets.TcpClient($server, $port) |
SELECT * FROM sys.database_mirroring | Detta SQL-kommando hämtar statusen för databasspeglingssessionen, vilket hjälper till att diagnostisera om speglingsinställningarna är korrekt etablerade eller har problem. Exempel: SELECT * FROM sys.database_mirroring; |
Detaljerad uppdelning av skripten för upplösning av speglingsfel
Det första skriptet i de tidigare exemplen använder Transact-SQL (T-SQL) kommandon för att konfigurera och lösa speglingsfelet i SQL Server. Den mest kritiska delen av skriptet är skapandet och konfigurationen av spegelvända ändpunkter. Dessa slutpunkter är nätverksgränssnitten genom vilka SQL Server-instanserna kommunicerar under spegling. Kommandot ÄNDRA ENDPOINT säkerställer att slutpunkterna på båda servrarna är i "STARTAD"-tillståndet, vilket gör att kommunikation kan ske. De SET PARTNER kommandot används sedan för att länka databaserna och specificera nätverksadressen för partnerservern, vilket gör att de två SQL-instanserna kan spegla data över nätverket.
Det andra skriptet är en PowerShell-lösning utformad för att testa nätverksanslutningen mellan de två servrarna. PowerShell använder New-Object System.Net.Sockets.TcpClient kommando för att skapa en TCP-klient som försöker ansluta till den angivna IP-adressen och porten. Detta är ett effektivt sätt att verifiera att de nödvändiga portarna (1433 för SQL Server och 5022 för spegling) är öppna och tillgängliga. Det här skriptet är särskilt användbart för att diagnostisera brandväggs- eller nätverksproblem som kan hindra de två SQL-instanserna från att kommunicera och därmed orsaka Fel 1418.
Det tredje skriptet använder Windows Command Prompt-kommandon för att hantera brandväggsinställningar. Närmare bestämt netsh advfirewall brandvägg lägga till regel kommandot används för att öppna de nödvändiga portarna för SQL Server och spegling. Detta säkerställer att både databastrafiken (port 1433) och speglingstrafiken (port 5022) kan flöda fritt mellan de två servrarna. Genom att tillfälligt inaktivera brandväggen med netsh advfirewall stäng av alla profiler kommandot kan skriptet verifiera om brandväggen är grundorsaken till problemet med nätverksåtkomst. Denna lösning är särskilt viktig vid felsökning av serverkommunikationsproblem i en säker miljö.
Slutligen använder Python-skriptet socket.create_connection funktion för att utföra en nätverkskontroll mellan de två servrarna. Det här skriptet ger ett snabbt och effektivt sätt att validera om servrarna kan nå varandra över de nödvändiga TCP-portarna. Den försöker upprätta en anslutning, och om den lyckas bekräftar den att nätverksinställningarna är korrekta. Pythons enkelhet i att hantera nätverksrelaterade problem gör det till ett bra val för att testa anslutning, särskilt i miljöer där andra verktyg är otillgängliga eller besvärliga att använda. Tillsammans erbjuder dessa skript ett heltäckande tillvägagångssätt för att lösa problemet databasspegling fel och säkerställa smidig kommunikation mellan SQL Server-instanser.
Lösning 1: Åtgärda fel 1418 i SQL Server Database Mirroring (T-SQL Approach)
Den här lösningen använder Transact-SQL (T-SQL) för att lösa problem med databasspegling genom att konfigurera slutpunkter, autentisera anslutningar och validera serveradresser.
-- Enable server to listen on the specified ports
ALTER ENDPOINT [Mirroring]
STATE = STARTED;
GO
-- Ensure both databases are in FULL recovery mode
ALTER DATABASE YourDatabaseName
SET RECOVERY FULL;
GO
-- Create mirroring endpoints on both servers
CREATE ENDPOINT [Mirroring_Endpoint]
STATE = STARTED
AS TCP (LISTENER_PORT = 5022)
FOR DATABASE_MIRRORING (ROLE = PARTNER);
GO
-- Grant CONNECT permissions to the login account
GRANT CONNECT ON ENDPOINT::[Mirroring_Endpoint]
TO [DOMAIN\UserAccount];
GO
-- Set up mirroring using T-SQL command
ALTER DATABASE YourDatabaseName
SET PARTNER = 'TCP://192.168.0.85:5022';
GO
-- Verify the status of the mirroring configuration
SELECT * FROM sys.database_mirroring;
GO
Lösning 2: PowerShell-skript för att testa SQL Server Port Accessibility
Den här lösningen använder PowerShell för att testa portanslutningen mellan servrarna, för att säkerställa att de nödvändiga portarna är öppna och lyssnar.
# Define server IPs and ports
$server1 = "192.168.0.80"
$server2 = "192.168.0.85"
$port = 5022
# Function to test port connectivity
function Test-Port {
param([string]$server, [int]$port)
try {
$tcpClient = New-Object System.Net.Sockets.TcpClient($server, $port)
Write-Host "$server on port $port is reachable."
$tcpClient.Close()
} catch {
Write-Host "$server on port $port is not reachable."
}
}
# Test both servers
Test-Port -server $server1 -port $port
Test-Port -server $server2 -port $port
Lösning 3: SQL Server Error 1418 Fix (brandväggskonfiguration)
Det här tillvägagångssättet använder Windows Command Prompt för att kontrollera brandväggskonfigurationer och se till att nödvändiga portar (1433, 5022) är öppna på båda servrarna.
-- Check if SQL Server and mirroring ports are open
netsh advfirewall firewall add rule name="SQLPort" dir=in action=allow protocol=TCP localport=1433
netsh advfirewall firewall add rule name="MirrorPort" dir=in action=allow protocol=TCP localport=5022
-- Disable firewall temporarily for testing purposes
netsh advfirewall set allprofiles state off
-- Enable firewall again after testing
netsh advfirewall set allprofiles state on
Lösning 4: Python-skript för att validera TCP-anslutning mellan servrar
Denna lösning använder Python för att validera om SQL Server-instanserna kan kommunicera över nätverket genom att kontrollera TCP-anslutningar.
import socket
# Define server IPs and port
server1 = '192.168.0.80'
server2 = '192.168.0.85'
port = 5022
# Function to check connectivity
def check_connection(server, port):
try:
sock = socket.create_connection((server, port), timeout=5)
print(f'Connection successful to {server}:{port}')
sock.close()
except socket.error:
print(f'Cannot connect to {server}:{port}')
# Check both servers
check_connection(server1, port)
check_connection(server2, port)
Lösning 5: SQL Server Management Studio (SSMS) GUI-konfiguration
Den här lösningen går igenom hur du ställer in spegling med SSMS GUI för användare som föredrar att inte använda kommandoradsgränssnitt.
1. Open SQL Server Management Studio (SSMS).
2. Right-click your database -> Tasks -> Mirror...
3. Click Configure Security and follow the wizard.
4. Ensure both Principal and Mirror servers are correct.
5. Set the port for the mirroring endpoints to 5022.
6. Complete the configuration and click Start Mirroring.
7. Verify the mirroring status by checking the "Database Properties" window.
Utforska nätverks- och säkerhetsutmaningar i SQL Server Mirroring
Vid installation SQL Server-databasspegling, en aspekt som ofta förbises är rollen av nätverkskonfiguration och säkerhetsinställningar. Fel 1418, som indikerar att serverns nätverksadress inte kan nås, orsakas ofta av underliggande nätverksproblem. Även när rätt portar (1433 och 5022) är öppna och brandväggar är inaktiverade, kan andra nätverkselement som routing och DNS-konfiguration orsaka kommunikationsfel. Det är viktigt att se till att båda servrarna löser varandras IP-adresser korrekt, särskilt i miljöer med flera subnät.
En annan utmaning innebär SQL Server-autentisering inställningar under speglingsinställningen. Databasspegling kräver att både huvud- och spegelservern autentiserar varandra via certifikat eller domänbaserad autentisering (Kerberos). Om den här inställningen inte är korrekt konfigurerad, eller om det finns en oöverensstämmelse i säkerhetsprotokollen mellan de två servrarna, kan fel 1418 uppstå. Dessutom måste SQL Server-tjänstkonton ha rätt behörigheter på båda datorerna, särskilt åtkomst till speglingsslutpunkterna.
Slutligen kan valet av operativsystem också påverka hur speglingen beter sig. Olika Windows-versioner kan hantera TCP-anslutningar på olika sätt, särskilt i hur de hanterar brandväggsregler och nätverkstrafikdirigering. Om operativsystemet på någon av servrarna har föråldrade eller inte matchade nätverksdrivrutiner kan kommunikationen mellan servrarna misslyckas. Att se till att operativsystemet är uppdaterat med de senaste patcharna och att lämpliga tjänster körs är avgörande för att lösa anslutningsproblem som fel 1418.
Vanliga frågor om SQL Server Mirroring Setup och Error 1418
- Vad orsakar fel 1418 i SQL Server-spegling?
- Fel 1418 orsakas vanligtvis av ett kommunikationsfel mellan de två servrarna. Detta kan bero på brandväggsinställningar, felaktiga mirroring endpoints, eller problem med nätverksanslutning.
- Hur kan jag kontrollera om mina portar är öppna för SQL Server-spegling?
- Använd telnet kommando eller ett skript som t.ex New-Object System.Net.Sockets.TcpClient i PowerShell för att testa om portarna 1433 och 5022 är öppna.
- Måste båda servrarna vara i samma domän för spegling?
- Nej, men domänautentisering kan förenkla processen. Annars måste du använda certifikatbaserad autentisering för att säkra mirroring endpoints.
- Vilken roll har slutpunkten i databasspegling?
- De CREATE ENDPOINT kommandot skapar nätverksgränssnittet som tillåter SQL Server-instanser att kommunicera under spegling. Varje server måste ha en fungerande spegelslutpunkt.
- Kan jag spegla databaser på olika SQL Server-versioner?
- Nej, databasspegling kräver att båda SQL Server-instanserna är på samma version och utgåva för att fungera korrekt.
Sista tankar om att lösa databasspeglingsfel 1418
Databasspeglingsfel som Error 1418 orsakas ofta av nätverksproblem mellan servrar. Att se till att rätt portar är öppna, att brandväggar är konfigurerade och att slutpunkter är korrekt inställda kan lösa det här problemet.
Om du dessutom validerar nätverksåtkomst med verktyg som PowerShell och säkerställer att autentiseringsprotokollen är konsekventa mellan servrarna förbättras dina chanser att lyckas. Genom att följa dessa steg kan du få tillförlitlig SQL Server-spegling för högpresterande operationer.
Referenser och resurser för lösningar för databasspegling
- Detaljer om konfiguration och felsökning av SQL Server-spegling, inklusive fel 1418 och slutpunktsinställningar finns på Microsoft SQL-dokumentation .
- En omfattande guide för att konfigurera brandväggsregler och nätverksfelsökning för SQL Server-spegling finns på Konfiguration av Windows-brandväggen .
- PowerShell-skript för porttestning och nätverksverifiering mellan SQL Server-instanser finns tillgängliga på PowerShell-dokumentation .
- För Python-socket-programmeringstekniker som används för att testa serveranslutning, besök Python Socket Modul .