我们有一个系统,它的一个数据源仍然在 SQL Server 2000 上。为了实现更高的可用性,我们希望设置从这台 2000 服务器到 2008 集群的事务复制。
我的问题是,INSERT/UPDATE/DELETE所有已发布表中源数据库上的语句是否保证在事务上是安全的(顾名思义)?例如,如果我对源数据库执行以下查询:
BEGIN TRAN
INSERT t1 (mycol) VALUES ( 0 )
INSERT t2 (mycol) VALUES ( 1 )
COMMIT TRAN
Run Code Online (Sandbox Code Playgroud)
假设t1和t2是同一出版物的一部分,对目的地的以下查询是否总是产生以下结果?
SET TRANSACTION ISOLATION LEVEL SNAPSHOT
BEGIN TRAN
SELECT 'Value in t1: ' + CAST(t1.mycol AS VARCHAR(10)) from t1
SELECT 'Value in t2: ' + CAST(t2.mycol AS VARCHAR(10)) from t2
COMMIT
Run Code Online (Sandbox Code Playgroud)
结果:
Value in t1: 0
Value in t2: 1
Run Code Online (Sandbox Code Playgroud) 我们需要迁移生产数据库的存储。这样做的适当方法是什么,我们需要采取哪些特定/通用的预防措施?
数据库配置:
卷管理器 - 使用原始磁盘的 ASM。ASM 外部冗余作为存储从存储子系统
数据库版本发布 - Oracle 10g R2
数据库大小 - 约 5TB
现有存储(来源):HP MSA 2312sa 双控制器。直接连接到我们的数据库服务器(无 fc 或以太网交换机)。
Oracle 二进制文件也在此存储上
新存储(目标):HP EVA6300 FC 存储。该存储将通过 FC 交换机连接到主机。
我们能否使用基于主机的存储迁移(如 VxVM Plex 连接/分离)将数据从源 LUN 复制到目标 LUN?
我们是否必须使用 Oracle RMAN 备份和恢复方法进行存储迁移?
问题是我有两个相同的数据库,一个在我的笔记本电脑的本地主机服务器上,另一个在办公室的主服务器上。是否有任何自动方式或软件可以同步这两个相同数据库之间的数据?我正在使用 SQL Server 2008 R2。
我正在设计一个应用程序并考虑有关数据库系统的一些选项,因为我不熟悉 Microsoft SQL Server。我想知道是否可以让 2 个服务器共享相同的文件,如下所示。

这个想法是数据在一个突袭系统中,所以它会给我们一些安全。这样我们就可以节省同步两个数据库的工作量并节省一些存储费用。我们一次只需要一个数据库,第二个只是为了在第一个失败的情况下使用。
这可能吗?
我对不同的方法持开放态度。主要问题是数据库冗余,我们的应用程序必须保证这一点。
目前我使用的是 Windows 7 和 SQL Server 2008R2。
我有 3 台 Mysql 服务器要复制:两台(包括主服务器)是本地的,一台是远程的。让我们调用我的主服务器 A、辅助服务器 B 和远程开发服务器 C。
作为一种可能的配置,我开始阅读有关环形配置的信息。有些评论似乎看不起这种拓扑。
我的问题是,鉴于 Mysql 5.1 的当前状态,哪些类型的主-主拓扑是可取的并且已知是容错的?
一般来说,戒指真的是个坏主意吗?
就我而言,A 和 B 位于预计不会出现任何网络故障的 Intranet 上,因此 B 理论上可以用作 A 的故障转移。大多数时候,我在 C 上工作,这是一台远程机器,有时在到达 A 和 B 时网络出现问题。目前没有任何数据是关键的(即,只要它们最终被镜像,就可以),但我希望 A 和 B 能够被紧密地镜像——比如轻负载时 5 秒的时间范围内(鉴于我的初步测试,我认为这应该是一个简单的要求)。
我目前有 B 作为 A 的 Slave,但我期待在 A、B 和 C 上成为 Master-Master。
我的复制服务器遇到了问题。本质上,我们有 2 个数据库(database1 和 database2)。主服务器两者都有。从站只有database1。有一个
Replicate_Do_DB: database1
Run Code Online (Sandbox Code Playgroud)
在 CHANGE MASTER TO 配置中设置。
现在发生的事情是 - 我们正在使用代码点火器,其中一位程序员创建了 database2 并开始向其中插入信息。代码点火器将默认数据库设置为 database1。现在结果是他生成的每个查询 - 我在 SHOW SLAVE STATUS\G 上收到错误:
Error 'Table 'database2.tbl40' doesn't exist' on query. Default database: 'database1'. Query: 'INSERT INTO `database2`.`tbl40` (`date`, `day`) VALUES ('2011-04-26', '2011-04-26')'
Run Code Online (Sandbox Code Playgroud)
所以基本上,我后来解决了这个问题,但复制不起作用,因为大约有 1000 个查询会为复制服务器产生该错误。
我的问题是 - 有没有办法从二进制日志中清除这样的查询?或者我需要编写一个脚本来执行
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
Run Code Online (Sandbox Code Playgroud)
对于每个产生和错误的查询?
我目前正在运行一个 MySQL 数据库来记录和分析这些日志。
我当前的表架构如下所示:
CREATE TABLE `mylogs` (
`transfer_id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`client_id` INT UNSIGNED NOT NULL ,
`client_ip` INT UNSIGNED NOT NULL ,
`server_1_ip` INT UNSIGNED NOT NULL ,
`server_2_ip` INT UNSIGNED NOT NULL ,
`service` ENUM( 'service1', 'service2', 'service3', '...', 'service500' ) NOT NULL ,
`mb_transferred` FLOAT UNSIGNED NOT NULL ,
`time` TIMESTAMP NOT NULL
) ENGINE = MYISAM ;
Run Code Online (Sandbox Code Playgroud)
我运行了一项服务,在那里我提供了大量下载,这些下载在目标和源主机之间通过 1 个额外的主机。它们由 32 位 IP 地址的整数解释表示。
我的系统目前在高峰时段处理大约 500 次插入/秒。我运行的是主从系统。主服务器有一个带有 PHP 文件的 apache …
我有两个 SQL Server 之间的事务复制。出于测试目的,我在订阅者处删除了许多仍然存在于发布者处的记录。
我现在知道,如果有人在发布者处更新或删除了我的订阅者上不存在的一些记录,那么我的复制将会崩溃。
我知道我也可以在分发服务器上过滤数据,但这意味着重新初始化我的订阅者,这意味着通过慢速链接传输近 40GB。
因此,当我测试我订阅的数据库时,我希望限制用户只能在发布者端更新或删除记录。我的源表有一个日期字段,我想根据日期限制更新或删除。
为此使用触发器还是约束更好?
如何尽可能避免记录锁定?
我有一台主机和一台从机复制得很好,但主机即将更改其主机名和 IP。在master.info从服务器上,我看到主服务器的当前主机名,如果我关闭从服务器,更改该文件中的主机名,然后重新启动 MySQL,这就是我所需要的吗?没有用户名/密码等正在改变。
如果我使用 CHANGE MASTER 查询,它看起来需要重新设置 binlog 位置等?
我们正在讨论采用 sql server 2012 和事务复制的架构。想法是将报告活动卸载到辅助服务器,并能够通过在报告服务器上保留历史数据来包括/排除复制的内容。
几个问题:
谢谢!
replication sql-server sql-server-2012 transactional-replication
replication ×10
mysql ×4
sql-server ×4
cassandra ×1
constraint ×1
migration ×1
mirroring ×1
nosql ×1
oracle ×1
transaction ×1
trigger ×1