假设我们有MySQL服务器A,我们需要在其中创建表的“副本”,它位于服务器B上。
我们没有启用联合。重置服务器A会带来很多麻烦,我相信,不重置就不能启用联合。我还认为在B服务器上启用它是不够的(如果我做错了什么,请纠正我)
我们还有其他的解决方案吗?mysql server中有默认启用的功能吗?有什么想法吗?
发布于 2012-09-11 19:34:39
,但是!你不能做任何聚合函数。在将联合的视图上(例如,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
...发布于 2017-09-03 18:18:01
在任何情况下,您都不能写入联邦表期间!您必须与运行已创建联邦表连接的数据库的服务器建立直接DB连接。
如果你现在可以写联邦表,我会很生气的。多年来,它从未允许这样做。如果这是真的,这也会让我写了10年的代码完全浪费了我的时间。
在为100个网站创建一个集中用户数据库的实例中使用它是相当方便的!也就是我用来做什么的社交网络...
在别人知道引擎存在之前,我就一直在用它。当我开始使用它的时候,它就在那里,没有文档,我必须进行实验,才能弄清楚它可以用来做什么。引擎一直在那里,多年来几乎没有文档。
我使用或拥有的唯一联邦DB表共享网络用户信息。当有人注册成为新用户时,我所有的外部网站仍然需要建立到主服务器的数据库连接。
您需要两个数据库连接器才能正确使用FEDERATED!一个用于UPDATE和INSERT等,另一个DB用于所有本地查询和连接等。
我的网络使用两个外部数据库,每个网站一个本地数据库。我使用三个数据库连接器。
本地连接到音乐集线器和网络集线器,所有更新和插入以及其他所有连接都使用单独的连接器,只需使用本地DB连接器!
我希望这能帮助您更好地理解它:)
我使用的是PHP5.6和MySQL 5。
近五年来,你不得不问自己,为什么关于它的用途的文档很少或根本没有?大多数人甚至不知道它的存在。
它主要用于将查询结果导入到本地数据库中!即使拥有完全的写访问权限,您也永远不能写入联邦表!出于安全原因,它是不被允许的,而且正如您所说的那样,它将非常非常慢。
如果我错了,你可以纠正我,但请知道,在他们告诉任何人它存在之前,我就已经在使用FEDERATED了。
启用FEDERATED大约需要30秒,重新启动服务器大约需要30秒。在使用VPS的实例中,可能不允许启用联合。
编辑my.cnf文件并重新启动服务器...
顺便说一句,联邦不再慢了。当我以我刚才解释的方式使用时,从来没有...
即使我可以写一个联合表,我也不会这么做。您通过向本地网站添加一个联合表来联合两个服务器。
这将根据您与远程MySQL服务器之间的跳数而减慢。还要确保将您的IP添加到他们的cPanel下的远程服务器。
如果所有网站都驻留在同一服务器上,并且只是单独的用户帐户和具有单独IP的网站,则应该是零延迟。
20世纪80年代中期,McLeod和Heimbigner是最先定义联邦数据库系统的人之一。
发布于 2017-10-18 07:12:31
更新:如果你升级到mariaDB,你将不得不以插件的形式加载federatedX。旧的联邦项目将继续存在,但会有新的视角和新鲜的灵魂在它上面工作。先知不再插手这件事...它现在被称为federatedX
https://stackoverflow.com/questions/11742193
复制相似问题