28-SQLServer帶見證服務器的鏡像搭建


一、注意點

1.數據庫的模式要是完整模式。

2.要對數據庫完整備份和事務日志備份,分別還原到鏡像庫上,使用NORECOVERY模式。

3.鏡像數據庫是不允許刪除和操作,即便查看屬性也不行。

4.先刪除端點,再刪除證書,再刪除主密鑰。

5.見證服務器不需要還原主體上的數據庫。

6.該文檔中主體服務器、鏡像服務器、見證服務器都沒有加入到域中。

7.主體服務器、鏡像服務器、見證服務器的操作系統可以不一樣,但是SQL版本得一致

 

二、搭建步驟

1、創建主密鑰(主庫、鏡像庫、認證服務器上都執行)

命令:

use master
go
create master key encryption by password='$a123456'
go

查看主密鑰

select * from sys.key_encryptions

創建主密鑰之前:

創建主密鑰之后:

2、分別在主體服務器、鏡像服務器、見證服務器上創建證書

命令:

主庫上執行:

use master
go
create certificate mirror01_cert with subject='mirror01 certificate',expiry_date='2099-1-1'
go

鏡像庫上執行:

use master
go
create certificate mirror02_cert with subject='mirror02 certificate',expiry_date='2099-1-1'
go

--見證服務器上執行

use master
go
create certificate mirror_witness_cert with subject='mirrorWitness certificate',expiry_date='2099-1-1'
go

 

查看證書:

select * from sys.certificates

 

3、分別在主體服務器、鏡像服務器、見證服務器上創建端點

命令:

主庫上執行:

use master
go
create endpoint Endpoint_Mirroring
state=started
as tcp ( listener_port = 5022,listener_ip = all )
for database_mirroring ( authentication = certificate mirror01_cert, encryption = required algorithm aes, role = all )
go

鏡像庫上執行:

use master
go
create endpoint Endpoint_Mirroring
state=started
as tcp ( listener_port = 5022,listener_ip = all )
for database_mirroring ( authentication = certificate mirror02_cert, encryption = required algorithm aes, role = all )
go

--見證服務器上執行
use master
go
create endpoint Endpoint_Mirroring
state=started
as tcp ( listener_port = 5022,listener_ip = all )
for database_mirroring ( authentication = certificate mirror_witness_cert, encryption = required algorithm aes, role = all )
go

SSMS查看創建的端點

 

4、備份證書(主體服務器、鏡像服務器、見證服務器都備份,並互相拷貝過去,保證每個服務器上都有3個證書)

命令:

主庫上執行:

use master
go
backup certificate mirror01_cert to file = 'D:\cert\mirror01_cert.cer'
go

鏡像庫上執行:

use master
go
backup certificate mirror02_cert to file = 'D:\cert\mirror02_cert.cer'
go

--見證服務器上執行
use master
go
backup certificate mirror_witness_cert to file = 'D:\cert\mirror_witness_cert.cer'
go

 

 

 

5、創建登錄名(這個要和證書關聯,所以主體服務器、鏡像服務器、見證服務器都要創建除自己以外的另外2個用戶)

命令:

主庫上執行:

--創建鏡像庫上的證書關聯用戶
use master
go
create login mirror02_login with password='abc@123456'
go

--創建見證庫上的證書關聯用戶
use master
go
create login mirror_witness with password='abc@123456'
go

鏡像庫上執行:

--創建主庫上的證書關聯用戶
use master
go
create login mirror01_login with password='abc@123456'
go

--創建見證庫上的證書關聯用戶
use master
go
create login mirror_witness with password='abc@123456'
go

見證服務器執行
--創建主庫上的證書關聯用戶
use master
go
create login mirror01_login with password='abc@123456'
go

--創建鏡像庫上的證書關聯用戶
use master
go
create login mirror02_login with password='abc@123456'
go

 

 

6、創建使用該登錄名的用戶(主體服務器、鏡像服務器、見證服務器都要創建)

命令:

主庫上執行

--創建鏡像庫上的證書關聯用戶
use master
go
create user mirror02_user for login mirror02_login
go

--創建見證庫上的證書關聯用戶
use master
go
create user mirror_witness_user for login mirror_witness
go

鏡像庫上執行

--創建主庫上的證書關聯用戶
use master
go
create user mirror01_user for login mirror01_login
go

--創建見證庫上的證書關聯用戶
use master
go
create user mirror_witness_user for login mirror_witness
go

見證服務器執行
--創建主庫上的證書關聯用戶
use master
go
create user mirror01_user for login mirror01_login
go

--創建鏡像庫上的證書關聯用戶
use master
go
create user mirror02_user for login mirror02_login
go

 

 

7、證書與用戶關聯

命令:

主庫上執行

--使鏡像庫上的證書與用戶關聯
use master
go
create certificate mirror02_cert
authorization mirror02_user
from file='D:\cert\mirror02_cert.cer'
go

--使見證庫上的證書與用戶關聯
use master
go
create certificate mirror_witness_cert
authorization mirror_witness_user
from file='D:\cert\mirror_witness_cert.cer'
go

鏡像庫上執行

--使主庫上的證書與用戶關聯
use master
go
create certificate mirror01_cert
authorization mirror01_user
from file='D:\cert\mirror01_cert.cer'
go

--使見證庫上的證書與用戶關聯
use master
go
create certificate mirror_witness_cert
authorization mirror_witness_user
from file='D:\cert\mirror_witness_cert.cer'
go

見證服務器執行
--使主庫上的證書與用戶關聯
use master
go
create certificate mirror01_cert
authorization mirror01_user
from file='D:\cert\mirror01_cert.cer'
go

--使鏡像庫上的證書與用戶關聯
use master
go
create certificate mirror02_cert
authorization mirror02_user
from file='D:\cert\mirror02_cert.cer'
go

 

 

8、授予對遠程數據庫端點的登錄名的CONNECT權限(每個上面2個用戶都要有端點的權限)

命令:

主庫上執行

use master
go
GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [mirror02_login];
go

use master
go
GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [mirror_witness];
go

鏡像庫上執行

use master
go
GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [mirror01_login];
go

use master
go
GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [mirror_witness];
go

見證服務器執行
use master
go
GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [mirror01_login];
go

use master
go
GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [mirror02_login];
go

 

 9、對需要做鏡像的數據庫做完整備份和事務日志備份,然后在鏡像庫上做還原(先還原完整備份,再還原事務日志),使用NORECOVERY模式,這里不做闡述,最后還原后的數據庫狀態如下:

 10.連接鏡像(先在鏡像庫上操作,然后在主庫上操作,不需要在見證數據庫上操作)

注:CCAS21、CCAS22、JF-RLZY-DB1是3台機器的機器名

命令:

鏡像庫上執行 (做完這個操作后,數據庫的狀態:正在恢復)

use master
go
ALTER DATABASE test SET PARTNER = 'TCP://CCAS21:5022';
go

 

 

主庫上執行

--連接鏡像庫
use master
go
ALTER DATABASE test SET PARTNER = 'TCP://CCAS22:5022';
go
--連接見證服務器
use master
go
ALTER DATABASE test SET WITNESS = 'TCP://JF-RLZY-DB1:5022';
go

 

 11.查看數據庫的狀態

(1)主庫的狀態

 

 

 

 (2)鏡像庫的狀態

三、用到的SQL

--1.刪除端點
drop endpoint Endpoint_Mirroring

--2.刪除證書(所有證書都刪除)
drop certificate mirror01_cert

--3.查看證書

select * from sys.certificates

--4.刪除主秘鑰

drop master key

--5.查詢數據庫的狀態

命令:

select
mirroring_role_desc, --數據庫在鏡像會話中的角色
mirroring_state_desc, --鏡像當前狀態
mirroring_safety_level_desc, --鏡像運行模式
mirroring_witness_state_desc --與見證服務器的連接情況
from sys.database_mirroring where database_id=DB_ID(N'test')

select
mirroring_role_desc, --數據庫在鏡像會話中的角色
mirroring_state, --鏡像數據庫的狀態,0-已掛起,1-於其他伙伴斷開,2-正在同步,3-掛起故障轉移,4-已同步
mirroring_state_desc, --鏡像當前狀態
mirroring_safety_level_desc, --鏡像運行模式
mirroring_safety_level , --數據庫的同步模式,1是異步,2是同步
mirroring_connection_timeout, --鏡像連接超時時間,默認是10秒
mirroring_failover_lsn --最新事務日志記錄的日志序列號
from sys.database_mirroring where database_id=DB_ID(N'APPROVE')

主庫上執行

 

 

 

 鏡像庫上執行

6、監控的語句

命令:

select d.name as dbname, m.mirroring_state from sys.databases d
inner join sys.database_mirroring m
on d.database_id = m.database_id
where mirroring_state='1' and m.database_id >4

注:mirroring_state的值為1表示與另一伙伴斷開連接

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM