sqlserver数据库镜像功能是做什么用的(sqlserver镜像搭建)
发布时间:2025-05-25 07:31:39 发布人:远客网络
一、sqlserver数据库镜像功能是做什么用的(sqlserver镜像搭建)
1、SQLServer2005相对于SQLServer2000来说,无论是性能还是功能都有一个相当大的提高,甚至可以用“革命”来形容这一次升级。SQLServer2005使SQLServer跻身于企业级数据库行列。在数据高可用性方面,SQLServer2005为用户提供了数据镜像、复制、故障转移群集、日志传送功能。本文向读者简单介结SQLServer2005镜像功能。
2、数据库镜像是一个高可用性软件解决方案,为客户端提供小于10秒故障转移。每个数据库镜像配置均包含一个主体服务器(包含主体数据库)、一个镜像服务器(包含镜像数据库)和一个见证服务器,其中见证服务器是可选的。主体服务器和镜像服务器要求是独立的服务器实例。主体服务器和镜像服务器的角色是相对的,可以自动或者手动地将主体服务器设置为镜像服务器,镜像服务器设置为主体服务器。与主体服务器和镜像服务器不同的是,见证服务器并不能用于数据库。见证服务器监视主体服务器和镜像服务器,确保在给定的时间内这两个故障转移服务器中有且只有一个作为主体服务器,从而支持自动故障转移。如果存在见证服务器,同步会话将以“高可用性模式”运行,如果主体服务器出现故障,可以实现故障自动转移。如果见证服务器不存在,同步会话将以“高级别保护模式”运行,出现故障需要手动故障转移,并且有可能丢失数据。
3、图2:两台服务器镜像,一台见证服务器
4、数据库准备结束,端点创建完成,用户便可以启用数据库镜像。镜像启动后,每个伙伴都将开始维护所在数据库中有关其数据库,以及另一个伙伴和见证服务器的状态信息。这些状态信息允许服务器实例维护称为“数据库镜像会话”的当前关系。在数据库镜像会话过程中,服务器实例将通过彼此定期交换PING消息来互相监视。
二、关于sql server 数据库镜像的几个问题
1.SQL Server节点1 Tonym和 Tonym02必须位于同一域中,并且SQL1和SQL2都要使用域账户启动SQL Server服务和SQLServerAgent服务。
保证同一个域帐户对两个服务都有权限.
2.在企业管理器中删掉local连接,应用Server Name注册本地服务器 Tonym,辅助服务器Tonym02
3.在SQL1服务器上新建共享文件夹NorthwindBackupShare01,赋予启动SQL Server账户的Full权限。在SQL1服务器上新建文件夹 ReceiveSQL2Logs,用来在进行数据库角色转换时接收从SQL2上传送过来的日志。在SQL2服务器上新建共享文件夹NorthwindBackupShare02,赋予启动SQL Server账户的Full权限。在SQL2服务器上新建文件夹 ReceiveSQL1Logs,用来接收数据库SQL1上传送过来的日志。
4.设置想要应用Log Shipping的服务器为完全恢复模式。
5.在Database Maintenance Plans上右键 New maintenance Plan,选择进行LogShipping的数据库,每次只允许选择一个数据库。
6.去掉Back up the database as part of the maintenance plan,保证维护计划唯一性(推荐)
8.指定存放日志文件的共享文件夹。
Transaction Log Destination Directory填写从SQL1上传送到SQL2上日志文件的接收路径.
Destination Database选择新建数据库(指定数据文件,日志文件存放路径)或者应用已存在的数据库
No recovery mode:使用者将无法进行资料查询,只供备份使用.
Standby mode:设置成只读模式,只要不是进行日志回存的时候,都可以进行查询。
Terminate users in database(Recommended):在回存数据库或是交易日志文件时,回存程序将是数据库唯一的使用者。
Allow database to assume primary role:允许主要服务器与次要服务器之间进行角色转换。
选择进行角色转换后新主要服务器的共享目录路径。
9.Initialize the Destination Database:挑选最近一次的资料或是建立一份新的备份资料。对大型数据库,使用即有备份比较有效率。但是要保证从备份之后的日志都存在于主服务器上的日志共享目录中。
10.设定主服务器上日志备份频率。
11.设置辅助服务器复制备份日志和加载备份日志的频率,以及日志文件在辅助服务器上的留存时间。
12.针对日志备份及日志回存工作,设定合理的延迟时间,当超过临界时间时,日志传送监控程序对话框会相应一个警告信息。
13.指定监控服务器,应该指定独立于主服务器,辅助服务器的第三台服务器作为监控服务器,或者指定辅助服务器为监控服务器。
14.点击Next,指定维护计划的名称。Finish,开始进行Log shipping的创建。
三、本地sql数据库怎么与远程sql数据库同步
1.利用MySQL自身的数据库同步功能
2.利用MySQL数据库的特性(数据库存在固顶目录,并且以文件形式存储),进行数据库目录同步以达到数据同步目的
3.利用专用的MySQL数据库同步软件
1.利用MySQL自身的数据库同步功能(下面参考自网上的文章,写的非常详细了)
MySQL从3.23.15版本以后提供数据库复制功能。利用该功能可以实现两个数据库同步,主从模式,互相备份模式的功能.
数据库同步复制功能的设置都在mysql的设置文件中体现。mysql的配置文件(一般是my.cnf),在unix环境下在/etc/mysql/my.cnf或者在mysql用户的home目录下的my.cnf。
windows环境中,如果c:根目录下有my.cnf文件则取该配置文件。当运行mysql的winmysqladmin.exe工具时候,该工具会把c:根目录下的my.cnf命名为mycnf.bak。并在winnt目录下创建my.ini。mysql服务器启动时候会读该配置文件。所以可以把my.cnf中的内容拷贝到my.ini文件中,用my.ini文件作为mysql服务器的配置文件。
操作系统:window2000professional
1.增加一个用户最为同步的用户帐号:
GRANTFILEON*.*TObackup@'10.10.10.53'IDENTIFIEDBY‘1234’
2.增加一个数据库作为同步数据库:
1.增加一个用户最为同步的用户帐号:
GRANTFILEON*.*TObackup@'10.10.10.22'IDENTIFIEDBY‘1234’
2.增加一个数据库作为同步数据库:
修改Amysql的my.ini文件。在mysqld配置项中加入下面配置:
#设置需要记录log可以设置log-bin=c:mysqlbakmysqllog设置日志文件的目录,
#其中mysqllog是日志文件的名称,mysql将建立不同扩展名,文件名为mysqllog的几个日志文件。
binlog-do-db=backup#指定需要日志的数据库
用showmasterstatus命令看日志情况。
修改Bmysql的my.ini文件。在mysqld配置项中加入下面配置:
master-user=backup#同步用户帐号
master-connect-retry=60预设重试间隔60秒
replicate-do-db=backup告诉slave只做backup数据库的更新
用showslavestatus看同步配置情况。
注意:由于设置了slave的配置信息,mysql在数据库目录下生成master.info
所以如有要修改相关slave的配置要先删除该文件。否则修改的配置不能生效。
如果在A加入slave设置,在B加入master设置,则可以做B->A的同步。
在A的配置文件中mysqld配置项加入以下设置:
在B的配置文件中mysqld配置项加入以下设置:
注意:当有错误产生时*.err日志文件。同步的线程退出,当纠正错误后要让同步机制进行工作,运行slavestart
重起AB机器,则可以实现双向的热备。
向B批量插入大数据量表AA(1872000)条
A数据库每秒钟可以更新2500条数据。
2.数据库目录同步,方法和文件同步一样,设置好需要同步的两个数据库目录就可以了!
缺点很明显,数据同步只能单向进行,可以作为备份方案
3.用专用的MySQL同步软件进行同步
这方面的软件有SQLBalance和MyReplicator,优点是方便直观,还有很多争强功能!
当然你也可以修改镜像网站的程序为提交数据到母数据库,读取则在当前镜像下的数据,不过,修改起来麻烦!普通用户修改也非常难!呵呵,大家了解一下就可以!给大家一个思路!有能力的朋友可以试试阿!
由于数据来源的不可控制(不好表达),论坛数据是实时的,而且还要考虑来自镜像论坛的数据,如何实现镜像论坛与母论坛数据同步呢?
用1中介绍的MySQL自带的数据库同步功能互相备份模式就可以实现的!
不过,具体的应用我没有测试!稳定性不敢保证!
有能力的朋友推荐用下面这种思路来同步,相对来说减少点效率,但能减少发生的错误!
1.母论坛和镜像论坛的数据全写在母论坛数据库里,主从模式,读取只在本地读取,这个需要修改程序!
2.每次写数据,都同时提交到两个数据库中,安全,但是效率很差,也得修改程序!
MSSQL数据同步利用数据库复制技术实现数据同步更新(来自网络,也是非常完美的教程)
复制是将一组数据从一个数据源拷贝到多个数据源的技术,是将一份数据发布到多个存储站点上的有效方式。使用复制技术,用户可以将一份数据发布到多台服务器上,从而使不同的服务器用户都可以在权限的许可的范围内共享这份数据。复制技术可以确保分布在不同地点的数据自动同步更新,从而保证数据的一致性。
出版服务器、订阅服务器、分发服务器、出版物、文章
SQLSERVER主要采用出版物、订阅的方式来处理复制。源数据所在的服务器是出版服务器,负责发表数据。出版服务器把要发表的数据的所有改变情况的拷贝复制到分发服务器,分发服务器包含有一个分发数据库,可接收数据的所有改变,并保存这些改变,再把这些改变分发给订阅服务器
SQLSERVER提供了三种复制技术,分别是:
1、快照复制(呆会我们就使用这个)
只要把上面这些概念弄清楚了那么对复制也就有了一定的理解。接下来我们就一步一步来实现复制的步骤。
(2)从[工具]下拉菜单的[复制]子菜单中选择[发布、订阅服务器和分发]命令
(3)系统弹出一个对话框点[下一步]然后看着提示一直操作到完成。
(4)当完成了出版服务器的设置以后系统会为该服务器的树形结构中添加一个复制监视器。同时也生成一个分发数据库(distribution)
(2)从[工具]菜单的[复制]子菜单中选择[创建和管理发布]命令。此时系统会弹出一个对话框
(3)选择要创建出版物的数据库,然后单击[创建发布]
(4)在[创建发布向导]的提示对话框中单击[下一步]系统就会弹出一个对话框。对话框上的内容是复制的三个类型。我们现在选第一个也就是默认的快照发布(其他两个大家可以去看看帮助)
(5)单击[下一步]系统要求指定可以订阅该发布的数据库服务器类型,SQLSERVER允许在不同的数据库如ORACLE或ACCESS之间进行数据复制。但是在这里我们选择运行"SQLSERVER2000"的数据库服务器
(6)单击[下一步]系统就弹出一个定义文章的对话框也就是选择要出版的表
(7)然后[下一步]直到操作完成。当完成出版物的创建后创建出版物的数据库也就变成了一个共享数据库。
(2)从[工具]下拉菜单中选择[复制]子菜单的[请求订阅]
(3)按照单击[下一步]操作直到系统会提示检查SQLSERVER代理服务的运行状态,执行复制操作的前提条件是SQLSERVER代理服务必须已经启动。
完成上面的步骤其实复制也就是成功了。但是如何来知道复制是否成功了呢?这里可以通过这种方法来快速看是否成功。展开出版服务器下面的复制——发布内容——右键发布内容——属性——击活——状态然后点立即运行代理程序接着点代理程序属性击活调度把调度设置为每一天发生,每一分钟,在0:00:00和23:59:59之间。接下来就是判断复制是否成功了打开C:/ProgramFiles/MicrosoftSQLServer/MSSQL/REPLDATA/unc/XIAOWANGZI_database_database下面看是不是有一些以时间做为文件名的文件夹差不多一分中就产生一个。要是你还不信的话就打开你的数据库看在订阅的服务器的指定订阅数据库下看是不是看到了你刚才所发布的表—
--测试环境,SQLServer2000,远程服务器名:xz,用户名为:sa,无密码,测试数据库:test
--服务器上的表(查询分析器连接到服务器上创建)
createtable[user](idintprimarykey,numbervarchar(4),namevarchar(10))
--本机的表,state说明:null表示新增记录,1表示修改过的记录,0表示无变化的记录
ifexists(select*fromdbo.sysobjectswhereid=object_id(N'[user]')andOBJECTPROPERTY(id,N'IsUserTable')=1)
createtable[user](idintidentity(1,1),numbervarchar(4),namevarchar(10),statebit)
--创建触发器,维护state字段的值
from[user]ajoininsertedbona.id=b.id
--为了方便同步处理,创建链接服务器到要同步的服务器
--这里的远程服务器名为:xz,用户名为:sa,无密码
ifexists(select1frommaster..sysserverswheresrvname='srv_lnk')
execsp_dropserver'srv_lnk','droplogins'
execsp_addlinkedserver'srv_lnk','','SQLOLEDB','xz'
execsp_addlinkedsrvlogin'srv_lnk','false',null,'sa'
ifexists(select*fromdbo.sysobjectswhereid=object_id(N'[dbo].[p_synchro]')andOBJECTPROPERTY(id,N'IsProcedure')=1)
dropprocedure[dbo].[p_synchro]
--execmaster..xp_cmdshell'isql/S"xz"/U"sa"/P""/q"execmaster..xp_cmdshell''netstartmsdtc'',no_output"',no_output
--execmaster..xp_cmdshell'netstartmsdtc',no_output
--进行分布事务处理,如果表用标识列做主键,用下面的方法
deletefromsrv_lnk.test.dbo.[user]
whereidnotin(selectidfrom[user])
insertintosrv_lnk.test.dbo.[user]
selectid,number,namefrom[user]wherestateisnull
updatesrv_lnk.test.dbo.[user]set
update[user]setstate=0whereisnull(state,1)=1
--创建作业,定时执行数据同步的存储过程
ifexists(SELECT1frommsdb..sysjobswherename='数据处理')
EXECUTEmsdb.dbo.sp_delete_job@job_name='数据处理'
execmsdb..sp_add_job@job_name='数据处理'
declare@sqlvarchar(800),@dbnamevarchar(250)
select@sql='execp_synchro'--数据处理的命令
,@dbname=db_name()--执行数据处理的数据库名
execmsdb..sp_add_jobstep@job_name='数据处理',
@step_name='数据同步',
EXECmsdb..sp_add_jobschedule@job_name='数据处理',
@freq_interval=1,--每天执行一次
@active_start_time=00000--0点执行