首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从本地mysql服务器中获取外部托管的db表

问从本地mysql服务器中获取外部托管的db表
EN

Database Administration用户
提问于 2012-01-04 19:48:45
回答 1查看 1.9K关注 0票数 3

假设我们在本地主机上有一个mysql数据库,其中有表A和表B。

是否可以从第三方mysql服务器获取详细信息,其中我们有登录信息,并允许外部访问?

假设数据库中有3个表,我们可以连接到表A2、B2和C2。

如何从表C2中获取行,并使其从原始mysql服务器(就像A和B一样)中访问VIRTUALY (作为表C),就像托管在它上一样?

EN

回答 1

Database Administration用户

发布于 2012-01-04 20:39:29

我通常不会推荐这个,但现在.

如果远程数据库服务器上的表是MyISAM,请尝试使用FEDERATED">http://dev.mysql.com/doc/refman/5.5/en/federated-storage-engine.html">FEDERATED Stroage引擎。首先,了解是否启用了联邦存储引擎。这就是我在Windows5.5.12forWindows中运行SHOW ENGINES;的原因:

代码语言:javascript
复制
mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.00 sec)

在MySQL 5.5.12 for Windows中,它没有启用

所以,我把这个添加到my.ini中

代码语言:javascript
复制
[mysqld]
federated

然后在我的机器上重新启动MySQL

代码语言:javascript
复制
mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| FEDERATED          | YES     | Federated MySQL storage engine                                 | NO           | NO   | NO         |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.02 sec)

现在,它在跑!

在远程服务器上执行以下查询:

代码语言:javascript
复制
SHOW CREATE TABLE C2\G

这将显示C2的create语句。

现在,只需附加远程表的URL,就可以指定CONNECTION子句。

根据MySQL文档

对于那个链接

连接字符串的格式如下: scheme://user_name*密码@host_name*港口_数量/db_name/tbl_name ,其中:·Where:一个可识别的连接协议。此时只支持mysql作为方案值。·user_name:连接的用户名。该用户必须是在远程服务器上创建的,并且必须具有在远程表上执行所需操作(SELECT、INSERT、UPDATE等)的适当权限。·密码:(可选) user_name的相应密码。·host_name:远程服务器的主机名或IP地址。·port_num:(可选)远程服务器的端口号。缺省值是3306。·db_name:保存远程表的数据库的名称。·tbl_name:远程表的名称。本地表和远程表的名称不必匹配。

示例连接字符串:

代码语言:javascript
复制
CONNECTION='mysql://username:password@hostname:port/database/tablename'
CONNECTION='mysql://username@hostname/database/tablename'
CONNECTION='mysql://username:password@hostname/database/tablename'

假设mydb数据库中的表C2如下所示:

代码语言:javascript
复制
CREATE TABLE C2
(
    id INT NOT NULL AUTO_INCREMENT,
    name VARCHAR(32),
    PRIMARY KEY (id)
)
ENGINE=MyISAM;

只需追加CONNECTION子句并在本地服务器上运行它:

代码语言:javascript
复制
use mydb
CREATE TABLE C
(
    id INT NOT NULL AUTO_INCREMENT,
    name VARCHAR(32),
    PRIMARY KEY (id)
)
ENGINE=FEDERATED
CONNECTION='mysql://username:password@hostname/mydb/C2';

最后,在本地计算机上的MySQL中,您应该能够像这样访问C2表:

代码语言:javascript
复制
mysql> SELECT * FROM mydb.C;
票数 3
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/10164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档