gpt4 book ai didi

mysql - 我需要从其他数据库加入表,有时还需要从其他服务器加入表

转载 作者:可可西里 更新时间:2023-11-01 06:56:24 24 4
gpt4 key购买 nike

我的项目有自己的数据库。另外,我使用其他数据库上的用户表。两个办公室的数据在同一台服务器上,但第三个办公室在另一台服务器上有自己的用户表。

因此,在很多查询中,我需要连接表 some_db.users 或 other_server.some_db.users

对于这种情况,您会建议什么解决方案?

我使用 MySQL。

最佳答案

Federated tables在 MySQL 中:

The FEDERATED storage engine lets you access data from a remote MySQL database without using replication or cluster technology. Querying a local FEDERATED table automatically pulls the data from the remote (federated) tables. No data is stored on the local tables.

首先,您必须在要使用 FEDERATED 表访问的远程服务器上有一个表。假设远程表在sakila数据库中,定义如下:

CREATE TABLE test_table (
id INT(20) NOT NULL AUTO_INCREMENT,
name VARCHAR(32) NOT NULL
PRIMARY KEY (id)
)
ENGINE=MyISAM
DEFAULT CHARSET=latin1;

接下来,在本地服务器上创建一个 FEDERATED 表用于访问远程表:

CREATE TABLE federated_table (
id INT(20) NOT NULL AUTO_INCREMENT,
name VARCHAR(32) NOT NULL
PRIMARY KEY (id)
)
ENGINE=FEDERATED
DEFAULT CHARSET=latin1
CONNECTION='mysql://fed_user:fed_user@197.186.1.199:3306/sakila/test_table';

示例连接字符串:

CONNECTION='mysql://username:password@hostname:port/database/tablename'
CONNECTION='mysql://username@hostname/database/tablename'
CONNECTION='mysql://username:password@hostname/database/tablename'

此表的基本结构应与远程表的基本结构相匹配,除了 ENGINE 表选项应为 FEDERATED。

执行:

show variables like '%federated%'; 

检查 FEDERATED 存储引擎在您的本地服务器上是否可用。

localhost 中的表federated_table 成为远程服务器中test_table 的虚拟表。

现在您可以在本地主机服务器的数据库中的表之间使用 JOIN。如果您的本地服务器中有一个名为 test 的表,并且您想与远程服务器中的前 sakila.test_table JOIN,请编写如下所示的查询:

SELECT * FROM `federated_table` JOIN `test`;

查询中的 federated_table 实际上会引用远程服务器中的 test_table。


关于启用联合存储引擎

FEDERATED存储引擎在运行的服务器中默认是不启用的;要启用 FEDERATED,您必须使用 --federated 选项启动 MySQL 服务器二进制文件。

注意:
可选的存储引擎需要权限,并且在指定 --skip-grant-tables 时将无法加载。

结果整个数据库加载失败,日志中会出现如下错误:

110318 21:37:23 [ERROR] /usr/local/libexec/mysqld: unknown option '--federated'

这反过来意味着如果您有联合表,则需要分两步从 5.x 升级。一次使用 --skip-grant-tables 而没有使用 --federated,一次使用 --skip-grant-tables 而使用 --联合

来源:The FEDERATED Storage Engine

关于mysql - 我需要从其他数据库加入表,有时还需要从其他服务器加入表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11684956/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com