Hiểu các vấn đề về kết nối phản chiếu cơ sở dữ liệu
Sao chép cơ sở dữ liệu là một chiến lược thiết yếu để đảm bảo tính sẵn sàng và dự phòng cao trong môi trường SQL Server. Tuy nhiên, việc định cấu hình phản chiếu đôi khi có thể dẫn đến các lỗi khó chịu, chẳng hạn như Lỗi 1418, cho biết địa chỉ mạng máy chủ không thể truy cập được hoặc không tồn tại.
Lỗi cụ thể này thường xảy ra khi cố gắng thiết lập phiên phản chiếu giữa hai phiên bản SQL Server, ngay cả khi cả hai cơ sở dữ liệu đều có thể truy cập riêng lẻ. Sự cố phát sinh khi các điểm cuối phản chiếu không liên lạc được với nhau.
Trong trường hợp hiện tại, một máy tính để bàn cục bộ (192.168.0.80) và một PC mini (192.168.0.85) sẽ tham gia vào quá trình phản chiếu. Máy tính mini được thiết kế để hoạt động như một bản sao chỉ đọc cho một ứng dụng di động, sử dụng chế độ phản chiếu "Hiệu suất cao".
Mặc dù cấu hình cổng và điều chỉnh tường lửa chính xác nhưng người dùng vẫn gặp phải Lỗi 1418 khi cố gắng bắt đầu phiên phản chiếu. Bài viết này sẽ khám phá các nguyên nhân và giải pháp tiềm năng để giải quyết vấn đề này.
Yêu cầu | Ví dụ về sử dụng |
---|---|
ALTER ENDPOINT | Lệnh này được sử dụng để sửa đổi trạng thái của điểm cuối phản ánh cơ sở dữ liệu trong SQL Server. Trong bối cảnh giải quyết Lỗi 1418, nó đảm bảo rằng điểm cuối được khởi động và lắng nghe đúng cách trên cổng được chỉ định. Ví dụ: THAY ĐỔI ĐIỂM CUỐI [Phản chiếu] TRẠNG THÁI = BẮT ĐẦU; |
GRANT CONNECT ON ENDPOINT | Cho phép đăng nhập cụ thể để kết nối với điểm cuối phản chiếu. Điều này rất quan trọng để cho phép các phiên bản SQL Server giao tiếp an toàn trong quá trình sao chép cơ sở dữ liệu. Ví dụ: CẤP KẾT NỐI TRÊN ĐIỂM CUỐI::[Mirroring_Endpoint] ĐẾN [DOMAINUserAccount]; |
SET PARTNER | Định cấu hình một phiên bản SQL Server làm đối tác trong phiên phản ánh cơ sở dữ liệu. Lệnh này thiết lập địa chỉ mạng cho máy chủ đối tác. Ví dụ: THAY ĐỔI CƠ SỞ CƠ SỞ YourDatabaseName THIẾT LẬP ĐỐI TÁC = 'TCP://192.168.0.85:5022'; |
CREATE ENDPOINT | Tạo điểm cuối phản chiếu lắng nghe trên một cổng cụ thể và quản lý các phiên phản chiếu cơ sở dữ liệu. Nó chỉ định vai trò giao tiếp (ví dụ: ĐỐI TÁC). Ví dụ: TẠO ĐIỂM CUỐI [Mirroring_Endpoint] NHƯ TCP (LISTENER_PORT = 5022) CHO DATABASE_MIRRORING (ROLE = PARTNER); |
netsh advfirewall firewall add rule | Được sử dụng để định cấu hình các quy tắc tường lửa nhằm cho phép lưu lượng truy cập thông qua các cổng cụ thể cần thiết cho SQL Server và phản chiếu (ví dụ: 1433 và 5022). Điều này là cần thiết để cho phép giao tiếp giữa các đối tác phản ánh. Ví dụ: tường lửa netsh advfirewall thêm quy tắc name="SQLPort" dir=in action=allow Protocol=TCP localport=1433 |
socket.create_connection | Lệnh Python được sử dụng để thiết lập kết nối TCP tới máy chủ và cổng được chỉ định. Trong ngữ cảnh này, nó được sử dụng để kiểm tra xem phiên bản SQL Server có thể truy cập được qua mạng hay không. Ví dụ: socket.create_connection((server, port), timeout=5); |
New-Object System.Net.Sockets.TcpClient | Lệnh PowerShell được sử dụng để tạo máy khách TCP nhằm kiểm tra kết nối cổng. Nó giúp xác minh xem các cổng phản chiếu cần thiết có mở và có thể truy cập được giữa các máy chủ hay không. Ví dụ: $tcpClient = New-Object System.Net.Sockets.TcpClient($server, $port) |
SELECT * FROM sys.database_mirroring | Lệnh SQL này truy xuất trạng thái của phiên sao chép cơ sở dữ liệu, giúp chẩn đoán xem thiết lập sao chép được thiết lập chính xác hay đang gặp phải sự cố. Ví dụ: CHỌN * TỪ sys.database_mirroring; |
Phân tích chi tiết về tập lệnh giải quyết lỗi phản chiếu
Tập lệnh đầu tiên được cung cấp trong các ví dụ trước sử dụng Giao dịch-SQL (T-SQL) các lệnh để định cấu hình và giải quyết lỗi phản chiếu trong SQL Server. Phần quan trọng nhất của tập lệnh là việc tạo và cấu hình phản chiếu điểm cuối. Các điểm cuối này là các giao diện mạng mà qua đó các phiên bản SQL Server giao tiếp trong quá trình sao chép. Lệnh THAY ĐỔI ĐIỂM CUỐI đảm bảo rằng các điểm cuối trên cả hai máy chủ đều ở trạng thái "BẮT ĐẦU", cho phép giao tiếp diễn ra. các ĐẶT ĐỐI TÁC Sau đó, lệnh này được sử dụng để liên kết các cơ sở dữ liệu, chỉ định địa chỉ mạng của máy chủ đối tác, cho phép hai phiên bản SQL phản chiếu dữ liệu trên mạng.
Tập lệnh thứ hai là giải pháp PowerShell được thiết kế để kiểm tra kết nối mạng giữa hai máy chủ. PowerShell sử dụng Hệ thống đối tượng mới.Net.Sockets.TcpClient lệnh tạo một máy khách TCP cố gắng kết nối với địa chỉ IP và cổng được chỉ định. Đây là một cách hiệu quả để xác minh rằng các cổng bắt buộc (1433 cho SQL Server và 5022 cho phản chiếu) đang mở và có thể truy cập được. Tập lệnh này đặc biệt hữu ích để chẩn đoán các sự cố về tường lửa hoặc mạng có thể ngăn cản hai phiên bản SQL giao tiếp, do đó gây ra lỗi Lỗi 1418.
Tập lệnh thứ ba tận dụng các lệnh Dấu nhắc Lệnh của Windows để quản lý cài đặt tường lửa. Cụ thể, Netsh Advfirewall tường lửa thêm quy tắc lệnh được sử dụng để mở các cổng cần thiết cho SQL Server và phản chiếu. Điều này đảm bảo rằng cả lưu lượng cơ sở dữ liệu (cổng 1433) và lưu lượng phản chiếu (cổng 5022) có thể lưu chuyển tự do giữa hai máy chủ. Bằng cách tạm thời vô hiệu hóa tường lửa bằng Netsh Advfirewall tắt trạng thái tất cả hồ sơ lệnh, tập lệnh có thể xác minh xem tường lửa có phải là nguyên nhân cốt lõi của sự cố truy cập mạng hay không. Giải pháp này đặc biệt quan trọng khi khắc phục sự cố liên lạc của máy chủ trong môi trường an toàn.
Cuối cùng, tập lệnh Python sử dụng socket.create_connection để thực hiện kiểm tra mạng giữa hai máy chủ. Tập lệnh này cung cấp một cách nhanh chóng và hiệu quả để xác thực xem các máy chủ có thể kết nối với nhau qua các cổng TCP được yêu cầu hay không. Nó cố gắng thiết lập kết nối và nếu thành công, nó sẽ xác nhận rằng thiết lập mạng là chính xác. Tính đơn giản của Python trong việc xử lý các sự cố liên quan đến mạng khiến nó trở thành lựa chọn tốt để kiểm tra khả năng kết nối, đặc biệt là trong các môi trường không có sẵn các công cụ khác hoặc sử dụng cồng kềnh. Cùng với nhau, các tập lệnh này cung cấp một cách tiếp cận toàn diện để giải quyết các vấn đề phản ánh cơ sở dữ liệu lỗi và đảm bảo giao tiếp thông suốt giữa các phiên bản SQL Server.
Giải pháp 1: Sửa lỗi 1418 trong Sao chép cơ sở dữ liệu SQL Server (Phương pháp tiếp cận T-SQL)
Giải pháp này sử dụng Transact-SQL (T-SQL) để giải quyết các vấn đề về sao chép cơ sở dữ liệu bằng cách định cấu hình điểm cuối, xác thực kết nối và xác thực địa chỉ máy chủ.
-- 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
Giải pháp 2: Tập lệnh PowerShell để kiểm tra khả năng truy cập cổng máy chủ SQL
Giải pháp này sử dụng PowerShell để kiểm tra khả năng kết nối cổng giữa các máy chủ, đảm bảo rằng các cổng cần thiết đang mở và đang lắng nghe.
# 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
Giải pháp 3: Khắc phục lỗi SQL Server 1418 (Cấu hình tường lửa)
Cách tiếp cận này sử dụng Dấu nhắc lệnh của Windows để kiểm tra cấu hình tường lửa, đảm bảo rằng các cổng bắt buộc (1433, 5022) đều mở trên cả hai máy chủ.
-- 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
Giải pháp 4: Tập lệnh Python để xác thực kết nối TCP giữa các máy chủ
Giải pháp này sử dụng Python để xác thực xem các phiên bản SQL Server có thể giao tiếp qua mạng hay không bằng cách kiểm tra kết nối TCP.
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)
Giải pháp 5: Cấu hình GUI SQL Server Management Studio (SSMS)
Giải pháp này hướng dẫn cách thiết lập phản chiếu bằng GUI SSMS cho những người dùng không muốn sử dụng giao diện dòng lệnh.
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.
Khám phá các thách thức về mạng và bảo mật trong SQL Server Mirroring
Khi thiết lập Phản chiếu cơ sở dữ liệu SQL Server, một khía cạnh thường bị bỏ qua là vai trò của cấu hình mạng và cài đặt bảo mật. Lỗi 1418, cho biết không thể truy cập địa chỉ mạng máy chủ, thường do các sự cố mạng cơ bản gây ra. Ngay cả khi mở đúng cổng (1433 và 5022) và tắt tường lửa, các thành phần mạng khác như định tuyến và cấu hình DNS có thể gây ra lỗi liên lạc. Điều quan trọng là phải đảm bảo rằng cả hai máy chủ đều phân giải đúng địa chỉ IP của nhau, đặc biệt là trong môi trường nhiều mạng con.
Một thách thức khác liên quan đến Xác thực máy chủ SQL cài đặt trong quá trình thiết lập phản chiếu. Sao chép cơ sở dữ liệu yêu cầu cả máy chủ chính và máy chủ nhân bản xác thực lẫn nhau thông qua chứng chỉ hoặc xác thực dựa trên miền (Kerberos). Nếu thiết lập này không được định cấu hình chính xác hoặc nếu có sự không khớp trong giao thức bảo mật giữa hai máy chủ thì Lỗi 1418 có thể xảy ra. Ngoài ra, tài khoản dịch vụ SQL Server phải có quyền chính xác trên cả hai máy, đặc biệt là quyền truy cập vào các điểm cuối phản chiếu.
Cuối cùng, việc lựa chọn hệ điều hành cũng có thể ảnh hưởng đến cách hoạt động của phản chiếu. Các phiên bản Windows khác nhau có thể xử lý các kết nối TCP khác nhau, đặc biệt là về cách chúng quản lý các quy tắc tường lửa và định tuyến lưu lượng mạng. Nếu hệ điều hành của một trong hai máy chủ có trình điều khiển mạng lỗi thời hoặc không khớp, thì việc giao tiếp giữa các máy chủ có thể không thành công. Đảm bảo hệ điều hành được cập nhật với các bản vá mới nhất và các dịch vụ phù hợp đang chạy là rất quan trọng trong việc giải quyết các sự cố kết nối như Lỗi 1418.
Các câu hỏi thường gặp về thiết lập phản chiếu SQL Server và lỗi 1418
- Điều gì gây ra Lỗi 1418 khi phản chiếu SQL Server?
- Lỗi 1418 thường xảy ra do lỗi giao tiếp giữa hai máy chủ. Điều này có thể là do cài đặt tường lửa, không chính xác mirroring endpointshoặc vấn đề kết nối mạng.
- Làm cách nào để kiểm tra xem các cổng của tôi có mở để phản chiếu SQL Server không?
- Sử dụng telnet lệnh hoặc một tập lệnh như New-Object System.Net.Sockets.TcpClient trong PowerShell để kiểm tra xem cổng 1433 và 5022 có mở không.
- Cả hai máy chủ có cần phải ở cùng một miền để phản chiếu không?
- Không, nhưng xác thực miền có thể đơn giản hóa quy trình. Nếu không, bạn phải sử dụng xác thực dựa trên chứng chỉ để bảo mật mirroring endpoints.
- Vai trò của điểm cuối trong việc sao chép cơ sở dữ liệu là gì?
- các CREATE ENDPOINT lệnh tạo giao diện mạng cho phép các phiên bản SQL Server giao tiếp trong quá trình phản chiếu. Mỗi máy chủ phải có một điểm cuối phản chiếu chức năng.
- Tôi có thể sao chép cơ sở dữ liệu trên các phiên bản SQL Server khác nhau không?
- Không, việc sao chép cơ sở dữ liệu yêu cầu cả hai phiên bản SQL Server phải có cùng phiên bản và phiên bản để hoạt động bình thường.
Suy nghĩ cuối cùng về việc giải quyết lỗi phản chiếu cơ sở dữ liệu 1418
Các lỗi sao chép cơ sở dữ liệu như Lỗi 1418 thường do sự cố mạng giữa các máy chủ gây ra. Việc đảm bảo mở đúng cổng, định cấu hình tường lửa và thiết lập điểm cuối đúng cách có thể giải quyết được sự cố này.
Ngoài ra, việc xác thực quyền truy cập mạng bằng các công cụ như PowerShell và đảm bảo các giao thức xác thực nhất quán giữa các máy chủ sẽ cải thiện cơ hội thành công của bạn. Làm theo các bước sau có thể giúp đạt được sự phản chiếu SQL Server đáng tin cậy cho các hoạt động hiệu suất cao.
Tài liệu tham khảo và tài nguyên cho các giải pháp sao chép cơ sở dữ liệu
- Bạn có thể tìm thấy thông tin chi tiết về cấu hình phản chiếu SQL Server và khắc phục sự cố, bao gồm Lỗi 1418 và cài đặt điểm cuối tại Tài liệu Microsoft SQL .
- Bạn có thể truy cập hướng dẫn toàn diện để định cấu hình quy tắc tường lửa và xử lý sự cố mạng để sao chép SQL Server tại Cấu hình tường lửa của Windows .
- Các tập lệnh PowerShell để kiểm tra cổng và xác minh mạng giữa các phiên bản SQL Server có sẵn tại Tài liệu PowerShell .
- Để biết các kỹ thuật lập trình socket Python được sử dụng trong thử nghiệm kết nối máy chủ, hãy truy cập Mô-đun ổ cắm Python .