背景:腾讯云服务器与本地数据库服务器做日志传送,其中腾讯云做为主体。
日志传送,关键要解决的是传送的问题。本例主、辅服务器不在同一个局域网,不能用Windows文件共享的方式传输日志文件。考虑利用ftp、rsync、fastcopy工具完成文件的异地传送。
1、[辅助数据库服务器]配置rsync从主数据库服务器的D:LogShipping目录,获取备份文件到辅助数据库服务器的D:LogShipping目录;创建任务计划,让rsync每隔5分钟重复一次,每次获取新增的备份文件
2、[辅助数据库服务器]创建一个sysadmin服务器角色的登录名DBA_LogShipping
3、[主数据库服务器]要传送日志的数据库的恢复模式设置为完整(Full)
4、[主数据库服务器]对要传送日志的数据库进行1次完整备份
BACKUP DATABASE [LogShipping] TO DISK = N'D: syncrootLogShippingLogShipping.bak' WITH NOFORMAT, INIT, NAME = N'LogShipping-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, COMPRESSION, STATS = 10 GO
5、[辅助数据库服务器]将完整备份文件拷贝到辅助数据库服务器上,并以STANDBY的方式进行恢复
RESTORE DATABASE [LogShipping] FROM DISK = N'D:LogShippingLogShipping.bak' WITH FILE = 1, MOVE N'LogShipping' TO N'D:LoveGameDataLogShipping.mdf', MOVE N'LogShipping_log' TO N'D:LoveGameDataLogShipping_log.ldf', STANDBY = N'E:StandbyROLLBACK_UNDO_LogShipping.BAK', NOUNLOAD, STATS = 10 GO
6、[主数据库服务器]选择要进行日志传送的数据库,打开属性窗口,进入事务日志传送窗口,勾选将此数据库启用为日志传送配置中的主数据库,然后点击备份设置打开日志传送备份设置窗口,如下图。本例会禁用复制作业,所以不需创建特别的Windows用户,备份文件夹不需共享,不需在辅助数据库服务器的SQL Server代理服务设置特别的启动帐户。
7、[主数据库服务器]返回事务日志传送窗口,辅助数据库下点击添加,使用步骤2创建的登录名DBA_LogShipping连接至辅助数据库服务器,选择对应的数据库;在初始化辅助数据库窗口中,选择"否,辅助数据库已初始化";在复制文件窗口中,输入辅助数据库服务器中存放备份日志文件的路径(比如D:LogShipping);在还原事务日志窗口中,选择备用模式,并勾选在还原备份时断开数据库中的用户连接。
注意:本例使用rsync传送日志备份文件,因此LSCopy作业可以在此禁用,如果前面一步选择的是辅助数据库已初始化,那么这个作业不会有任何活动。
8、成功设置之后,日志传送就开始工作。主数据服务器上的Job根据设定的时间间隔定时地备份当前数据库的日志,将日志文件保存至本机的文件夹(比如D:LogShipping);辅助数据服务器上的Job不断地通过共享文件夹(比如\dbserverLogShipping)从主数据库服务器复制日志文件到本机的文件夹(比如D:LogShipping),然后将日志文件恢复至处于Standby状态的数据库中。
测试:主数据库服务器作业LSBackup每3分钟备份当前数据库日志,辅助数据库服务器每10分钟将备份文件拷贝到对应目录,辅助数据库服务器作业LSRestore每3分钟还原。通过查看测试数据以及事务日志传送状态报表,可知辅助数据库服务器每次还原操作是将上次还原后的所有日志文件按顺序恢复。
--10:04 2015/7/20 查看主数据为服务器D:LogShipping目录,7月15号的日志备份文件还存在,回想当初配置时,在事务日志备份设置中是保留72小时,为什么没有删除掉?查看LSBackup作业历史记录,发现下面信息
消息中显示已以用户 NT ServiceSQLAgent$实例名 的身份执行。 该步骤成功。查看作业步骤详细信息,类型为操作系统(CmdExec),运行身份为SQL Server代理服务帐户。配置管理器下查看SQL Server代理启动用户正是NT ServiceSQLAgent$实例名。由此可知是权限问题,有两种方法可解决,其一,SQL Server代理启动用户更改为其他有权限删除目录文件夹下的Windows用户,同时代理需要的其他权限不能缺少;其二,利用Windows用户创建一个新代理,然后作业步骤的运行身份改成新代理即可。
--12:02 2015/7/20
收到预警邮件日志传送复制作业LSCopy执行失败,查看作业历史记录
显示的是帐户密码过期,登录失败。此时查看事务日志传送状态报表
之后有看到警报作业LSAlert“执行出错”,错误信息显示为
已以用户 HostNameLoginName 的身份执行。 日志传送辅助数据库 HostNameMSSQL.DBName 的还原阈值为 45 分钟,并且现在不同步。在过去的 46 分钟之内未执行任何还原操作。还原操作滞后了 30 分钟。请查看代理日志和日志传送监视器信息。 [SQLSTATE 42000] (错误 14421). 该步骤失败。
复制作业要从共享文件夹读取日志备份文件。查看主数据库服务器用于共享文件夹的帐户。果然在今天11:19过期。将主数据库服务器上的帐户密码重置,手动运行LSCopy、LSRestore作业后,恢复正常。
--17:27 2015/11/13 服务器迁移,导致之前的日志传送主、辅之间的连接中断。需删除原日志传送、重做日志传送,此时可用命令来完成:
--主服务器 use master --删除主服务器上的msdb.dbo.log_shipping_primary_secondaries表中辅助服务器的信息 sp_delete_log_shipping_primary_secondary @primary_database,@secondary_server,@secondary_database --辅助服务器 use master --删除辅助服务器上有关服务服务器的信息和作业 sp_delete_log_shipping_secondary_database @secondary_database --主服务器 use master --删除对应的信息和作业 sp_delete_log_shipping_primary_database @database
在主服务器的SSMS图形操作需连接到辅助以删除对应的信息和作业。