我是一个小型网络(500 个用户)的一部分,他们都通过 WiMax 相互连接。连接到该网络的人们居住在大约 70 公里的半径范围内。该网络允许大约 1.5 MB/s 的传输速度。我们正在使用一个使用 Mysql 数据库的网站。我们都生活在南非,目前正在经历一种称为减载的现象。由于南非目前正经历电力短缺,因此市政当局将电力转移到特定地区以节省电力。
我们想为这个有问题的网站设置一个数据库复制网格。在减载的情况下,不会发出电源故障警告,因此可以假设服务器将突然关闭。
任何人都可以推荐一种数据库设置和复制类型,以便在发生减载后实现无缝同步?我们希望两台服务器都具有写访问权限,以防其中一台服务器出现故障,用户仍然可以连接到在线服务器。
所以简而言之: - 在数据库不一致的情况下无缝/简单/自动同步。- 足够快,不会删除整个数据库,并从代理主服务器重新下载。- 能够以 1.5MB/s 的带宽限制保持同步。- 没有数据丢失。两台服务器必须完全同步。
数据库的其他一些技术细节: - 每分钟平均处理 250 次查询。- 数据库大小为 1 GB。
我已经阅读了有关 Master-Master 同步的信息,但也读到它在突然关闭时不是很可靠,对于低带宽应用程序也不是很可靠。有没有人对这样的设置有想法。
我有用于通过 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 搜索。
我一直在玩弄 Postgres 10 逻辑复制,试图了解它并可能将它应用到几个项目中。我观察到了一些我想知道的事情,但我不确定我是否知道足够的术语来正确搜索答案。考虑以下:
我有两台运行 postgres 的机器,它们可以相互访问,并且我有从机器 1(发布者)到机器 2(订阅者)的逻辑复制。然而,我希望改变这种关系——我想让 2 个发布者和 1 个订阅者。
我在它们各自的机器上删除订阅和发布,并在相反的机器上创建它们,所以现在 2 有一个发布,1 有订阅。一切似乎只是花花公子。
问题是,当我在 2 上插入一些东西时,它没有发布到 1。订阅/发布配置正确,似乎正在接收彼此的消息。
我玩了一会儿,发现如果我将要复制的表从 2 截断到 1,那么复制会准确地按预期恢复。这似乎是一个问题。我正在执行此操作的数据库非常小,只有 8 个条目,因此截断表并重新加载它不是问题。但是没有这个可以恢复复制吗?
假设我在初始化发布/复制时可以保证两台机器上的两个表具有完全相同的数据,那么它是否可以正常运行而不必截断订阅者节点上的表?
我正在运行两台 postgresql 11 服务器 - 主服务器和从服务器(使用逻辑复制进行设置)。
我面临的问题是,经过数周不间断工作后,今天奴隶与此错误消息不同步:
2019-09-16 07:39:44.332 CEST [30117] ERROR: could not send data to WAL stream: server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
2019-09-16 07:39:44.539 CEST [12932] LOG: logical replication apply worker for subscription "logical_from_master" has started
2019-09-16 07:39:44.542 CEST [27972] LOG: background worker "logical replication worker" (PID 30117) exited with exit code 1
Run Code Online (Sandbox Code Playgroud)
我之前确实看到过此错误消息,我的过程是wal_sender_timeout在 master上增加(有关此的更多详细信息:postgresql 中的逻辑复制-“服务器意外关闭了连接”)
那么我想恢复复制但是复制状态卡在追赶上:
2019-09-16 07:39:44.332 CEST [30117] …Run Code Online (Sandbox Code Playgroud) replication ×10
mysql ×4
amazon-rds ×2
mysqlbinlog ×2
postgresql ×2
sql-server ×2
failover ×1
standby ×1