假设我们在本地主机上有一个mysql数据库,其中有表A和表B。
是否可以从第三方mysql服务器获取详细信息,其中我们有登录信息,并允许外部访问?
假设数据库中有3个表,我们可以连接到表A2、B2和C2。
如何从表C2中获取行,并使其从原始mysql服务器(就像A和B一样)中访问VIRTUALY (作为表C),就像托管在它上一样?
发布于 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;的原因:
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中
[mysqld]
federated然后在我的机器上重新启动MySQL
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)现在,它在跑!
在远程服务器上执行以下查询:
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:远程表的名称。本地表和远程表的名称不必匹配。
示例连接字符串:
CONNECTION='mysql://username:password@hostname:port/database/tablename'
CONNECTION='mysql://username@hostname/database/tablename'
CONNECTION='mysql://username:password@hostname/database/tablename'假设mydb数据库中的表C2如下所示:
CREATE TABLE C2
(
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(32),
PRIMARY KEY (id)
)
ENGINE=MyISAM;只需追加CONNECTION子句并在本地服务器上运行它:
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表:
mysql> SELECT * FROM mydb.C;https://dba.stackexchange.com/questions/10164
复制相似问题