创建一个与远程服务器的链接,并使用CONNECT SE访问数据
作者: Anel Husakovic 2022-01-19 发表评论 :使用CONNECT SE创建一个到远程服务器的链接并访问数据
在这篇博客中,我们将看到如何创建一个到远程服务器的链接,并使用它来一次访问多个表。
在之前的博客中,我们已经看到了如何在Docker容器之间建立远程连接。
我们的方法是指定连接字符串,只引用一个表。
但如果我们需要更多的表,如果需要整个数据库呢?
解决办法是用以下方法链接到一个远程数据库 [CREATE SERVER](https://mariadb.com/kb/en/create-server/)声明。
通过这种方式获得的链接可以传递给存储引擎(SE)的CREATE TABLE 语句,以建立一个连接,使用表发现功能,SE将发现表的字段并创建表。
让我们来看看如何。
按照之前的博客,让我们在名为mariadb-remote的远程容器中启动mariadb 客户端。
$ docker exec -it mariadb-remote mariadb -uanel -panel web_users
我们还创建了mariadb-local容器;让我们登录到mariadb 客户端,在那里我们已经创建了名为test的数据库。
$ docker exec -it mariadb-local mariadb -ulocal_user -plocal_user_pw test
- 在mariadb-local上创建服务器链接。
注意:你需要有SUPER或FEDERATED ADMIN (来自MariaDB 10.5.2+)和SELECT权限。
MariaDB [test]> CREATE SERVER link_remote1
FOREIGN DATA WRAPPER `mariadb`
OPTIONS (
USER 'anel',
PASSWORD 'anel',
HOST 'mariadb-remote',
DATABASE 'web_users'
);
注意,我们指定了数据库作为服务器链接的参数,所以我们可以使用定义的链接作为连接字符串访问特定数据库的所有表。
前面查询的结果是mysql.services表中的记录。
MariaDB [test]> select * from mysql.servers;
+--------------+----------------+-----------+----------+----------+------+--------+---------+-------+
| Server_name | Host | Db | Username | Password | Port | Socket | Wrapper | Owner |
+--------------+----------------+-----------+----------+----------+------+--------+---------+-------+
| link_remote1 | mariadb-remote | web_users | anel | anel | 0 | | mariadb | |
+--------------+----------------+-----------+----------+----------+------+--------+---------+-------+
1 row in set (0.000 sec)
要放弃远程服务器链接,请使用 [DROP SERVER](https://mariadb.com/kb/en/drop-server/) link_remote1声明。
让我们试着用服务器链接来创建一个表。
MariaDB [test]> CREATE TABLE test.my_local_webusers
ENGINE = CONNECT
TABLE_TYPE=MYSQL
CONNECTION 'link_remote1/webusers';
Query OK, 0 rows affected (0.031 sec)
注意,我们可以从连接字符串中省略表名webusers。在这种情况下,我们需要指定我们想要创建的远程表的名称。
MariaDB [test]> CREATE TABLE webusers ENGINE = CONNECT TABLE_TYPE=MYSQL CONNECTION 'link_remote1';
验证结果
MariaDB [test]> select * from my_local_webusers;
+----+---------------+-----------+-------------------+----------------+---------------+--------------+-----------------+-----------------+-----------------+-----------------------+---------------+-----------------+----------------------------------------+----------------------------------+
| id | name | username | email | address_street | address_suite | address_city | address_zipcode | address_geo_lat | address_geo_lng | phone | website | company_name | company_catchPhrase | company_bs |
+----+---------------+-----------+-------------------+----------------+---------------+--------------+-----------------+-----------------+-----------------+-----------------------+---------------+-----------------+----------------------------------------+----------------------------------+
| 1 | Leanne Graham | Bret | Sincere@april.biz | Kulas Light | Apt. 556 | Gwenborough | 92998-3874 | -37.3159 | 81.1496 | 1-770-736-8031 x56442 | hildegard.org | Romaguera-Crona | Multi-layered client-server neural-net | harness real-time e-markets |
| 2 | Ervin Howell | Antonette | Shanna@melissa.tv | Victor Plains | Suite 879 | Wisokyburgh | 90566-7771 | -43.9509 | -34.4618 | 010-692-6593 x09125 | anastasia.net | Deckow-Crist | Proactive didactic contingency | synergize scalable supply-chains |
+----+---------------+-----------+-------------------+----------------+---------------+--------------+-----------------+-----------------+-----------------+-----------------------+---------------+-----------------+----------------------------------------+----------------------------------+
2 rows in set (0.002 sec)
结论和未来工作
在这篇博客中,我们学习了如何应用CREATE SERVER语句和使用CONNECT SE访问数据。你可以尝试用其他存储引擎做同样的事情,如SPIDER或FEDERATEDX。
欢迎反馈
如果你在这个功能预览中遇到任何问题,设计上的问题,或者边缘情况没有达到预期效果,请在MDEV项目中用JIRA错误/功能请求告诉我们。欢迎你在Zulip上聊一聊。
帖子导航
较早的帖子 较早的帖子:
2021年的MariaDB