假设我们有 MySQL 服务器 A,我们需要在其中创建位于服务器 B 上的表的“副本”。
我们没有启用联合。重置服务器 A 会造成很多麻烦,我相信,如果不重置,我们将无法启用联合。我也认为在B服务器上启用它是不够的(如果我有任何错误,请纠正我)
我们还有哪些其他解决方案?mysql服务器中是否默认启用了某些功能?有任何想法吗?
但!你不能做任何聚合函数。在将被联合的视图上(例如 COUNT()、MAX()、UNION...)(您可以,但它会滞后)
服务器 B 上的联合表示例:
delimiter $$
CREATE TABLE `schemaName`.`tableName`(
`keyName` VARCHAR(10) NOT NULL,
`key2Name` DATE DEFAULT '2012-01-01',
KEY `keyName` (`keyName`)
)
ENGINE=FEDERATED
DEFAULT CHARSET=utf8
CONNECTION='mysql://USERNAME:PASSWORD@IPADDRESS:PORTNUMBER/baseSchema/baseTable'
$$
服务器 A 上的视图:
CREATE
ALGORITHM = MERGE
DEFINER = `ANOTHERUSERNAME`@`%`
SQL SECURITY DEFINER
VIEW `baseSchema`.`baseTable` AS
SELECT
... AS `keyName`,
... AS `key2Name`
FROM
...
在任何情况下,您都不能写入 FEDERATED 表期间!您必须与运行已创建 FEDERATED 表连接的数据库的服务器建立直接数据库连接。
如果你现在可以写信给 FEDERATED 表,我会很生气。多年来,它从未允许过它。如果这是真的,这也会使我编写的 10 年代码完全浪费我的时间。
在为 100 个网站制作集中式用户数据库的实例中使用起来非常方便!即我使用它的社交网络...
自从有人知道 ENGINE 存在之前,我就一直在使用它。当我开始使用它时,它没有文档,我不得不进行实验以找出它可以用来做什么。ENGINE 一直在那里,并且多年来几乎没有或根本没有文档。
我使用或拥有的唯一联合数据库表共享网络用户信息。当有人注册为新用户时,我所有的外部网站仍然必须与主服务器建立数据库连接。
您需要两个数据库连接器才能以正确的方式使用 FEDERATED!一个用于 UPDATE 和 INSERT 等,另一个 DB 用于所有本地查询和 JOINS 等。
我的网络为每个网站使用两个外部数据库和一个本地数据库。我使用三个数据库连接器。
本地连接到音乐集线器和网络集线器,所有 UPDATE 和 INSERT 和其他所有连接器都使用单独的连接器 JOIN 等只使用本地 DB 连接器!
我希望这可以帮助您更好地理解它:)
我正在使用 MySQL 5.6 和 PHP 5。
您必须问自己将近五年,为什么很少或没有关于它的用途的文档?大多数人甚至不知道它的存在...
主要用于将查询结果导入本地数据库!即使拥有完整的写入权限,您也永远无法写入 FEDERATED 表!出于安全原因,这是不允许的,正如您所说,它会非常非常慢。
如果我错了,您可以纠正我,但请知道,在他们告诉任何人它存在之前,我一直在使用 FEDERATED。
启用 FEDERATED 大约需要 30 秒,重新启动服务器大约需要 30 秒。在您使用 VPS 的情况下,可能不允许您启用 FEDERATED。
编辑您的 my.cnf 文件并重新启动服务器...
顺便说一句,FEDERATED 不再慢了...从来没有以我刚才解释的方式使用...
即使我可以写一个 FEDERATED 表我也不会这样做。您通过向本地网站添加联合表来联合两台服务器。
这将根据您距离远程 MySQL 服务器的 HOPS 数量而减慢。还要确保将您的 IP 添加到他们的 cPanel 下的远程服务器。
如果网站都驻留在同一台服务器上,并且只是单独的用户帐户和具有单独 IP 的网站,则应该是零延迟。
McLeod 和 Heimbigner 是 1980 年代中期最先定义联合数据库系统的人之一。
更新:如果您升级到 mariaDB,您必须将 federatedX 作为插件加载。旧的联合项目将继续存在,但会有新的眼睛和新鲜的灵魂在它上面工作。Oracle 不再参与其中...现在称为 federatedX