SQLserver 数据库断开镜像及重建步骤

1.镜像断开

1.1 查看数据库的复制信息

 SELECT
     mirroring_role_desc AS [Mirroring Role],
     mirroring_state_desc AS [Mirroring State],
     database_id AS [Database ID],
     DB_NAME(database_id) AS [Database Name],
     mirroring_partner_name AS [Partner Server],
     mirroring_partner_instance AS [Partner Instance],
     mirroring_witness_name AS [Witness Server],
     mirroring_witness_state_desc AS [Witness State]
 FROM
     sys.database_mirroring

1.2 删除原有的证书

查看证书路径

find / -name "master.cer" -or -name "slave.cer"

 源库
 rm -fr master.cer slave.cer
 ​
 镜像库
 rm -fr master.cer slave.cer

1.3 删除端点

查询端点

select * from sys.endpoints

 源库
 drop endpoint master_slave_endpoint;
 ​
 镜像库
 drop endpoint master_slave_endpoint;

1.4 证书及key删除

查询证书及key

SELECT name, key_algorithm, key_length FROM sys.symmetric_keys WHERE key_guid IS NOT NULL; SELECT name, pvt_key_encryption_type_desc, thumbprint FROM sys.certificates;

 源库
 alter master key drop encryption by service master key;
 drop certificate master_cert;
 drop certificate slave_cert;
 drop master key;
 ​
 镜像库
 alter master key drop encryption by service master key;
 drop certificate master_cert;
 drop certificate slave_cert;
 drop master key;

1.5 删除用户

查询用户

EXEC sp_helplogins;

SELECT name, type_desc, create_date, modify_date FROM sys.database_principals WHERE type_desc IN ('SQL_USER', 'SQL_LOGIN', 'WINDOWS_USER', 'WINDOWS_GROUP')

 主库
 drop LOGIN repl_slave_login;
 DROP USER  repl_slave_user; 
  
 镜像库
 DROP LOGIN repl_master_login;
 DROP USER  repl_master_user;

1.6 断开镜像

 主库
 alter database SICS set partner off;
 ​
 镜像库
 alter database SICS set partner off;

2.镜像重建

1. 创建证书

1.1 源库
1) 创建证书
 IF EXISTS(SELECT * FROM sys.databases WHERE name='master' and is_master_key_encrypted_by_server=1)    
     OPEN MASTER KEY DECRYPTION BY PASSWORD='23987hxJ#KL95234nl0zBe';
 ELSE
     CREATE MASTER KEY ENCRYPTION BY PASSWORD='23987hxJ#KL95234nl0zBe';
  GO
 USE master;
  go
  CREATE CERTIFICATE master_cert
     WITH SUBJECT =
     'master certificate for database mirroring', 
   start_date='2021-11-07',expiry_date='2030-01-01';
  GO

2) 备份到服务器
  BACKUP CERTIFICATE master_cert TO FILE ='/data/msdata/master.cer';

3) 创建镜像端点
Use master;
 go
 CREATE ENDPOINT master_slave_endpoint
   STATE = STARTED 
AS TCP (
      LISTENER_PORT=5022
      , LISTENER_IP = ALL
   ) 
FOR DATABASE_MIRRORING ( 
      AUTHENTICATION = CERTIFICATE master_cert
      , ENCRYPTION = REQUIRED ALGORITHM AES
      , ROLE =	ALL
  );
 GO

4) 创建镜像用户
 USE master;
 go
 CREATE LOGIN repl_slave_login WITH PASSWORD='[email protected]';
 GO

 USE master;
go
 CREATE USER repl_slave_user FOR LOGIN repl_slave_login;
 GO

1.2 镜像库
1) 创建证书
IF EXISTS(SELECT * FROM sys.databases WHERE name='master' and is_master_key_encrypted_by_server=1)    
    OPEN MASTER KEY DECRYPTION BY PASSWORD='23987hxJ#KL95234nl0zBe';
ELSE
    CREATE MASTER KEY ENCRYPTION BY PASSWORD='23987hxJ#KL95234nl0zBe';
GO

 USE master;
go
CREATE CERTIFICATE slave_cert
	WITH SUBJECT =
	'slave certificate for database mirroring',
  start_date='2021-11-07',expiry_date='2030-01-01';
 GO

2) 备份证书到服务器
BACKUP CERTIFICATE slave_cert TO FILE ='/data/msdata/slave.cer';

3) 创建镜像端点
Use master;
go
 CREATE ENDPOINT master_slave_endpoint
   STATE = STARTED 
AS TCP (
      LISTENER_PORT=5022
      , LISTENER_IP = ALL
   ) 
FOR DATABASE_MIRRORING ( 
      AUTHENTICATION = CERTIFICATE slave_cert
      , ENCRYPTION = REQUIRED ALGORITHM AES
      , ROLE =	ALL
   );
 GO

4) 创建镜像用户
USE master;
 go
 CREATE LOGIN repl_master_login WITH PASSWORD='[email protected]';
 GO

 USE master;
go
 CREATE USER repl_master_user FOR LOGIN repl_master_login;
go 

2.测试5022连通性

镜像库
telnet 10.61.0.101 5022
源库
telnet 10.61.0.102 5022

3.源库与镜像库证书获取并授权

3.1 证书获取
1)源库
scp -r 10.61.0.102:/data/msdata/slave.cer /data/msdata/
chown -R mssql:mssql /data/msdata/slave.cer

2)镜像库
scp -r 10.61.0.101:/data/msdata/master.cer /data/msdata/
chown -R mssql:mssql /data/msdata/master.cer

3.2 端点授权
源库
Use master;
 go
 CREATE CERTIFICATE slave_cert 
AUTHORIZATION repl_slave_user 
FROM 
FILE = '/data/msdata/slave.cer'
 GO
GRANT connect on endpoint::master_slave_endpoint TO [repl_slave_login];
GO

镜像库
Use master;
go
 CREATE CERTIFICATE master_cert 
AUTHORIZATION repl_master_user 
FROM 
FILE = '/data/msdata/master.cer'
GO
 GRANT connect on endpoint::master_slave_endpoint TO [repl_master_login];
 GO

4.源库备份

4.1 源库备份数据及日志
USE master;
 ALTER DATABASE SICS SET RECOVERY FULL with no_wait;
 GO
 BACKUP DATABASE SICS to disk='/data/backup/20211108_SICS.bak' WITH FORMAT;
 GO
 BACKUP LOG SICS to disk='/data/backup/20211108_SICS_log.bak';
 GO

4.2 镜像库获取备份及授权
scp -r /data/backup/20211108_SICS.bak 10.61.0.102:/data/backup/
scp -r /data/backup/20211108_SICS_log.bak 10.61.0.102:/data/backup/

chown  -R mssql. 20211108_SICS.bak  20211108_SICS_log.bak

4.3 镜像库恢复数据

恢复前镜像库把原有的库删除干净

Restore database SICS from disk='/data/backup/20211108_SICS.bak' with norecovery,stats=10,Move N'SICS' to '/data/msdata/SICS.mdf', Move N'SICS_log' to '/data/msdata/SICS_log.ldf' 
 Restore log SICS from disk='/data/backup/20211108_SICS_log.bak' with norecovery,file=1
 go

5.镜像库及源库启用镜像

步骤不能错,先启用镜像库,在启用源库

1)镜像库启用镜像
Alter database SICS set partner='TCP://10.61.0.101:5022'
go

2)源库启用镜像
Alter database SICS set partner='TCP://10.61.0.102:5022'
go

6.更改源库为高性能异步镜像模式

需在镜像库执行

此操作是指定数据库的安全性模式设置为关闭;可大大提高主库的性能

Alter database SICS set safety off;
go

你可能感兴趣的:(数据库,sqlserver)