基于证书的sqlserver镜像搭建

举报
LD的SQL路 发表于 2021/12/03 15:21:09 2021/12/03
【摘要】 Sqlserver数据库镜像的搭建步骤0、首先在hosts文件中添加IP映射(主库和镜像库上都添加)192.168.3.13  node1192.168.3.10  node21、创建主密钥(主库和镜像库上都执行)use mastergocreate master key encryption by password='$a123456'go2、创建主库和镜像库的证书(分别在主库和镜像库上执...

Sqlserver数据库镜像的搭建步骤

0、首先在hosts文件中添加IP映射(主库和镜像库上都添加

192.168.3.13  node1

192.168.3.10  node2

1、创建主密钥(主库和镜像库上都执行)

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

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

 

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

 

4、备份证书(主库和镜像的库的都备份,并互相拷贝过去,保证每个服务器上都有2个证书)

主库上执行:

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

 

5、创建登录名(这个要和证书关联,所以1创建2的,2创建1的)

主库上执行:

use master
go
create login mirror02_login with password='abc@123456'
go

镜像库上执行:

use master
go
create login mirror01_login with password='abc@123456'
go

 

6、创建使用该登录名的用户

主库上执行:

use master
go
create user mirror02_user for login mirror02_login
go

镜像库上执行:

use master
go
create user mirror01_user for login mirror01_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 mirror01_cert
authorization mirror01_user
from file='D:\cert\mirror01_cert.cer'
go

 

8、授予对远程数据库端点的登录名的CONNECT权限

命令:

主库上执行:

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

镜像库上执行:

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

 

9、对需要做镜像的数据库做完整备份和事务日志备份,

1.完整备份

BACKUP DATABASE [test] TO  DISK = N'D:\bak\test.bak' WITH NOFORMAT, INIT,  NAME = N'test-完整 数据库 备份', SKIP, NOREWIND, NOUNLOAD, COMPRESSION,  STATS = 10

GO

declare @backupSetId as int

select @backupSetId = position from msdb..backupset where database_name=N'test' and backup_set_id=(select max(backup_set_id) from msdb..backupset where database_name=N'test' )

if @backupSetId is null begin raiserror(N'验证失败。找不到数据库test”的备份信息。', 16, 1) end

RESTORE VERIFYONLY FROM  DISK = N'D:\bak\test.bak' WITH  FILE = @backupSetId,  NOUNLOAD,  NOREWIND

GO

 

 

2.事物日志备份

BACKUP LOG [test] TO  DISK = N'D:\bak\test_log.tran' WITH NOFORMAT, INIT,  NAME = N'test-完整 数据库 备份', SKIP, NOREWIND, NOUNLOAD, COMPRESSION,  STATS = 10

GO

declare @backupSetId as int

select @backupSetId = position from msdb..backupset where database_name=N'test' and backup_set_id=(select max(backup_set_id) from msdb..backupset where database_name=N'test' )

if @backupSetId is null begin raiserror(N'验证失败。找不到数据库test”的备份信息。', 16, 1) end

RESTORE VERIFYONLY FROM  DISK = N'D:\bak\test_log.tran' WITH  FILE = @backupSetId,  NOUNLOAD,  NOREWIND

GO

 

 

 

10、把主库上的备份在镜像库上做还原(先还原完整备份,再还原事务日志),使用NORECOVERY模式

1.还原完整备份

USE [master]

RESTORE DATABASE [test] FROM  DISK = N'D:\bak\test.bak' WITH  FILE = 1,  NORECOVERY,  NOUNLOAD,  STATS = 5

GO

2.还原事物日志

 

RESTORE LOG [test] FROM  DISK = N'D:\bak\ test.tran' WITH  FILE = 1,  NORECOVERY,  NOUNLOAD,  STATS = 10

GO

 

注:同样的操作方式把其他库也备份一下

11连接镜像(先在镜像库上操作,然后在主库上操作)

镜像库上执行:(做完这个操作后,数据库的状态:正在恢复)

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

主库上执行:(做完这个操作,镜像就搭建好了)

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

 

注:同样的操作方式把其他库弄一下即可

12、灾备切换方式

主库宕机后,只要在镜像库上执行如下2个SQL即可

第一步:脱离镜像
alter database test set partner off

第二步;修改数据库的状态为recovery
restore database test with recovery

 

 

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。