使用事务日志传送模式搭建Sql Server 2017主从同步,该模式有一定的延迟,是通过3个不同的定时任务,将主库的日志同步到从库进行恢复来实现数据库同步操作。
该模式在同步时候,从库不可以被使用,否则同步就会失败。
环境准备
两台服务器,配置都是8g2核,50g硬盘,操作系统版本Windows Server 2019 Datacenter
- 主库:server1,192.168.56.110
- 从库:server2,192.168.56.111
本人使用虚拟机做模拟配置,在虚拟机操作系统上做如下配置
-
虚拟机配置两张网卡,以便和主机通讯
-
虚拟机启动远程桌面 ,右键左下角win图标-系统-远程桌面,点击启用
-
创建操作系统账户sqadmin,分配管理员权限
-
为方便测试,关闭系统防火墙,控制面板\系统和安全\Windows Defender 防火墙\自定义设置
-
安装Sql Server 2017企业版,个人的Express版本不支持事务日志复制
-
安装SSMS 19.2版本
安装SQL Server 2017
勾选SQL Server复制
服务器配置,三个服务都改成自动
数据库引擎配置,服务配置,选择“混合模式(SQL Server身份证和Windows身份证)”,输入sa账号密码,点击添加当前用户作为SQL Server管理员,这里也可以另外创建一个操作系统账号
点击下一步,直到安装完成!
两台服务共同配置准备
创建系统账号sqadmin,设置管理员权限
设置服务启动账户sqadmin
打开Sql Server Configuration Manager,进入SQL Server 服务,将SQL Server服务和SQL Server 代理服务的登录身份都改成sqadmin,并设置自动启动
配置服务器代理账户
打开SQL Server Management Studio,链接数据库
右键点击链接,选择属性,打开服务器属性面板,点击安全性选项页,勾选启动代理账户,输入sqadmin账户密码
一、主库 server1 配置
创建共享文件夹
创建共享文件夹c:\backup,设置共享,并添加sqadmin账号权限
创建测试数据库demo
打开SQL Server Management Studio,链接数据库
创建测试数据库demo,并创建测试表t_user
配置事务日志传送
右键点击数据库,点击属性,点击“事务日志传送”选项,勾选“将此数据库启用为日志传送配置中的主数据库”
主库设置备份日志文件存储目录,点击确定后,下一步就配置从库
二、从库 server2 配置
添加辅助数据库配置
链接到辅助数据库,注意,这里要填ip链接。
配置从库之前,需要到从库服务创建好共享文件夹c:\backup,和主库的一样,需要设置sqadmin完全读写权限
配置完成后,
点击确定,会自动在从库创建数据库demo_bak,以及自动创建三个计划任务(主库1个,从库2个)
四、测试
在主库上面创建一个表,或insert一些数据,过一会儿到从库看看效果。
右键点击计划任务,点击查看历史记录,可以看见详细同步记录。
五、注意
如果出现从库计划任务无法链接到主库服务器的情况,则可用如下sql查询数据中的server名称是否有误,如果有误可删除重新添加
## 查看server配置
sp_helpserver
## 删除SERVER1
sp_dropserver 'SERVER1', null
## 添加新的server
sp_addserver '192.168.56.111' ,'LOCAL',null
同步过程中,如果从库正在使用,就会无法同步,恢复计划任务(LSRestore_SERVER1_demo)报类似如下错误,当从库停止使用时,又会继续同步。
如果出现提示数据库被使用,又不知道在哪里被使用,建议直接重启从库数据库服务。
2023-11-18 00:12:50.70 *** 错误: 无法将日志备份文件“\\192.168.56.111\backup\demo_20231117161200.trn”应用到辅助数据库“demo_bak”。(Microsoft.SqlServer.Management.LogShipping) ***
2023-11-18 00:12:50.70 *** 错误: 因为数据库正在使用,所以无法获得对数据库的独占访问权。
RESTORE LOG 正在异常终止。(.Net SqlClient Data Provider) ***
2023-11-18 00:12:50.71 *** 错误: 日志备份文件“\\192.168.56.111\backup\demo_20231117161200.trn”已通过验证但无法应用到辅助数据库“demo_bak”。(Microsoft.SqlServer.Management.LogShipping) ***
2023-11-18 00:12:50.73 正在删除旧日志备份文件。主数据库:“demo”
2023-11-18 00:12:50.73 还原操作完成,但有错误。辅助 ID:“cbd809d8-1bf7-4bbe-aaa3-ecf21e15d147”