标签: replication

当 pt-table-sync 失败时查找主从之间的差异

我有一个表,根据 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 这样的预制轮子没有我想要的那么圆时,我希望为未来找到一个更通用的解决方案。

mysql replication mysql-5.5 percona-tools

6
推荐指数
1
解决办法
1663
查看次数

将多个数据库复制到一个数据库中

我想将不同服务器上的多个数据库复制到一个主数据库中。

我在运行 SQL 2008 R2 的不同服务器上有 5 个不同的实例。模式和结构都相同,但数据不同。我需要将所有数据复制到单个实例上的一个数据库中。最好的方法是什么?

大约有 132 个表需要复制。我尝试在每台服务器上创建发布者,并将它们订阅到一个实例上的单个数据库,但没有成功:数据被覆盖,一些服务器没有复制。

我可能有错误的方法或在此过程中搞砸了一些事情。您的帮助将不胜感激。

replication sql-server-2008-r2

6
推荐指数
1
解决办法
1716
查看次数

将远程 MySQL 数据库复制到本地 MySQL 数据库

我是我的雇主公司私人网站的开发人员,一个用于公司报告等的 HTML5/PHP/CSS 支持的站点。该站点托管在共享托管包上,连接到远程只读 MySQL 数据库服务器以进行身份​​验证和报告数据查询。此远程 DB 主要由单独的 Windows exe 使用。

远程数据库经常宕机,这当然会导致私人网站因 MySQL 连接错误而炸毁。我曾考虑将远程 DB 复制到站点的本地托管 MySQL DB 并使用本地 DB 作为站点的主要和唯一的 DB 连接。

有没有办法以一种简单而轻松的方式将远程数据库同步到站点的共享托管数据库?比如每小时更新一次?

或者是否有一个功能,该站点的托管包 MySQL DB 功能可以缓存远程 DB 数据并将其用作后备。

提前致谢。

mysql replication mirroring

5
推荐指数
1
解决办法
6273
查看次数

多对一复制/事务复制

我在不同的地理位置(本地站点)有几个 PostgreSQL 数据库。

  • 每个本地站点 DB 都具有相同的架构,但具有唯一的数据。例如,以包含以下列的表为例:Site_ID、Department_ID、Department_Name。Site_ID 对于每个站点都是唯一的。

  • 我想将本地站点数据库中的所有数据收集到充当数据仓库的集中式数据库(再次是 PostgreSQL)中。

  • 集中式数据库上的相应示例表将具有与上述相同的列。所有本地站点数据都将进入此表。当然,每个站点数据由 Site_ID 指定。

问题:如何使用PostgreSQL 复制方法(流/多主 UDR/BDR/等)实现这一点。我看到这可以通过 SQLServer 使用Transactional Replication来完成。使用 PostgreSQL 实现此功能的最佳方法是什么?

限制:本地站点只能进行传出网络连接(即由于防火墙限制不能进行入站连接)

postgresql replication transactional-replication multi-master

5
推荐指数
1
解决办法
1418
查看次数

更改 AWS 的只读副本的流式复制以触发基于复制

我们有一个 Postgres RDS 实例,我们为它创建了一个只读副本实例。我们面临的问题是,只要在只读副本上有长时间运行的查询(大约 30-40 分钟),它就不会完成并给出冲突错误。发生此冲突的原因是主 RDS 上有更新,该更新反映到只读副本,因为它遵循流式复制方法。正是出于这个原因,也由于新的需求,我们需要每天进行此复制过程,即我们需要基于触发器的方法(类似于每日备份方法)而不是持续更新。

我在AWS的控制台中看到,我们可以设置各种参数。我可以设置一些参数来满足我的要求吗?或者对我来说唯一的出路是删除只读副本实例并使用基于触发器的复制工具(如 Bucardo)并为此使用 EC2 实例?

我真的更喜欢这种方法,通过它我可以调整一些参数并实现我的目标,而不必删除只读副本实例。

postgresql replication aws postgresql-9.3 amazon-rds

5
推荐指数
1
解决办法
3182
查看次数

非阻塞 MySQL 备份

我正在运行带有几个客户数据库的 MySQL 服务器,其中一些数据库非常大。我们每天进行一次完整的 mysql 转储。大约需要半个小时才能完成。

在这段时间内,对 MySQL 服务器的每个请求都会得到非常缓慢的响应(有时大约 1 秒而不是 10 毫秒)。即使没有超时错误,我也希望看到查询在相当长的时间内完成,因此客户网站不会因挂起 MySQL 查询而减慢速度。

我研究了很多,了解了数据复制、LVM 快照、各种mysqldump标志选项和其他变通方法,但没有什么能真正改善这种情况。

是否有任何选项可以在 MySQL 中设置查询优先级?

如果有一种方法可以定义查询优先级,我可以给备份进程一个较低的优先级,以确保所有其他查询执行得更快。该mysqldump过程可能会SIGTSTP在受到另一个请求的挑战时暂时暂停 ( ),并SIGCONT在查询完成后继续 ( )。但是,我在 MySQL 中找不到这样的特性。

mysqldump进程一个更高的nice值是行不通的,因为它只会增加备份进程和表锁存在的时间。(我正在锁定每个表。)此外,限制 IO 写入速率只会导致更长的痛苦。

除了 LVM 和复制之外,还有没有我错过的解决方案?

mysql replication mysqldump performance backup

5
推荐指数
1
解决办法
3329
查看次数

升级主从 MySQL

我正在尝试使用 MySQL 5.5.52 进行 MySQL 复制。我的主要问题是:如何在主从设置上正确执行“apt-get upgrade”?

到目前为止,我升级了从属节点,然后进行故障转移并将另一个节点升级为从属节点。

到目前为止它没有问题,但现在我发现了以下内容:当我升级从属时,它创建了一些二进制日志:

mysql.CREATE TABLE IF NOT EXISTS db (...)
mysql.CREATE TABLE IF NOT EXISTS host (...)
mysql.CREATE TABLE IF NOT EXISTS func (...)
...
Run Code Online (Sandbox Code Playgroud)

由于这是从节点,因此这些更改不会复制到主节点,因此在故障转移后会丢失。如果我在另一个节点的角色从主节点更改为从节点后重复此操作,也会发生同样的情况。

因此,升级所做的更改永远不会提交到复制数据库。

这是一个问题吗?

我怎样才能避免这种情况?

我可以在没有(显着)停机的情况下升级主从设置吗?

更新: 那么如果我像过去那样做会发生什么?

Node A : master
Node B : slave
Run Code Online (Sandbox Code Playgroud)

在节点 B(从节点)上:我发出apt-get upgrade,MySQL 被修补。一些二进制日志出现在节点 B 上,包含上述语句。由于这是一个从站,因此这些更改不会复制到主站。

修补节点 B 后,我切换角色(使用 Corosync-Pacemaker)。

故障转移后:

Node A : slave
Node B : master
Run Code Online (Sandbox Code Playgroud)

现在,节点 B 上的主 MySQL 包含故障转移之前节点 A 上的数据。由于修补引起的更改发生在从属设备上,因此它们不在数据库中。

如果我现在将节点 A 修补为从节点,也会发生同样的情况。

因此,最后我将有一个修补过的 MySQL,其中包含与修补之前包含的完全相同的数据。apt-get …

mysql replication upgrade

5
推荐指数
1
解决办法
1083
查看次数

将群集从 SQL Server 2005 迁移到 SQL Server 2016

我正在迁移 SQL Server 群集。我想听听成功迁移的注意事项。

生产集群的规格是:

  1. Windows Server 2003 SP2 32 位。
  2. SQL Server 2005 企业版 - 9.00.3152.00(内部版本 3790:Service Pack 2)
  3. 包括所有数据库在内的磁盘空间约为 1.5TB。(IBM v7000)

目标集群的规格是:

  1. Windows Server 2016 标准版 64 位
  2. SQL Server 2016 标准 64 位
  3. 与旧集群相同的磁盘,但速度更快(IBM v9000 闪存系统)

特别注意事项:

  • 群集名称必须相同以避免应用程序、链接服务器和其他连接发生变化。我的意思是,我们必须使用不同的集群名称进行迁移,然后关闭旧集群并使用旧名称重命名新集群(我希望这很清楚)

此时我所做和测试的内容如下:

  1. 使用 Windows Server 2016(具有不同的名称)创建和配置 Windows 故障转移群集
  2. 配置 Active Directory 以允许集群创建对象
  3. 将数据库从 MSSQL 2005 恢复到 MSSQL 2016,运行一些查询并探索对象。

还:

  • 我按照最佳实践拆分了驱动器。
  • 我们正在清理“超级用户”并为用户提供正确的权限。
  • 设置和测试兼容模式为 130
  • 大约 1 周前定义了备份策略以确保数据可用性

要做或考虑的事情:

  • 将所有 SSIS 包下载到新项目并针对新集群进行测试。集群名称更改后,将 SSIS 更改为原始名称
  • 迁移所有作业并确保它们成功运行
  • 使用迁移数据库的测试应用程序
  • 为指向 SQL Server 2000 数据库的链接服务器创建 ODBC …

replication sql-server migration clustering

5
推荐指数
1
解决办法
438
查看次数

MySQL复制slave遇到SET@@SESSION.GTID_NEXT='ANONYMOUS'后挂起;

我最近在 Ubuntu Server 16.04 下安装了两个相同的 MySQL 5.7 默认安装,并将它们配置为执行二进制日志复制。到目前为止,这一直工作正常,但突然复制停止继续,从属查询线程以 100% CPU 运行而没有做任何工作。

经过一番搜索,我发现从站状态表明它远远落后于主站。在Relay_Master_Log_File和位置Exec_Master_Log_Pos指示的binlog文件上使用mysqlbinlog,发现在这个位置执行的语句是:

SET @@SESSION.GTID_NEXT= 'ANONYMOUS';

在尝试执行此语句时,从站以某种方式挂起,将 CPU 负载发送到 100%(这是我首先发现情况的方式)。

除了让奴隶跳过使用SET GLOBAL sql_slave_skip_counter=1它的语句之外,我不清楚这个问题的实际原因是什么,以及我应该如何解决这个问题。

任何帮助将非常感激!

mysql replication binlog

5
推荐指数
1
解决办法
2885
查看次数

使用 postgres_fdw 从一个只读副本连接到另一个

我在 AWS 中有两个 postgres 数据库服务器,A 和 B。这些数据库有不同的表。这两个数据库也有自己的只读副本。

我的目标是一个简单的解决方案,用于从 A 副本到 B 副本进行跨数据库连接。从 master 查询不是一种选择,因为此功能适用于我团队中的分析师,而不是应用程序。

我按照说明通过执行 CREATE SERVER、CREATE USER MAPPING 和 CREATE FOREIGN TABLEs在 A 的 master 上设置 postgres_fdw ,并且我能够轻松地从 A master 查询到 B 副本。但是,这些服务器和外部表定义没有复制到 A 副本。我无法在副本上运行这些创建命令,因为它是只读的。

是否可以使用 postgres_fdw 从 A 副本到 B 副本?如果没有,这个问题还有其他解决方案吗?

postgresql replication read-only-database

5
推荐指数
1
解决办法
814
查看次数