假设我们有MySQL服务器A,我们需要创建一个表的“副本”,它位于服务器B上。
我们没有启用联盟。重新安装服务器A会造成很多麻烦,我相信,我们无法在不重置的情况下启用联盟。我也相信在B服务器上启用它是不够的(如果我错了,请纠正我)
我们还有其他解决方案吗? mysql服务器默认启用了什么?有什么想法吗?
答案 0 :(得分:1)
但是!你不能做任何聚合功能。在一个将被联合的视图上(例如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
...
答案 1 :(得分:1)
在任何情况下,您都无法写入FEDERATED表格期间!您必须与运行已创建FEDERATED表连接的数据库的服务器建立直接数据库连接。
如果你现在可以写信给FEDERATED表,我会很生气。它从未允许它多年。如果这是真的,它还会使我写完10年的代码完全浪费我的时间。
在为100个网站制作集中用户数据库的实例中使用非常方便!即一个社交网络,这是我用它... ...
我已经使用过它,因为在任何人都知道引擎存在之前。当我开始使用它时,它没有文档,我不得不尝试甚至弄清楚它可以用于什么。几年来,发动机始终存在并且很少或根本没有文档。
我使用或拥有的唯一联合数据库表,共享网络用户信息。当有人注册成为新用户时,我的所有外部网站仍然必须与主服务器建立数据库连接。
您需要两个数据库连接器才能以正确的方式使用FEDERATED!一个用于UPDATE和INSERT等,另一个用于所有本地查询和JOINS等。
我的网络为每个网站使用两个外部数据库和一个本地数据库。我使用三个数据库连接器。
本地连接到音乐中心和网络集线器,所有UPDATE和INSERT都有单独的连接器,其他所有JOIN等只使用本地数据库连接器!
我希望这可以帮助你更好地理解它:)
我使用的是MySQL 5.6和PHP 5.
你要问自己差不多五年了,为什么很少或没有关于它用于什么的文件?大多数人甚至不知道它存在......
主要用于将查询结果导入本地数据库!即使具有完全写入权限,您也永远无法写入FEDERATED表!出于安全原因这是不允许的,如你所说的那样非常慢。
如果我错了,你可以纠正我但请知道我在他们告诉任何人存在之前一直在使用FEDERATED。
启用FEDERATED大约需要30秒,重启服务器大约需要30秒。在您使用VPS的情况下,可能不允许您启用FEDERATED。
编辑my.cnf文件并重新启动服务器...
顺便说一下,FEDERATED不再缓慢......从来没有像我刚刚解释的那样使用......即使我可以写信给FEDERATED表,我也不会这样做。您通过向本地网站添加联合表来联合两台服务器。
根据远离MySQL服务器的HOPS数量,这将减慢速度。还要确保将您的IP添加到其cPanel下的远程服务器。
如果网站全部位于同一台服务器上,并且只是单独的用户帐户和具有单独IP的网站,那么应该是零滞后。
McLeod和Heimbigner是最早在20世纪80年代中期定义联邦数据库系统的人之一。
答案 2 :(得分:0)
更新:如果升级到mariaDB,则必须将federatedX作为插件加载。旧的联合项目将继续存在,但新的眼睛和新鲜的灵魂正在努力。 Oracle不再参与其中......现在称为federatedX