我有一个表test1,它存储在主机server_A上的MySQL数据库dbtest中。我想在主机server_B上的数据库MySQL test2上创建一个视图V.我想将表test2中的数据读入视图V.并且...我不允许使用复制。 MySQL甚至可以从另一个MySQL服务器读取数据吗?有可能吗?
答案 0 :(得分:2)
实现此行为的一种可能方法是使用带有 FEDERATED 存储引擎的表(而不是MyISAM,InnoDB,..)。
此存储本质上是一个代理。假设您在主机' remote_host '上的数据库' remote_db '上有一个表' remote_table '。如果要将该表用作主机“ local_host ”上数据库“ local_db ”上的本地表,则需要设置一个新表' FEDERATED storange引擎在' local_db '上创建> local_table ',并将其指向'上的' remote_table ' remote_host.remote_db ”。它将充当虚拟的代理表,通过MySQL客户端API将语句转发到远程表并返回结果。
轻松简单地设置和使用 FEDERATED 表。
在remote_db上,您不需要做任何特殊操作,除非为了安全原因为此表创建一个专用用户,但权限有限。
在local_db上,创建一个镜像remote_table的新表:
CREATE TABLE federated_table (
[column definitions go here]
)
ENGINE=FEDERATED
CONNECTION='mysql://remote_user@remote_host:9306/remote_db/remote_table';
最后两行完成所有魔术 - 它们使此表充当CONNECTION
行中指定的远程表的代理。
但是有一些问题 - 没有事务,没有查询缓存(在local_host服务器上),大批量插入的性能降低,......
参考文献: The MySQL documentation