1

我有一个表 test1,它存储在主机 server_A 上的 MySQL 数据库 dbtest 中。我想在主机 server_B 上的数据库 MySQL test2 上创建一个视图 V。我想将表 test2 中的数据读取到视图 V 中。并且......我不允许使用复制。MySQL 甚至可以从另一个 MySQL 服务器读取数据吗?可能吗?

4

1 回答 1

4

实现此行为的一种可能方法是使用具有FEDERATED存储引擎的表(与 MyISAM、InnoDB 相对)。

这种存储本质上是一个代理。假设您在主机“ remote_host ”上的数据库“ remote_db ”上有一个表“ remote_table ”。如果您想使用该表,就好像它是主机“ local_host ”上的数据库“ local_db ”上的本地表一样,您可以使用FEDERATED存储引擎在“ local_db ”上设置一个新表“ local_table ” ,并将其指向' remote_host.remote_db ' 上的' remote_table '。它将充当虚拟代理表,通过 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 服务器上),大批量插入的性能较慢,......

参考资料: MySQL 文档

于 2013-01-16T10:07:19.717 回答