设为首页 收藏本站
查看: 701|回复: 0

[经验分享] 通过SQL Server 2008数据库复制实现数据库同步备份

[复制链接]

尚未签到

发表于 2015-7-2 12:48:50 | 显示全部楼层 |阅读模式
  SQL Server 2008数据库复制是通过发布/订阅的机制进行多台服务器之间的数据同步,我们把它用于数据库的同步备份。这里的同步备份指的是备份服务器与主服务器进行实时数据同步,正常情况下只使用主数据库服务器,备份服务器只在主服务器出现故障时投入使用。它是一种优于文件备份的数据库备份解决方案。
  在选择数据库同步备份解决方案时,我们评估了两种方式:SQL Server 2008的数据库镜像和SQL Server 2008数据库复制。数据库镜像的优点是系统能自动发现主服务器故障,并且自动切换至镜像服务器。但缺点是配置复杂,镜像数据库中的数据不可见(在SQL Server Management Studio中,只能看到镜像数据库处于镜像状态,无法进行任何数据库操作,最简单的查询也不行。想眼见为实,看看镜像数据库中的数据是否正确都不行。只有将镜像数据库切换主数据库才可见)。如果你要使用数据库镜像,强烈推荐killkill写的SQL Server 2005 镜像构建手册,我们就是按照这篇文章完成了数据库镜像部署测试。
  最终,我们选择了SQL Server 2008数据库复制。
  下面通过一个示例和大家一起学习一下如何部署SQL Server 2008数据库复制。
  测试环境:Windows Server 2008 R2 + SQL Server 2008 R2(英文版),两台服务器,一台主数据库服务器CNBlogsDB1,一台备份数据库服务器CNBlogsDB2。
  复制原理:我们采用的是基于快照的事务复制。主数据库服务器生成快照,备份库服务器读取并加载该快照,然后不停地从主数据库服务器复制事务日志。见下图:
DSC0000.gif
  图片来自SQL Server联机丛书
  安装与配置步骤:
  一、在两台服务器上安装好SQL Server 2008 R2,主要安装的组件:Database Engine(含SQL Server Replication),Management Tools。
  二、主数据库服务器(发布服务器)的配置:
  1. 在主数据库服务器CNBlogsDB1新建示例数据库CNBlogsDemo(注意Recovery mode要使用默认值Full,只有这个模式才能进行事务复制),然后建立一张测试表,比如:CNBlogsTest。
DSC0001.jpg
  2. 设置存放快照的文件夹:
  创建发布之前,先设置一下存放快照的文件夹,创建发布后会在该文件夹生成快照文件,订阅服务器需要在初始化时加载该快照文件。
  选择Replication》Local Publications》属性,在出现的窗口中选择Publishers,如下图:
DSC0002.jpg
  点击红框处的按钮,出现设置窗口:
DSC0003.jpg
  在Default Snapshot Folder中设置快照文件存放路径。
  3. 在主数据库服务器创建发布:
  在Replication》Local Publications中选择New Publication,出现一个向导。先选择要发布的数据库CNBlogsDemo,然后选择发布类型Transational publication,如下图:
DSC0004.jpg
  点击Next,出现错误:
DSC0005.jpg
  原来所有要复制的表都需要有主键,刚才建CNBlogsTest表时,没有建主键。建一下主键,并重新启动向导就可以了。
  接着选择要复制的对象:
DSC0006.jpg
  点Next,Next,进入Snapshot Agent窗口,选择Create a snapshot immediately and keep the snapshot available to initialize subscriptions,见下图:
DSC0007.jpg
  Next,进入Agent Security:
DSC0008.jpg
  选择Security Settings,进行相应的帐户设置:
DSC0009.jpg
  一个是设置运行Snapshot Agent的Windows帐户,我们这里选择与SQL Server Agent同样的帐户。
  一个是设置连接发布服务器的SQL帐户,我们这里就用主数据库服务器的sa帐户。
  继续:OK,Next,Next,为这个发布起个名字:
DSC00010.jpg
  点击Finish,就开始正式创建发布,创建成功就会出现如下窗口:
DSC00011.jpg
  这时查看快照文件夹,就会看到unc文件夹,快照文件就在这个文件夹中。
  这里要考虑这样一个问题,如何让订阅服务器通过网络访问这个快照文件夹。
  我们在这个问题上折腾了一些时间,本来想通过共享文件夹的方式,但又不想打开匿名共享,折腾了半天,没搞定订阅服务器访问共享文件夹用户验证的问题。于是采用了FTP的方式,所以,下面介绍一下如何让订阅服务器通过FTP访问快照文件。
  4. 设置快照的FTP访问
  首先在主数据库服务器上开通FTP服务,建立一个指向快照文件夹的FTP站点,设置好可以远程连接的FTP帐户。然后在这台发布服务器设置一下FTP客户端配置。配置方法如下:
  在Replication》Local Publications中选择刚才创建的发布[CNBlogsDemo]:CNBlogsDemo_Publication,选择属性》FTP Snapshot,如下图:
DSC00012.jpg
  选中Allow Subscribers to download snapshot files using FTP,并设置一下FTP客户端连接参数,订阅服务器就是通过这里的设置连接FTP服务器的(注:Path from the FTP root folder的设置要和上图一样,设置为:/ftp)。
  点击OK,这时会在快照文件夹中创建一个ftp文件夹,并在该文件夹中生成快照文件。
  这样,发布服务器就配置好了,下面配置订阅服务器。
  三、备份数据库服务器(订阅服务器)的配置:
  进入订阅服务器CNBlogsDB2,创建与发布服务器同名的数据库CNBlogsDemo,使用完全恢复模式。
  在Replication》Local Subscriptions中选择New Subscriptions,进入向导。
  Next,进入选择发布服务器的窗口,选择Find SQL Server Publisher,出现服务器连接窗口:
DSC00013.jpg
  这里要注意的是Server Name中一定要填写发布服务器的计算机名,如果计算机名连接不上,要在hosts文件中加一个IP地址解析。
  成功连接发布服务器之后,就可以看到刚才在主数据库服务器上创建的发布:
DSC00014.jpg
  Next,进入“分发代理工作位置”的选择窗口:
DSC00015.jpg
  
  
  我们这里选择pull subscriptions,把数据给拉过来,这样主数据库服务器的负担会轻些。
  Next,选择订阅服务器上的数据库,之前我们已经建好同名的数据库,所以系统自己会找到。
  Next,进入分发代理安全设置窗口:
DSC00016.jpg
  点击红框内的按钮,进入设置窗口:
DSC00017.jpg
  设置如上图,Connect to the Distributor处设置的是发布服务器的sa帐户。
  OK, Next, Next, Next:
DSC00018.jpg
  Next, Finish, Success:
DSC00019.jpg
  备份数据库的订阅就建好了!
  现在来瞧一瞧订阅服务器CNBlogsDB2上的用于复制的数据库CNBlogsDemo:
DSC00020.jpg
  看!我们在发布服务器上建立的表CNBlogsTest复制过来了。
  现在我们去发布服务器CNBlogsDB1上添加一条记录:
DSC00021.jpg
  再去订阅服务器CNBlogsDB2瞧一瞧:
DSC00022.jpg
  数据立即同步过来了!搞定!
DSC00023.jpg    
  遇到的问题:
  在测试过程中被两个问题折腾了很长时间。
  1)发布服务器的Log Reader Agent不能启动,错误信息:
  · The process could not execute 'sp_replcmds' on 'YCSERVER006'. (Source: MSSQL_REPL, Error number: MSSQL_REPL20011)   
Get help: http://help/MSSQL_REPL20011   
· Cannot execute as the database principal because the principal "dbo" does not exist, this type of principal cannot be impersonated, or you do not have permission. (Source: MSSQLServer, Error number: 15517)   
Get help: http://help/15517   
· The process could not execute 'sp_replcmds' on 'YCSERVER006'. (Source: MSSQL_REPL, Error number: MSSQL_REPL22037)   
Get help: http://help/MSSQL_REPL22037
  开始测试时,附加了一个现有数据库进行复制遇到了这个问题,附加的是一下SQL Server 2005数据库文件,Owner为空,改为sa问题就解决了,如下图:
DSC00024.jpg
  2)第二个问题就是前面已经描述过的订阅服务器访问发布服务器上的快照文件夹的问题,后来通过FTP的方式解决的。
  对于SQL Server 2008数据库复制,目前我就学习了这些,期待园子里有这方面经验的朋友也来分享一下,在分享过程中你也会学到很多。
  相关文章:
  SQL Server 2008 数据库同步的两种方式 (发布、订阅)

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-82535-1-1.html 上篇帖子: 浅谈SQL SERVER中事务的ACID 下篇帖子: SQL Server 2008/2012中SQL应用系列及BI学习笔记系列--目录索引
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表