本帖最后由 jiawang 于 2020-10-18 14:32 编辑
但是这个是有一个前置条件:两个数据库都必须是mysql数据库,且被访问的表必须是可以通过网络访问到的
(同一台机器也好,同一个局域网也好,走外网映射也好,总之要能被访问就是了)
假设有test和test1两个数据库。
test1库想访问test库的表student
1、先开启test1库的federated存储引擎查看数据库的federated存储引擎是否开启;
打开mysql的命令行客户端,输入show engines;
mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+-----+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+-----+------------+
| FEDERATED | YES | Federated MySQL storage engine | NO | NO | NO |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| MyISAM | YES | MyISAM storage engine | NO | NO | NO |
| CSV | YES | CSV storage engine | NO | NO | NO |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
+--------------------+---------+----------------------------------------------------------------+--------------+-----+------------+
9 rows in set (0.05 sec)
FEDERATED官方简介:
FEDERATED存储引擎访问在远程数据库的表中的数据,而不是本地的表。这个特性给某些开发应用带来了遍历,你可以直接在本地构建一个federated表来连接远程数据表,配置好了之后本地表的数据可以直接跟远程数据表同步。
实际上这个引擎里面是不真实存放数据的,所需要的数据都是连接到其他MySQL服务器上。
测试步骤和环境说明
验证test库下student表
mysql>use test;
mysql> select * from student; +----+------+-----+ | id | name | age | +----+------+-----+ | 1| wang | 18 | | 2| li | 19 | | 3| wu | 19 | | 4| xie | 20 | +----+------+-----+ 4 rows in set (0.09 sec)
创建远程存储引擎表student1
mysql> CREATE TABLE `student1` ( `id` int(11) NOT NULL, `name` varchar(25) DEFAULT NULL, `age` int(11) DEFAULT NULL, PRIMARY KEY (`id`)) -> ENGINE=FEDERATED DEFAULT CHARSET=utf8 connection='mysql://root:mysql@192.168.0.145/test/student'; Query OK, 0 rows affected (0.09 sec)
注意:本地创建的表名必须在远程服务器存在,创建的字段也必须是远程表中的字段,可以比远程表的字段少,但是不能多,本地存储引擎选择:ENGINE =FEDERATED,
CONNECTION选项中的连接字符串的一般形式如下:scheme://user_name[:password]@host_name[:port_num]/db_name/tbl_name
|