zoukankan      html  css  js  c++  java
  • 非域环境下使用证书部署数据库(SqlServer2008R2)镜像

    非域环境下使用证书部署数据库(SqlServer2008R2)镜像

    前言

    部署数据库镜像一般有两种方式域环境下部署http://liulike.blog.51cto.com/1355103/339183 和 非域环境下 证书部署参考地址: http://www.cnblogs.com/shanyou/archive/2010/05/10/1732007.html

    这里是自己在三个虚拟机非域环境下部署测试的  

    一、环境

    数据库

    系统

    IP

    角色

    SqlServer2008R2

    Server 2008R2

    10.10.0.52

    主体

    SqlServer2008R2

    Server 2008R2

    10.10.0.53

    镜像

    SqlServer2008R2

    Server 2008R2

    10.10.0.54

    见证

    配置数据库镜像之前 需要打开端口1433和5022 是三台服务器的都要

    下面将图示说明开启1433和5022的步骤:

    1. 打开防火墙-》高级设置

     

     

     

     二、镜像部署

    1证书与端点(出站连接)

    1.1主题服务器

    复制代码
    USE master;  
      
    --DROP MASTER KEY  
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '1qaz!QAZ';  
    GO  
      
    --为主体服务器 host_A 实例制作一个证书。  
      
    --DROP CERTIFICATE host_A_cert  
    CREATE CERTIFICATE host_A_cert   
    WITH SUBJECT = 'host_A certificate',START_DATE = '3/12/2015',EXPIRY_DATE = '01/01/2099';  
    GO   
      
    --使用该证书为服务器实例创建一个镜像端点。  
      
    --DROP ENDPOINT Endpoint_Mirroring  
    CREATE ENDPOINT Endpoint_Mirroring  
    STATE = STARTED  
    AS TCP (  
    LISTENER_PORT=5022  
    , LISTENER_IP = ALL  
    )   
    FOR DATABASE_MIRRORING (   
    AUTHENTICATION = CERTIFICATE host_A_cert  
    , ENCRYPTION = REQUIRED ALGORITHM AES  
    , ROLE = PARTNER  
    );  
    GO  
      
    --备份host_A 证书,并将其复制到镜像服务器 host_B 和见证服务器 host_C  
      
    BACKUP CERTIFICATE host_A_cert TO FILE = 'c:DbMirrorhost_A.cer';  
    GO  
    复制代码

    1.2镜像服务器

    复制代码
    /***********************************************
    在镜像服务器 host_B 执行此脚本
    ***********************************************/
    
    USE master;
    
    --DROP MASTER KEY
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '1qaz!QAZ';
    GO
    
    --为镜像服务器 host_B 实例制作一个证书。
    --DROP CERTIFICATE host_B_cert
    CREATE CERTIFICATE host_B_cert
    WITH SUBJECT = 'host_B certificate',START_DATE = '3/12/2015',EXPIRY_DATE = '01/01/2099';
    GO
    
    --在 host_B 中为服务器实例创建一个镜像端点。
    --DROP ENDPOINT Endpoint_Mirroring
    CREATE ENDPOINT Endpoint_Mirroring
    STATE = STARTED
    AS TCP (
    LISTENER_PORT=5022
    , LISTENER_IP = ALL
    ) 
    
    FOR DATABASE_MIRRORING (
    AUTHENTICATION = CERTIFICATE host_B_cert
    , ENCRYPTION = REQUIRED ALGORITHM AES
    , ROLE = PARTNER
    );
    GO
    
    --备份 host_B 证书,并将其复制到主体服务器 host_A 和见证服务器 host_C 上
    
    BACKUP CERTIFICATE host_B_cert TO FILE = 'c:DbMirrorhost_B.cer';
    GO
    复制代码

    1.3见证服务器

    复制代码
    /****************************
    见证服务器 host_C 执行
    *****************************/
    
    --ALTER DATABASE MirrorDB SET PARTNER OFF
    USE master;
    --DROP MASTER KEY
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '1qaz!QAZ';
    GO
    
    --为此服务器实例制作一个证书。
    --DROP CERTIFICATE host_C_cert
    CREATE CERTIFICATE host_C_cert
    WITH SUBJECT = 'host_C certificate',START_DATE = '3/12/2015',EXPIRY_DATE = '01/01/2099';
    GO
    
    --使用该证书为服务器实例创建一个镜像端点。
    --DROP ENDPOINT Endpoint_Mirroring
    CREATE ENDPOINT Endpoint_Mirroring
    STATE = STARTED
    AS TCP (
    LISTENER_PORT=5022
    , LISTENER_IP = ALL
    )
    
    FOR DATABASE_MIRRORING ( 
    AUTHENTICATION = CERTIFICATE host_C_cert
    , ENCRYPTION = REQUIRED ALGORITHM AES
    , ROLE = WITNESS
    );
    GO
    
    --备份 host_C 证书,并将其复制到主体服务器 host_A 和镜像服务器 host_C 上
    
    BACKUP CERTIFICATE host_C_cert TO FILE = 'c:dbmirrorhost_C.cer';
    GO
    复制代码

    2配置出站连接

    2.1主体服务器

    复制代码
    --在 host_A 上为镜像服务器 host_B 创建一个登录名。
    
    USE master;
    --DROP LOGIN host_B_login
    CREATE LOGIN host_B_login WITH PASSWORD = '1qaz!QAZ';
    GO
    
    --创建一个使用该登录名的用户。
    --DROP USER host_B_user
    CREATE USER host_B_user FOR LOGIN host_B_login;
    GO
    
    --使证书与该用户关联。
    --DROP CERTIFICATE host_B_cert
    CREATE CERTIFICATE host_B_cert
    AUTHORIZATION host_B_user
    FROM FILE = 'c:DbMirrorhost_B.cer'
    GO
    
    --授予对远程镜像端点的登录名的 CONNECT 权限。
    GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [host_B_login];
    GO
    
    --在主体服务器 host_A 上为见证服务器 host_C 创建一个登录名。
    USE master;
    --DROP LOGIN host_C_login
    CREATE LOGIN host_C_login WITH PASSWORD = '1qaz!QAZ';
    GO
    
    --创建一个使用该登录名的用户。
    --DROP USER host_C_user
    CREATE USER host_C_user FOR LOGIN host_C_login;
    
    GO
    
    --使证书与该用户关联。
    --DROP CERTIFICATE host_C_cert
    CREATE CERTIFICATE host_C_cert
    AUTHORIZATION host_C_user
    FROM FILE = 'c:DbMirrorhost_C.cer'
    GO
    
    --授予对远程镜像端点的登录名的 CONNECT 权限。
    GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [host_C_login];
    GO
    
    --主体服务器上创建用于本机的登录名(MS可以省略)
    USE master;
    --DROP LOGIN host_A_login
    CREATE LOGIN host_A_login WITH PASSWORD= '1qaz!QAZ';
    GO
    
    --创建一个使用该登录名的用户。
    --DROP USER host_A_user
    CREATE USER host_A_user FOR CERTIFICATE host_A_cert;
    GO
    
    --授予对远程镜像端点的登录名的 CONNECT 权限。
    GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [host_A_login];
    GO
    复制代码

    2.2镜像服务器

    复制代码
    --在镜像服务器 host_B 上为主体服务器 host_A 创建一个登录名。
    
    USE master;
    --DROP LOGIN host_A_login
    CREATE LOGIN host_A_login WITH PASSWORD = '1qaz!QAZ';
    GO
    
    --创建一个使用该登录名的用户。
    --DROP USER host_A_user
    CREATE USER host_A_user FOR LOGIN host_A_login;
    GO
    
    --使证书与该用户关联。
    --DROP CERTIFICATE host_A_cert
    CREATE CERTIFICATE host_A_cert
    AUTHORIZATION host_A_user
    FROM FILE = 'c:Dbmirrorhost_A.cer'
    GO
    
    --授予对远程镜像端点的登录名的 CONNECT 权限。
    GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [host_A_login];
    GO
    
    --在镜像服务器 host_B 上为见证服务器 host_C 创建一个登录名。
    
    USE master;
    --DROP LOGIN host_C_login
    CREATE LOGIN host_C_login WITH PASSWORD = '1qaz!QAZ';
    GO
    
    ----创建一个使用该登录名的用户。
    --DROP USER host_C_user 
    CREATE USER host_C_user FOR LOGIN host_C_login;
    GO
    
    ----使证书与该用户关联。
    --DROP CERTIFICATE host_C_cert
    CREATE CERTIFICATE host_C_cert
    AUTHORIZATION host_C_user
    FROM FILE = 'c:Dbmirrorhost_C.cer'
    GO
    
    ----授予对远程镜像端点的登录名的 CONNECT 权限。
    GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [host_C_login];
    GO
    
    --在镜像服务器 host_B 上为本机创建一个登录名(MS可以省略)
    USE master;
    --DROP LOGIN host_B_login
    CREATE LOGIN host_B_login WITH PASSWORD = '1qaz!QAZ';
    GO
    
    --创建一个使用该登录名的用户。
    --DROP USER host_B_user
    CREATE USER host_B_user FOR CERTIFICATE host_B_cert;
    GO
    
    --授予对远程镜像端点的登录名的 CONNECT 权限。
    GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [host_B_login];
    GO
    复制代码

    2.3见证服务器

    复制代码
    --在见证服务器 host_C 上为主体服务器 host_A 创建一个登录名。
    
    USE master;
    --DROP LOGIN host_A_login
    CREATE LOGIN host_A_login WITH PASSWORD = '1qaz!QAZ';
    GO
    
    --创建一个使用该登录名的用户。
    --DROP USER host_A_user
    CREATE USER host_A_user FOR LOGIN host_A_login;
    GO
    
    --使证书与该用户关联。
    --DROP CERTIFICATE host_A_cert
    CREATE CERTIFICATE host_A_cert
    AUTHORIZATION host_A_user
    FROM FILE = 'c:DbMirrorhost_A.cer'
    GO
    
    --授予对远程镜像端点的登录名的 CONNECT 权限。
    GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [host_A_login];
    GO
    
    --在见证服务器 host_C 上为镜像服务器 host_B 创建一个登录名。
    
    USE master;
    --DROP LOGIN host_B_login
    CREATE LOGIN host_B_login WITH PASSWORD = '1qaz!QAZ';
    GO
    
    --创建一个使用该登录名的用户。
    --DROP USER host_B_user
    CREATE USER host_B_user FOR LOGIN host_B_login;
    GO
    
    --使证书与该用户关联。
    --DROP CERTIFICATE host_B_cert
    CREATE CERTIFICATE host_B_cert
    AUTHORIZATION host_B_user
    FROM FILE = 'c:DbMirrorhost_B.cer'
    GO
    
    --授予对远程镜像端点的登录名的 CONNECT 权限。
    GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [host_B_login];
    GO
    复制代码

    3配置数据库登录信息

    在主体数据库中查询 sid和name

    USE master;
    select sid,name from syslogins;

    在备份数据库执行

    USE master;
    exec sp_addlogin 
    @loginame = 'xiejun', 
    @passwd = '1qaz!QAZ', 
    @sid = 0x9E2D3238732D264483489528B0DC0D9F ;

    4备份数据库

    主体数据库中执行

    在主机上备份数据库,先做完整备份,再做日志事务备份。

    USE MASTER;
    GO
    BACKUP DATABASE [dbname]
    TO DISK = 'c:DbMirrordbname.bak'
    WITH INIT
    GO
    BACKUP LOG [dbname]
    TO DISK = 'c:DbMirrordbname.bak'
    GO

    在镜像数据库

    还原的时候必须把数据库和事务日志以NoRecovery的形式还原

    同SQL:

    RESTORE database [dbname] from DISK='c:DbMirrordbname.bak' WITH FILE=1,NORECOVERY;
    RESTORE log [dbname] from DISK='c:DbMirrordbname.bak' WITH FILE=2,NORECOVERY;

     5配置伙伴服务器

    执行顺序为 镜像-》主体-》见证

    在镜像服务器配置

    ALTER DATABASE xiejun
    SET PARTNER = 'TCP://10.10.0.52:5022';
    GO

    在主体服务器配置

    ALTER DATABASE xiejun
    SET PARTNER = 'TCP://10.10.0.53:5022';
    GO

    在主体服务器配置

    ALTER DATABASE [xiejun]
    SET WITNESS = 'TCP://10.10.0.54:5022';
    GO

    到此服务器配置成功

     

    四、常见命令

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    --切换主备
    use master;
    alter database testdb set partner failover;
      
    -- 备机强制切换
    use master;
    alter database testdb set partner force_service_allow_data_loss;
      
    --恢复镜像
    use master;
    alter database testdb set partner resume;
      
      
    --取消见证服务器
    ALTER DATABASE testdb SET WITNESS OFF ;
      
    --取消镜像
    ALTER DATABASE testdb SET PARTNER OFF;
      
    --设置镜像数据库还原为正常
    RESTORE DATABASE testdb WITH RECOVERY;
  • 相关阅读:
    python-MongoDB 非关系型数据库
    python-爬虫-Beautifulsoup模块
    python-flask-路由匹配源码分析
    python-flask-配置文件的源码分析
    python-爬虫-selenium模块
    python-flask-请求源码流程
    python-爬虫
    iOS开发——创建你自己的Framework
    手把手教你封装下载管理器
    AFNetwork 作用和用法详解
  • 原文地址:https://www.cnblogs.com/waw/p/9318847.html
Copyright © 2011-2022 走看看