SQLServer 鏡像配置 填坑

公司想做數據庫熱備份,選擇了SqlServer的鏡像,但公司沒有專門的DBA,這塊工作被分到我頭上了,沒辦法,只好客串了一回業餘DBA。看文檔,查資料,測試,排查解決問題,前前後後搞了2天! 現在將遇到的一些坑給記錄下來,算是填坑備忘錄吧,也給需要的兄弟一個參考。廢話少說,上重點:


坑1:如果SqlServer的啓動賬戶不是域賬戶,那要搞鏡像就麻煩了,得搞證書驗證,要寫一些TSQL代碼,囉嗦得黑紋。文章結尾會附上相關TSQL代碼。


坑2:服務器網絡地址“TCP://xxxxx”無法訪問或不存在。請檢查網絡地址名稱,並檢查本地和遠程端點的端口是否正常運行。(Microsoft SQL Server,錯誤:1418) 。這個錯誤也真是莫名其妙,ping也ping通了,telnet也tel通了,奶奶的,還是報錯,按照百度出來的一堆方法,都沒用。只得慢慢看SqlServer的日誌,還有Windows事件日誌。看到日誌裏面提到,登錄端點失敗,證書操作失敗。猜想可能是權限不夠,於是進行“SQL Server 配置管理器”》“SQL Server 服務”》“SQL Server (實例名)”》右擊屬性》選擇“登錄”面籤》點內置賬戶》選擇local system。 然後,不報錯那個錯了,卻報了另一個錯,提示 “無法設置鏡像”。再百度,一些兄弟說,要設置兩個服務器SqlServer的啓動賬號一模一樣,登錄名一樣,密碼一樣。於是,就兩邊服務器都新建了一模一樣的Windows賬戶,試了一下,真的行了,奶奶的。


坑3:設置兩個服務器SqlServer的啓動賬號一模一樣後,要重新從頭操作配置鏡像。


坑4: 創建鏡像時,要從主數據庫的備份還原,還原的時候,要選擇 WITH NORECOVERY 選項,這還不行!還要備份主數據庫事務日誌,然後在鏡像還原日誌,還原日誌時,也要選擇WITH NORECOVERY。


坑5:配完鏡像,不是得查看效果嘛,鏡像是不能直接查看的,要做快照。這個快照得用TSQL CREATE DATABASE命令來搞,  裏面的 name=XXX 不能隨便寫, 必須指定和源數據庫裏面的數據文件相同的邏輯名稱。


下面給出主體服務器和鏡像服務器的TSQL代碼。


主體服務器開始============================================

--創建證書和end-points(主實例服務器):

use master;
GO

-- drop master KEY

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '123456';
GO
-- DROP CERTIFICATE host_1_cert
CREATE CERTIFICATE host_1_cert WITH SUBJECT = '鏡像出站證書 Principal Server Certificate', START_DATE = '2017/01/01', EXPIRY_DATE = '2025/01/01';
GO

-- DROP ENDPOINT 鏡像出站
CREATE ENDPOINT 鏡像出站 STATE = STARTED
    AS TCP (LISTENER_PORT = 5022, LISTENER_IP = ALL)
    FOR DATABASE_MIRRORING ( AUTHENTICATION = CERTIFICATE host_1_cert, ENCRYPTION = REQUIRED ALGORITHM AES, ROLE = ALL);
GO

BACKUP CERTIFICATE host_1_cert TO FILE = 'D:\Certs\host_1_cert.cer'
GO

-- 創建用戶和證書(主實例):

-- 交換證書

USE MASTER
GO
-- DROP LOGIN host_2_login
CREATE LOGIN host_2_login WITH PASSWORD = '123456';
GO
-- DROP USER host_2_user
CREATE USER host_2_user FOR LOGIN host_2_login;
GO
-- DROP CERTIFICATE host_2_cert
CREATE CERTIFICATE host_2_cert
    AUTHORIZATION host_2_user
    FROM FILE = 'D:\Certs\host_2_cert.cer';
GO

GRANT CONNECT ON ENDPOINT::鏡像出站 TO host_2_login;
GO


主體服務器 結束============================================


鏡像服務器開始============================================

--創建證書和end-points(在鏡像實例服務器):

USE master
GO
-- drop master KEY

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '123456';
GO


-- DROP CERTIFICATE host_2_cert

CREATE CERTIFICATE host_2_cert WITH SUBJECT = '鏡像入站證書 Mirror Server Certificate', START_DATE = '2017/01/01', EXPIRY_DATE = '2025/01/01';
GO

-- DROP ENDPOINT 鏡像入站

CREATE ENDPOINT 鏡像入站 STATE = STARTED
    AS TCP (LISTENER_PORT = 5022, LISTENER_IP = ALL)
    FOR DATABASE_MIRRORING ( AUTHENTICATION = CERTIFICATE host_2_cert, ENCRYPTION = REQUIRED ALGORITHM AES, ROLE = ALL );
GO

BACKUP CERTIFICATE host_2_cert
    TO FILE = 'D:\Certs\host_2_cert.cer';
GO

-- 創建用戶和證書:

-- 交換證書

USE MASTER
GO
-- DROP LOGIN host_1_login
CREATE LOGIN host_1_login WITH PASSWORD = '123456';
go
-- DROP USER host_1_user
CREATE USER host_1_user FROM LOGIN host_1_login;
go

-- DROP  CERTIFICATE host_1_cert
CREATE CERTIFICATE host_1_cert
    AUTHORIZATION host_1_user
    FROM FILE = 'D:\Certs\host_1_cert.cer';
Go

GRANT CONNECT ON Endpoint::鏡像入站 TO host_1_login;
go


鏡像服務器結束=============================================


以下是參考的一些文檔

http://www.mssqlmct.cn/?post=6

http://www.mssqlmct.cn/dba/?post=65

https://www.howtoing.com/setup-database-mirroring-sql-server/

https://docs.microsoft.com/zh-cn/sql/database-engine/configure-windows/scm-services-change-the-service-startup-account

https://msdn.microsoft.com/zh-cn/library/ms191477(v=sql.90).aspx

https://msdn.microsoft.com/zh-cn/library/ms186384(v=sql.90).aspx

https://docs.microsoft.com/zh-cn/sql/relational-databases/databases/create-a-database-snapshot-transact-sql#Creating_on_AW

https://social.microsoft.com/Forums/zh-CN/fb765092-daea-478b-b05b-560b8565dac8?forum=sqlserverzhchs



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章