标签:数据库 Server 复制 服务器 SQL 镜像 100 mydb SELECT
数据库镜像可以与事务复制一起使用实现数据库整体的高可用性和高性能,其中镜像可以提供故障检测和故障转移,复制则用于实现读写分离。 数据库镜像涉及一个数据库的两个副本,这两个副本通常驻留在不同的计算机上。 在任何给定时间都只有一个数据库副本可供客户端使用。 该副本称为主体数据库。 客户端对主体数据库所做的更新应用到数据库的另一副本(称为镜像数据库)。 镜像涉及将在主体数据库上执行的每个插入、更新或删除操作的事务日志应用到镜像数据库上。 复制将数据和数据库对象从一个数据库复制和分发到另一个数据库,然后在数据库之间进行同步以保持一致性。 主体数据库和镜像数据库必须共享分发服务器 主体数据库/发布数据库:10.86.3.100,机器名WIN-3-100 镜像数据库:10.86.3.101,机器名WIN-3-101 分发数据库:10.86.3.102,机器名WIN-3-102 订阅数据库1:10.86.3.103,机器名WIN-3-103 数据库名称mydb,端口都是1433 镜像配置的验证方式采用证书验证 步骤1:配置镜像- 通过备份方式准备镜像数据库
BACKUP DATABASE [mydb] TO DISK = N'D:\backup\mydb.bak' WITH NOFORMAT, NOINIT, NAME = N'mydb-完整数据库备份 ', SKIP, NOREWIND, NOUNLOAD, STATS = 10 GO BACKUP LOG [mydb] TO DISK = N'D:\backup\mydb.trn' WITH NOFORMAT, NOINIT, NAME = N'mydb-事务日志 备份' , SKIP , NOREWIND , NOUNLOAD , STATS = 10 GO
将备份拷贝到镜像服务器上,在镜像服务器上恢复备份,需要指定RESTORE WITH NORECOVERY
RESTORE DATABASE [mydb] FROM DISK = N'D:\backup\mydb.bak' WITH FILE = 1, NORECOVERY , NOUNLOAD , STATS = 10 GO RESTORE LOG [mydb] FROM DISK = N'D:\backup\mydb.trn' WITH FILE = 1, NORECOVERY, NOUNLOAD, STATS = 10 GO
- 配置出站连接和证书
主体数据库配置如下:
--创建密钥 CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'password' SELECT * FROM sys.symmetric_keys --创建证书 CREATE CERTIFICATE cert_3_100 WITH SUBJECT = 'HOST_A certificate for database mirroring', EXPIRY_DATE = '1/1/2020' SELECT * FROM sys.certificates ; --创建端点 CREATE ENDPOINT master_instance STATE = STARTED AS TCP ( LISTENER_PORT=5022 , LISTENER_IP = ALL ) FOR DATABASE_MIRRORING ( AUTHENTICATION = CERTIFICATE cert_3_100 , ENCRYPTION = REQUIRED ALGORITHM AES , ROLE = ALL ) SELECT name , role_desc , state_desc , connection_auth_desc , encryption_algorithm_desc FROM sys.database_mirroring_endpoints --备份证书到其他系统 BACKUP CERTIFICATE cert_3_101 TO FILE = 'd:\cert_3_100.cer'; GO
镜像数据库配置如下:
--创建密钥 CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'password' SELECT * FROM sys.symmetric_keys --创建证书 CREATE CERTIFICATE cert_3_101 WITH SUBJECT = 'HOST_A certificate for database mirroring', EXPIRY_DATE = '1/1/2020' SELECT * FROM sys.certificates ; --创建端点 CREATE ENDPOINT backup_instance STATE = STARTED AS TCP ( LISTENER_PORT=5022 , LISTENER_IP = ALL ) FOR DATABASE_MIRRORING ( AUTHENTICATION = CERTIFICATE cert_3_101 , ENCRYPTION = REQUIRED ALGORITHM AES , ROLE = ALL ) SELECT name , role_desc , state_desc , connection_auth_desc , encryption_algorithm_desc FROM sys.database_mirroring_endpoints --备份证书到其他系统 BACKUP CERTIFICATE cert_3_101 TO FILE = 'd:\cert_3_101.cer'; GO
- 配置入站连接和证书
主体数据库配置如下:
USE master --为其他系统创建登录名 CREATE LOGIN login_3_101 WITH PASSWORD = 'password'; SELECT * FROM sys.server_principals --创建一个使用该登录名的用户 CREATE USER user_3_101 FOR LOGIN login_3_101 SELECT * FROM sys.sysusers --将证书与用户关联,并将镜像库生成的证书文件放到指定目录中 CREATE CERTIFICATE cert_3_101 AUTHORIZATION user_3_101 FROM FILE = 'd:\cert_3_101.cer' SELECT * FROM sys.certificates --授权对远程镜像端点的登录名的 CONNECT权限,授权完成后,完成对登录到所需的证书身份验证的设置 GRANT CONNECT ON ENDPOINT::master_instance TO login_3_101
镜像数据库配置如下:
USE master --为其他系统创建登录名 CREATE LOGIN login_3_100 WITH PASSWORD = 'password'; SELECT * FROM sys.server_principals --创建一个使用该登录名的用户,并将主体库生成的证书文件放到指定目录中 CREATE USER user_3_100 FOR LOGIN login_3_100 SELECT * FROM sys.sysusers --将证书与用户关联 CREATE CERTIFICATE cert_3_100 AUTHORIZATION user_3_100 FROM FILE = 'd:\cert_3_100.cer' SELECT * FROM sys.certificates --授权对远程镜像端点的登录名的 CONNECT权限,授权完成后,完成对登录到所需的证书身份验证的设置 GRANT CONNECT ON ENDPOINT::backup_instance TO login_3_100
- 配置镜像
选择主体数据库mydb数据库对象右键->任务->镜像->配置安全性
因为要采用高性能方式,所以不需要见证服务器
当同步完成后,主体数据库会显示“(主体,已同步)”,镜像数据库会显示(已同步,正在还原)
步骤2:配置分发服务器
- 在发布服务器、分发服务器和订阅服务器配置hosts文件,加入如下配置:
- 将10.86.3.102配置成分发服务器,分发数据库的快照文件建议配置相应的访问权限,因为我的账户有访问权限,所以略去这步
点击添加
剩下的就直接下一步,直到完成即可
- 在分发服务器属性对话框中启用发布服务器
- 在主体数据库(发布数据库)和镜像数据库中指定分发数据库
如果要发布的数据库非常大,建议选择业务空闲期进行初始化快照
配置用于故障转移的复制代理(快照代理和日志读取代理) 启动复制监视器,选择发布服务器,选择快照代理,右键代理配置,选择代理配置文件
输入代理名称,取消勾选“仅显示次配置文件中使用的参数”,指定 –PublisherFailoverPartner 代理参数的镜像名称WIN-3-100
按照上述方法,设置日志读取器代理,指定–PublisherFailoverPartner 代理参数的镜像名称WIN-3-100 创建完成之后还有关键的一步,就是在主体和镜像服务器上执行 DBCC TRACEON(1448,-1),如果可以重启最好加入到实例的启动参数中去。如果不设置该参数,会报复制的事务正等待下一次日志备份或等待镜像伙伴更新 步骤4配置订阅服务器 在订阅服务器中(WIN-3-103)中建立订阅复制,选择复制->本地订阅(右键)->新建订阅 步骤5测试 连接发布库,向测试表中插入数据并查询
USE mydb INSERT INTO Admin( user_name) VALUES('master' ) SELECT * FROM admin WHERE user_name='master'
连接订阅库,查询插入数据
USE mydb SELECT * FROM admin WHERE user_name='master'故障切换: 停止主体数据库服务,过一会在镜像库执行强制接收
use master ; alter database mydb set partner FORCE_SERVICE_ALLOW_DATA_LOSS; --强制接收切换成功后,新的主体数据库显示‘主体,已断开连接’ 在新的主体服务器执行:
USE mydb INSERT INTO Admin( user_name) VALUES('mirror' ) SELECT * FROM admin WHERE user_name='mirror'
在订阅服务器查看:
USE mydb SELECT * FROM admin WHERE user_name='mirror'测试成功(测试成功的图居然忘记截了。。。) 当宕机的原主体数据库连接上来后,现在的主体数据库状态由“主体,已断开”变成“主体,挂起”,此时需要在现主体数据库上执行恢复操作,主体数据库状态变为“主体,已同步”
use master ; alter database mydb set partner resume;
标签:数据库,Server,复制,服务器,SQL,镜像,100,mydb,SELECT 来源: https://www.cnblogs.com/cuihongyu3503319/p/10678877.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。