在设置 SQL Server 快照复制之前,我从 ServerA 备份了数据库并将其恢复到 ServerB。两台服务器都运行 SQL Server 2008 R2 SP1。
在尝试使用 GUI 设置从 ServerA 到 ServerB 的快照复制时,我收到以下错误:
消息 14027,级别 11,状态 1,过程 sp_MSrepl_addarticle,第 582 行 [dbo].[SYSCOLUMNS] 在当前数据库中不存在。
是的,这是表的名称,它确实是一个用户表。我从作为发布者的 ServerA 运行设置。两台服务器上的表之间的排序规则相同。如果我将该表作为文章删除,则复制设置就好了。
我在网上搜索过这个,我很难过。有任何想法吗?
我有一个表,根据 pt-table-checksum (PTC),它显示了主从的一些差异。我发现了除此之外的一些验证差异。
混合中的某些表具有复合主键,虽然对于 PTC 来说工作得很好,但与 pt-table-sync (PTS) 并没有太多尝试找出差异。PTS 似乎不尊重 PTC 的新选项来限制复合键搜索的深度。最终结果是一个 5.5Mrow 的桌子在带有 PTS 的情况下旋转了几个小时。我有点相信 PTS 中存在一个无限循环错误,因为输出刚刚开始一遍又一遍地吐出对相同准确记录(此时没有其他任何内容)的更正。
所以,实际上这篇文章更多的是关于替代品,而不是试图让这个工具正常运行。
想到的最直接的替代方法是在 master 上使用读锁刷新表;select * into outfile on master 和 slave;解锁和差异。然而,这张表相当活跃,我无法承受它在主服务器上被锁定那么久。
我希望做一些事情,比如在可重复读隔离级别开始一个事务,然后从那里的主人那里选择出来。但是,我无法找到一种方法来让从服务器像在主服务器上一样在事务历史记录中的某个点处专门停止。开始事务后,诸如 show master status 之类的内容会继续更新,因此在此之前我不能简单地启动 slave。
不能保证“快速”执行“显示主状态;开始;”的原子性。
非阻塞方法的唯一其他解决方案是编写一个自定义脚本,该脚本可能能够更有效地执行 PTS 类型的操作,但具有有关如何生成相关表的列的特定于应用程序的领域知识。
虽然可能会出现这样的情况,当像 PTS 这样的预制轮子没有我想要的那么圆时,我希望为未来找到一个更通用的解决方案。
我想将不同服务器上的多个数据库复制到一个主数据库中。
我在运行 SQL 2008 R2 的不同服务器上有 5 个不同的实例。模式和结构都相同,但数据不同。我需要将所有数据复制到单个实例上的一个数据库中。最好的方法是什么?
大约有 132 个表需要复制。我尝试在每台服务器上创建发布者,并将它们订阅到一个实例上的单个数据库,但没有成功:数据被覆盖,一些服务器没有复制。
我可能有错误的方法或在此过程中搞砸了一些事情。您的帮助将不胜感激。
下午各位大佬
我目前正在使用 InnoDB 作为数据库引擎对 Master-Master 复制设置进行压力测试。
我们正在使用这个简单的脚本来测试我们从远程服务器在 Linux CLI 中运行的脚本。
<?php
while(true) {
try {
$conn = mysql_connect('10.0.10.210', 'test', 'test');
if ($conn) {
mysql_select_db('testdb');
$random = rand(0, 1000);
$res = mysql_query("INSERT INTO test VALUES(0, 'test', $random)");
if ($res) {
echo "\n inserted " . microtime();
} else {
echo "\n not inserted " . microtime();
}
mysql_close($conn);
} else {
echo "\n can not connect";
}
} catch (Exception $ex) {
echo "\n can not insert" . microtime();
}
} …Run Code Online (Sandbox Code Playgroud) 我们正在计划一系列服务器/软件升级并且很好奇。
我们有一个运行 MySQL 5.0 的 RHEL5 安装,我们希望将其复制到运行 CentOS 6 和 MySQL 5.5 的新(虚拟化)服务器。然后,将来我们会将 RHEL5 机器撞到 CentOS6 和 MySQL5.5。如果可能,我们希望首先进行此复制。
所以简短的问题是,有没有人尝试将 MySQL 5.0 主服务器复制到 5.5 从服务器?
我有一个主从设置 mysql 5.5,设置很好,除了从站不会二进制日志到标准 mysql-binlog 只到中继日志。我担心这可能是因为我对此事缺乏了解,但我的最终目标是设置另一个以当前奴隶为食的奴隶,然后将两者指向一个主主关系。
我的问题是,虽然我可以在从站上插入一条记录并且主复制位置(在从站上)会改变,但它不会因同一数据库上的从站活动而改变。从站不会将活动转储到两个日志中吗?如果我将辅助从站指向中继日志,那么我的选项是什么?
希望这是有道理的。
我在从站上的 my.ini 设置是这样的,还设置了唯一的服务器 ID 和主机名:
binlog-do-db=our_database
binlog-ignore-db=mysql
binlog-ignore-db=test
replicate-do-db=our_database
Run Code Online (Sandbox Code Playgroud) 我在两个 postgres 服务器(主服务器:服务器 A,从服务器:服务器 B)之间进行了流式复制设置。我想知道当我触摸触发器文件并且从设备接管作为主设备时,引擎盖下实际发生了什么?我想知道的一件事是,在教程或文档中似乎没有人提到任何地方,如果我在完成后重新启动以前的奴隶(现在是主人)怎么办?事情不会变得一团糟,因为 .conf 文件仍然反映了旧的从站设置(例如 hot_standby = on)?在我可以安全地重新启动服务器之前,我应该更新那个 .conf 吗?
背景:我所处的情况让我想知道这一切是我需要更换我主控上的硬盘。这是我打算这样做的方式:
(顺便说一句。如果您对更好的工作流程有建议,请告诉我)
这是一个非常复杂的场景,但我认为最先进的挑战可能会对 dba.se 的许多高端用户感兴趣。
问题
我正在使用 Oracle GoldenGate 为文档生产系统开发洲际数据复制解决方案,有点类似于 wiki。主要目标是在全球范围内提高应用程序性能和可用性。
该解决方案必须允许从多个位置同时读/写访问同一个数据池,这意味着我们需要一些聪明的方法来防止或解决没有用户交互的冲突更新。
专注于碰撞预防,我们必须允许全局锁定对象(文档、插图、一组元数据等),从而防止多个用户同时编辑来自不同位置的同一对象 - 最终导致冲突。
类似地,对象必须保持锁定状态,直到任何用户连接的数据库收到该对象的更新数据,否则用户可能会开始编辑没有最新更新的旧对象。
背景
该应用程序对延迟有些敏感,这使得从远程位置访问中央数据中心的速度变慢。像许多以内容为中心的系统一样,读/写比率在 4 比 1 的范围内,使其成为分布式架构的理想选择。如果管理得当,后者还将努力确保站点或网络中断期间的可用性。
我使用了一种有点非常规的多循环双向复制拓扑。这将复杂性保持在可管理的级别 { 2(n-1) 方式},增加了站点中断的弹性,并允许相当简单地添加或删除站点。一个小缺点是,通过中央主数据库在最远程站点之间复制事务可能需要长达 30 秒的时间。
在所有站点之间直接复制的更传统的设计会将时间缩短一半,但也会显着增加配置 { n(n-1) 方式}的复杂性。
五个位置意味着 20 路复制,而不是我设计中的 8 路复制。
此图显示了我当前跨欧洲、亚洲和北美数据中心的测试环境。生产环境预计会有更多的位置。

所有数据库都是 Oracle 11.2.0.3 和 Oracle GoldenGate 11.2.1。
到目前为止我的想法
我一直在思考通过在中央数据库的数据库链接上将一行插入到“锁定”表中来进行锁定,同时让解锁(前面提到的行的更新或删除)与更新的行一起复制数据。
在获取锁和打开对象进行编辑之前,我们必须代表用户检查中央和本地数据库中锁的可用性。编辑完成后,我们必须释放本地数据库中的锁,然后通过中央数据库将更改和锁的释放复制到所有其他位置。
但是,对高延迟数据库链接的查询有时会非常慢(测试显示单个插入需要 1.5 秒到 7 秒),而且我不确定我们是否可以保证删除锁的更新或删除语句是要复制的最后一条语句。
调用远程 PL/SQL 过程进行检查和锁定至少会将操作限制为单个远程查询,但 7 秒仍然是很长的时间。像两秒钟这样的事情会更容易接受。我希望可以以某种方式优化数据库链接。
还可能存在其他问题,例如在从中央数据库成功复制本地锁定表中的行之前尝试删除或更新该行。
从好的方面来说,使用这种解决方案,如果与中央数据库的通信中断,让应用程序进入只读状态,或者在数据中心不可用时重定向客户端,应该相对简单。
有没有人做过类似的事情?解决这个问题的最佳方法是什么?
就像我最初说的那样,这是一个相当复杂的解决方案,请随时询问任何不清楚或遗漏的地方。
我们在主服务器上的 Ubuntu Linux 12.04 上使用 PostgreSQL 9.1.7,在副本服务器上的 FreeBSD 9.0-RELEASE 上使用 PostgreSQL 9.1.7。副本服务器和主服务器对同一 SQL 查询返回不同的结果。查询计划显示使用索引(BTree 索引,我们根本不使用哈希索引)来获取结果,因此看起来索引在副本服务器上处于不一致或不完整状态。主服务器上的查询:
db1=# select id from users where email='xxxx@xxxx.net';
id
---------
1698116
(1 row)
db1=#
Run Code Online (Sandbox Code Playgroud)
在副本服务器上的查询:
db1=> select id from users where email='xxxx@xxxx.net';
id
----
(0 rows)
db1=> select created_at from users where id=1698116;
created_at
----------------------------
2013-03-04 10:40:05.221214
(1 row)
db1=>
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,副本数据库已经包含一个具有正确 ID 的用户,因此数据已就位,但由于某种原因尚未编入索引。我们仔细检查了副本是否处于接收/重新应用状态,因此这不是暂时中断。用户从未被编入索引。我们也曾在 CentOS 5.6 上使用 PostgreSQL 9.0 遇到过类似问题,因此我们认为这不是 FreeBSD 或 PostgreSQL 9.1 特定的问题。
我们使用副本服务器运行大量繁重的 SQL 查询,这可能是问题的根源吗?无论如何,我们如何才能有效地检测和防止将来发生此类情况?副本今天没有停机,日志中没有任何错误行,所以我们只是偶尔检测到这种不一致。
我们有一个基于 ROW 的复制的主从设置。即使没有活动在 master 或 slave 上运行,我们也看到了 salve 的巨大延迟。
当我们查看时,我们观察到 SQL 线程看起来像是挂了。自过去 3 小时或更长时间以来,它一直处于“从中继日志中读取事件”状态。
baleaf:(none)> show processlist ;
+--------+-------------+-----------+------+---------+-------+----------------------------------+----- -------------+
| Id | User | Host | db | Command | Time | State | Info |
+--------+-------------+-----------+------+---------+-------+----------------------------------+----- -------------+
| 217159 | system user | | NULL | Connect | 1039 | Waiting for master to send event | NULL |
| 217160 | system user | | NULL | Connect | 10045 | Reading event from the relay log …Run Code Online (Sandbox Code Playgroud) replication ×10
mysql ×5
mysql-5.5 ×3
failover ×2
postgresql ×2
goldengate ×1
innodb ×1
locking ×1
logs ×1
mysql-5.0 ×1
oracle ×1
php ×1
sql-server ×1
wamp ×1