暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL的'dblink'

原创 张帅 云和恩墨 2022-04-12
2945

MySQL使用dblink:本地端是不存任何数据的,使用DBLINK查询的是源端的数据。

0


首先show engines;查看FEDERATED是否已启用。

0

如图所示,support为no表示未启用dblink功能。MySQL8.0.28中此引擎是MySQL自带的,默认未启用。

关闭mysqld服务,centos7命令:systemctl stop mysqld;

vi /etc/my.cnf文件

[mysqld]

federated

................

修改完成后重启mysqld:systemctl start mysqld;

查看federated是否启用

0

目标端访问源端表:

在源端await数据库下创建一张测试表test,create table test(id int,name varchar(64));

插入几条数据

0

目标端创建一张表,表结构与源端最好一致,名称可以不一样。

create table test(id int,name varchar(64)) ENGINE=FEDERATED CONNECTION='mysql://await:1234@192.168.50.30/await/test';

表后面需要指定引擎为federated,CONNECTION='mysql://username:password@源端IP/databasename/tablename';

目标端中需要使用对应数据库,否则会提示No database selected

也可以创建一个server方便访问数据库中的多个表:

目标端:

create server test_link

FOREIGN DATA WRAPPER mysql

OPTIONS (user 'await',password '1234',host '192.168.50.30',database 'await');

目标端建表:

create table await(id int,name varchar(64),grade float) ENGINE=FEDERATED CONNECTION='test_link/test';

查询数据,发现报错

0

源端的test表无grade列,而新建的await表有,导致查询失败。

删掉重建await表。

0

可以查询到源端的数据。此时源端目标端新建表,即可通过server来访问。

注意:

1.本地进行插入删除和更新操作时,会将本地的操作发送到远程服务端进行操作,远程服务器产生结果,然后再返回到本地匹配行。

2.插入的数据量不能超过服务器之间最大的包大小,如果插入数据量过大,会导致包分解,并且可能发生回滚问题。

3.当使用字符串建立连接时,密码避免使用@符号,可以通过使用创建server的方法避免此问题。

4.建立的表不支持分区。




「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论