我正在尝试设置订阅者对 SQL Server 发布的推送订阅。
我可以使用 Management Studio 中的复制向导在发布者处设置订阅。但是,我更愿意编写相对于订阅者的流程脚本,以便我可以自动部署新的 SQL Server 订阅者实例。
最初,我很乐意在部署前提示输入发布者的名称。如果我可以让它工作,我会寻找一种方法来自动为我的环境注入正确的值。
对于必须在不同发布者上创建多个订阅的 SQL Server 实例,执行此操作的简单方法是什么?
我愿意使用任何受支持的 SQL Server 脚本解决方案:SMO、RMO、Sqlcmd、WMI、PSDrive,甚至是纯 T-SQL。
我试图通过两种方式解决这个问题。第一个是使用 T-SQL 的完整解决方案,但它涉及一些手动步骤。
我在 T-SQL 中有一个手动解决方案。该解决方案基于 Management Studio Replication Script Generator 输出的输出。
使用 Management Studio,我运行以下脚本以生成可在发布者处运行的 T-SQL 脚本:
PRINT N'
EXECUTE MyDatabase.dbo.sp_addsubscription
@publication = N''MyPublication'',
@subscriber = ''' + CAST(SERVERPROPERTY('ServerName') AS SYSNAME) + ''',
@destination_db = ''SubscriberDatabase'',
@subscription_type = N''Push'',
@sync_type = N''automatic'',
@article = N''all'',
@update_mode = N''read only'',
@subscriber_type = 0;
EXECUTE MyDatabase.dbo.sp_addpushsubscription_agent
@publication …Run Code Online (Sandbox Code Playgroud) 我正在尝试为我们的新基础架构选择最佳配置,但对结果有些困惑。
我使用 sysbench v0.5 进行测试:
准备数据
sysbench --test=/usr/share/doc/sysbench/tests/db/oltp.lua \
--oltp-test-mode=complex --oltp-table-size=1000000 \
--mysql-db=mydb --mysql-user=root --mysql-password=mypassword prepare
Run Code Online (Sandbox Code Playgroud)
做测试
sysbench --test=/usr/share/doc/sysbench/tests/db/oltp.lua \
--oltp-test-mode=complex --oltp-table-size=1000000 --oltp-read-only=off \
--num-threads=6 --max-time=60 --max-requests=0 \
--mysql-db=mydb --mysql-user=root --mysql-password=mypassword run
Run Code Online (Sandbox Code Playgroud)
从下面的结果可以看出,主-主复制(3台机器的percona)性能最差,然后是mySQL主-从(2台机器)配置,最快的是mySQL作为单个独立服务器。
这是复制解决方案的正常情况吗?看起来太慢了,配置之间的 10 倍差异在我看来很不正常。也许我错过了一些东西......我对 Percona Galera Cluster 完全失望,它以对 innodb 的速度着称。呼:)
请检查下面提供的信息并提出建议,谢谢。
服务器位于同一个数据中心,都与一个 Gbit 交换机相连,并有第二个以太网卡,所有这些都配置为它们之间的专用网络。
目前,服务器上没有负载。
第一次测试
# hdparm -Tt …Run Code Online (Sandbox Code Playgroud) 我有用于通过 GTID 复制的 mysql 二进制日志。
我正在尝试显示执行的更新/插入语句,如下所示:
mysqlbinlog --base64-output=DECODE-ROWS mysql-bin.000024
Run Code Online (Sandbox Code Playgroud)
但我所看到的只是这样,没有更新或插入 stmt 的痕迹:
SET TIMESTAMP=1431681617/*!*/;
BEGIN
/*!*/;
# at 746987321
# at 746987392
# at 746987484
#150515 11:20:17 server id 1 end_log_pos 746987515 CRC32 0xeb874754 Xid = 997501767
COMMIT/*!*/;
# at 746987515
#150515 11:20:22 server id 1 end_log_pos 746987563 CRC32 0xc5ece64a GTID [commit=yes]
SET @@SESSION.GTID_NEXT= 'a4ade293-c63a-11e4-94cf-005056944a56:2059057'/*!*/;
# at 746987563
#150515 11:20:22 server id 1 end_log_pos 746987650 CRC32 0x92296355 Query thread_id=71622 exec_time=0 error_code=0
Run Code Online (Sandbox Code Playgroud)
我不确定 GTID 复制的格式/配置以及在哪里寻找它...
我正在尝试为大型(120 GB)MySQL 数据库设置复制,但我搞砸了。
我关闭了 master,复制了数据文件,然后重新启动了 master。现在我已经设置了奴隶并启动了它,我意识到我忽略了获取MASTER_LOG_FILE和MASTER_LOG_POS设置复制所需值。
我仍然有一份未受影响的数据文件副本。有没有办法从这些文件中确定MASTER_LOG_FILE和MASTER_LOG_POS?
相关问题:
MASTER_LOG_POS为较早的时间点?编辑
我一直在调查该mysqlbinlog命令,并通过执行以下命令发现了正确的信息:
mysqlbinlog --to-last-log --start-datetime='2015-06-21 20:05:00'
mysql-bin.000006 | grep end_log_pos
Run Code Online (Sandbox Code Playgroud)
输出如下所示:
... a whole bunch more lines ...
#150621 20:10:21 server id 1 end_log_pos 720159843 Query thread_id=901489 exec_time=0 error_code=0
#150621 20:10:21 server id 1 end_log_pos 720161877 Query thread_id=901489 exec_time=0 error_code=0
#150621 20:10:21 server id 1 end_log_pos 720162762 Query thread_id=901489 exec_time=0 error_code=0
#150621 20:10:22 server id 1 end_log_pos 720164796 …Run Code Online (Sandbox Code Playgroud) 我目前在 Amazon Web Services 上设置了一个Postgres 9.4.4 RDS实例。在这个实例中,我持有 20 张桌子。此外,我还在我的本地服务器(操作系统:64 位 Linux)上安装了 Postgres 9.4.4,它在一个数据库下保存了大约 30 个表。云实例和我的本地服务器实例都有重叠的表,即云上有一些我复制到本地的表,反之亦然。我不太熟悉 Postgres 复制过程,因为我从来不需要它们,而且目前通过 python 脚本在这两个数据库之间读/写/附加表的传输效率很低。
我将不胜感激来自社区的任何关于最佳程序的指导。理想情况下,我想要一个解决方案,其中云上的某些表可以在本地成为 MASTER 和 SLAVE,并允许其他其他表在本地成为 MASTER,在云中成为 SLAVE。这可能吗?
听说过 Burcardo 或 Slony 可以做到这一点吗?这方面的任何好的文档/站点也会有所帮助。
postgresql replication transactional-replication postgresql-9.4 amazon-rds
我已经在两个数据库之间实现了事务复制。现在我必须Transparent Data Encryption (TDE)在 Publisher 数据库上实施。
是否可以只在主数据库中实现 TDE?复制的数据会与复制一起加密吗?
我想将我的数据库实例从 AWS RDS MySQL 迁移到 Aurora,但我对复制以及 Aurora 如何管理写入/读取操作有疑问。
我有我的应用程序,我想将写入操作与读取操作分开。我想创建一个仅用于写操作的主实例,而其他实例(只读副本)仅用于读操作。
问题就在这里,我在 AWS 文档上读到我需要在我的应用程序上进行这种分离,我认为或者我希望找到一种方法来做到这一点并对我的应用程序透明。我画了一个简单的模式,我必须做什么才能使用 Aurora(来自 AWS):
-----------------
| Application |
-----------------
| |
| writes |reads
| |
------------ ------------------
| Master | | Read Replica |
------------ ------------------
^ ^
|replication |
|____________|
Run Code Online (Sandbox Code Playgroud)
我需要 Master 始终保持写入操作,并将读取重定向到只读副本实例。
-----------------
| Application |
-----------------
|
|write/read
|
------------ Reads ------------------
| Master | <-------> | Read Replica |
------------ ------------------
^ ^
| replication | …Run Code Online (Sandbox Code Playgroud) 免责声明:我不知道我在这里谈论的是什么,或者我正在做的事情是否正确。
长话短说,我的上司问我是否可以在另一个地理站点的另一个 SQL Server 实例上复制我们的内部数据库并使它们保持同步。
就上下文而言,他们最近扩大了业务,并在距离主楼(A 场)约 15 英里的地方开设了一座新大楼(我们将称之为 B 场)。两个站点都通过 VPN 连接。
在站点 A,我们安装了 MSSQL 2012 标准版,其中包含我们的内部数据库。
当站点 B 的用户通过 VPN 连接到数据库时,他们报告说建立连接和打开客户端应用程序需要将近 5 分钟的时间。我明天会检查这个,因为我以前从未听说过这个问题。
我的上司似乎认为最好的主意是以某种方式复制/镜像(我不确定这里的术语)站点 B 中服务器上的数据库,并以某种方式使它们保持同步。
这是复制的用途吗?如果是,我可以从哪里开始学习如何复制数据库。
否则,如果这是一个非常糟糕的主意,我还有什么其他选择?
tl;dr - 我可以在两个不同的建筑物中拥有两个保持同步的数据库副本吗?
我已经构建了一个应用程序作为我的 UG 论文的一部分,该应用程序使用 mysql 数据库(社区版)。现在,我的教授要我为数据库提供容错功能(通过奇偶校验!!)!我争辩说我们不需要那个。反正我搜索,发现这里是MySQL有内置的复制引擎(一种机制来提供容错性,对吧?),与许多其他技术来提供可靠性等。但是我从那里学到的是,有一个主服务器和一些从服务器使用复制提供容错。现在我的问题是:
如果我只有一台数据库服务器怎么办?mysql 对单个独立的数据库服务器是否有任何容错(即没有主从形成,没有集群?等)?
我是否需要尝试为存储在 mysql 数据库中的数据提供任何类型的容错?
mysql服务器的社区版和企业版之间有什么样的区别(仅在容错方面)?
不知何故,我觉得我们不需要为 mysql db 提供容错做任何事情,它本身就很好。但我需要一些关于此事的可靠信息。
再次从上面的第二个问题:
我是否需要尝试为存储在 mysql 数据库中的数据提供任何类型的容错?
尝试通过使用奇偶校验(每字节位)为 mysql 数据库提供容错的合理性是什么?
具体的数据是大约 6500 个 Unicode 字符串的集合,大小小于 1 MB,是初始化数据,不会随时间变化。唯一的事务是从数据库中读取数据,不更新不删除。我的应用程序需要对这些字符串进行全文搜索,这是我使用 mysql 的唯一原因,因为它提供了全文搜索。我知道我可以通过使用诸如 elasticsearch 之类的东西来避免 mysql 的 FT 搜索。
我们遇到了复制问题,其中在 3300 万行的表上进行了大型(750 万行)更新。复制将其转换为 750 万条单独的更新语句。当我的警报通知我我们的出版物低于我们的门槛时,我开始检查这个问题。
我发现更新已被执行,并且需要几天时间来仔细阅读这些更新语句。所以我决定看看我们是否可以跳过它试图处理的那些记录。使用系统表和存储过程,我能够确定执行更新的时间段。一旦找到最后一个xact_seqno,我就停止分发代理,并手动更新订阅者数据库。然后我执行sp_setsubscriptionxactseqno, 跳过所有这 750 万笔交易。当我启动分发代理时,它似乎工作正常并且能够处理剩余的事务。
为了更好地衡量,我使用 Redgate 的数据比较来查看数据是否混乱,但我丢失了大约 24 条记录(最初可能没有,因为我没有设置它)。
我的问题是这是修复它的正确方法吗?你怎么总是保证得到下一个Xact_seqno?您是按Xact_Seqnoentry_time 或 entry_time订购交易?
replication sql-server sql-server-2012 transactional-replication
replication ×10
mysql ×4
sql-server ×4
amazon-rds ×2
mysqlbinlog ×2
failover ×1
percona ×1
performance ×1
postgresql ×1
powershell ×1
standby ×1