mysql基于federated存储引擎访问远程数据库表

发布时间:2021-06-29 00:00:00

但是这个是有一个前置条件:两个数据库都必须是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


重庆思庄认证培训

<<