(一)日志传送架构
(1.1)相关服务器
主服务器 :用于生产的服务器,上面运行这生产SQL Server数据库;
辅助服务器:用于存放主服务器上数据库的一个“镜像”数据库;
监控服务器:用来监控日志传送状态的一个服务器,可选;
(1.2)文件夹
与日志传送有关的文件夹一共有2个:
共享文件夹:该文件夹用于存放主数据库上备份出来的日志,一般位于主服务器上,主服务器和辅助服务器都必须要能够访问该文件夹;
目标文件夹:该文件夹用来接收从共享文件夹拷贝过来的日志,位于辅助服务器上;
(1.3)作业
与日志传送相关的作业一共有3个:
主服务器的备份作业:在主服务器上备份事物日志,把日志存放到共享文件夹中;
辅助服务器上的复制作业:把共享文件夹中的日志复制到目标文件夹中;
辅助服务器上的还原作业:将目标文件夹中的日志还原到辅助数据库上;
通过上图,可以总结出日志传送的流程:
1.主库的备份作业定期执行日志备份操作,将日志保存到共享文件夹;
2.备库的复制作业定期从共享文件夹将新的日志文件拷贝到备库的目标文件夹;
3.备库的还原作业定期使用目标文件夹中的日志还原备库;
(二)基础环境
主库 |
备库 |
|
操作系统 |
Windows Server 2012 R2 64bit |
Windows Server 2012 R2 64bit |
数据库版本 |
cn_sql_server_2012_enterprise_edition_x86_x64 |
cn_sql_server_2012_enterprise_edition_x86_x64 |
服务器名称(IP) |
WIN-PRIMARY(192.168.10.111) |
WIN-STANDBY(192.168.10.112) |
同步数据库信息 |
lijiamandb |
lijiamandb |
(三)搭建过程中遇到的问题
(3.1)报错信息
由于在写文档之前多次搭建均没有成功,报错如下:
标题: Microsoft SQL Server Management Studio
------------------------------
SQL Server Management Studio 无法还原数据库“masterdb”
------------------------------
其他信息:
执行 Transact-SQL 语句或批处理时发生了异常。 (SqlManagerUI)
------------------------------
无法打开备份设备 '\WIN-PRIMARYlogshipping_mastermasterdb.bak'。出现操作系统错误 5(拒绝访问。)。
RESTORE FILELIST 正在异常终止。 (Microsoft SQL Server,错误: 3201)
有关帮助信息,请单击: http://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&ProdVer=11.00.2100&EvtSrc=MSSQLServer&EvtID=3201&LinkId=20476
(3.2)解决方案
该报错提示备库无法打开主库上的共享文件夹\WIN-PRIMARYlogshipping_mastermasterdb.bak,但是我手动从备库上去访问主库的共享文件夹是可以正常访问的,不知道是什么原因,找了很久也没有找到方案。
最终我是搭建了域环境,主库为域服务器,备库加入到主库的域中,然后创建了域账号testloguser,使用testloguser账号启动主库和备库的代理,最终才同步成功。因此本文的日志传送是在域环境中搭建成功的。
(四)域环境搭建
(4.1)主库搭建域服务器
STEP1:打开“服务器管理器”-->“添加角色和功能”
STEP2:开始之前。默认,下一步
STEP3:安装类型。选择“给予角色或功能的安装”,下一步
STEP4:服务器选择。默认,下一步
STEP5:服务器角色。勾选“Active Directory域服务”
STEP6:功能。默认,下一步
STEP7:AD DS。默认,下一步
STEP8:确认。点击“安装”
STEP9:安装完成,在服务器管理器中进行配置
STEP10:部署配置,指定根域名
STEP11:域控制选项,输入DSRM密码,随便填写
STEP11:DNS选项,有告警信息,忽略,直接下一步
STEP12:其它选项。默认,下一步
STEP13:路径。默认,下一步
STEP14:查看选项。默认,下一步
STEP15:先决条件检查。安装
STEP16:安装完成后,服务器会自动重启,重启后,我们就可以看到这台服务器已经加入了域
(4.2)备库服务器加入到域中
STEP1:修改备库服务器的DNS信息,将AD服务器的IP填入里面
STEP2:点击“这台电脑”-->“属性”
STEP3:点击“更改设置”
STEP4:点击“更改”
STEP5:添加域配置
STEP6:添加成功,会有提示
STEP7:重启计算机,域配置才会生效
(4.3)主库域服务器上创建域账号(在域服务器上操作)
STEP1:点击“服务器管理器”-->“工具”-->“Active Directory用户和计算机”
STEP2:选择“Users”-->右键“新建”-->“用户”
STEP3:创建域账户
输入密码,这里建议把“用户下次登录时须修改密码”去除勾选
STEP4:完成创建
(4.4)关闭防火墙(主库和备库)
域环境搭建完成后,会多出一个域网络的防火墙,全部关闭
(五)日志传送环境搭建
(5.1)主库创建共享文件夹
主库创建共享文件夹,用于存放日志。
STEP1:创建文件夹logshipping,我直接放在C盘,如果是生产环境,建议不要放在C盘
STEP2:点击文件夹“logshipping”,右键“属性”-->“共享”
STEP3:添加共享用户“loguser”,权限设为“读取/写入”,经过测试,还需要把everyone用户也给加上
STEP4:从备库服务器访问共享,确认无问题
(5.2)备库创建日志目标文件夹
备库创建logrepl文件夹,并授权给testloguser用户
(5.3)修改SQL Server代理的登录身份为testloguser(主库备库均修改)
打开“SQL Server配置管理器”,点击“SQL Server服务”-->“SQL Server代理”,双击弹出“SQL Server代理属性”,修改用户为testloguser,最后确定。
(5.4)主库配置日志传送
(1)主库基础环境
为了后续验证数据是否同步,先在待同步的数据库“lijiamandb”中建2个表,test01和test02,数据如下
(2)日志传送配置
STEP1:点击“lijiamandb”-->“任务”-->“传送事物日志”
STEP2:勾选“将此数据库启用为日志传送配置中的主数据库”,然后点击备份设置
STEP3:填写备份路径,该路径是之前创建的共享文件夹,在“计划”中修改备份时间,改为3分钟1次,代表每隔3分钟主库会将产生的日志存放到共享文件夹。
STEP4:备份配置完成后,开始配置辅助数据库,点击“添加”
STEP5:点击“连接”,输入辅助数据库(备库)的连接信息
STEP6:初始化辅助数据库。因为没有可用的备份,故勾选“是,生成主库的完整备份...”
复制文件。填写备库的目标文件夹,修改复制作业的时间为每3分钟执行一次,代表每隔3分钟,备库会将共享文件夹中的新日志复制到目标服务器的目标文件夹
还原事物日志。数据库状态改为备用模式,还原作业改为每隔3分钟执行一次,代表每隔3分钟,备库会将目标文件夹的日志进行还原操作
- 无恢复模式:用户不可以只读访问数据库;
- 备用模式 :备库处于只读状态。但是,备库值执行还原操作时,还原进程需要独占访问数据库,如果用户正在运行SQL语句,那么还原进程将无法还原数据库,还原作业会等到下一个还原间隔时再次尝试还原数据库。如果勾选了“在还原备份时断开数据库中用户的连接”,那么数据库在进行还原操作时,会断开用户的连接,保证还原操作正常进行。
STEP6:最后点击确定即可
STEP7:开始进行备库还原操作
(5.5)备库确认数据是否正常产送过来
经确认,主库的所有数据均以同步到备库
(六)日志传送测试
(6.1)添加新表
结果:主库添加新表,备库自动同步过去。
(6.2)删除表
结果:主库删除表,备库也会自动删除。
(6.3)修改表结构
结果:主库修改表结构,备库自动修改
(6.4)插入、更新、删除数据
结果:主库执行插入、更新、删除操作,备库也会自动同步操作
(6.5)truncate表
结果:主库执行truncate操作,备库也会同步操作
(七)监控日志传送
(7.1)主库查看日志备份作业是否运行正常
打开主库SSMS“对象资源管理器”-->“SQL Server代理”-->”作业”,右键“查看历史记录”,即可看到日志备份作业的运行情况。
(7.2)备库查看日志复制作业和日志还原作业是否运行正常
打开主库SSMS“对象资源管理器”-->“SQL Server代理”-->”作业”,右键“查看历史记录”,即可看到日志复制作业和日志还原作业的运行情况。
(八)总结
优点 | 无论主库做什么操作,备库均可以同步过来,无需DBA介入 |
缺点 | 1.备库数据同步存在延迟,时效性较差 2.备库在做恢复操作时,是不可以查询数据库的,体验较差 |