共计 7593 个字符,预计需要花费 19 分钟才能阅读完成。
这篇文章主要讲解了“怎么通过 mysql 的 federated 插件实现 dblink 功能”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着丸趣 TV 小编的思路慢慢深入,一起来研究和学习“怎么通过 mysql 的 federated 插件实现 dblink 功能”吧!
db1:172.26.99.157 3306(源库)
db2:172.26.99.157 3310(通过 dblink 调用源库)
[root@node7 lepus]# mm
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 357
Server version: 5.7.29-log MySQL Community Server (GPL)
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type help; or \h for help. Type \c to clear the current input statement.
mysql show engines;
+——————–+———+—————————————————————-+————–+——+————+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+——————–+———+—————————————————————-+————–+——+————+
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| CSV | YES | CSV storage engine | 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 |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
| FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
+——————–+———+—————————————————————-+————–+——+————+
9 rows in set (0.00 sec)
mysql install plugin federated soname ha_federated.so
ERROR 1125 (HY000): Function federated already exists
mysql exit
Bye
重启数据库,
# mysqladmin -uroot -P3310 -p -h 127.0.0.1 shutdown
# mysqld –defaults-file=/mysql/data/my.cnf –user=mysql –datadir=/mysql/data/3310 –basedir=/mysql/app/mysql –pid-file=/mysql/data/mysql3310.pid –socket=/mysql/data/mysql3310.sock –port=3310
在 my.cnf 中添加参数:
federated
mysql show engines;
+——————–+———+—————————————————————-+————–+——+————+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+——————–+———+—————————————————————-+————–+——+————+
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| CSV | YES | CSV storage engine | 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 |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
| FEDERATED | YES | Federated MySQL storage engine | NO | NO | NO |
+——————–+———+—————————————————————-+————–+——+————+
9 rows in set (0.00 sec)
@3306:
# mysql -uroot -P3306 -h227.0.0.1 -p
mysql create database testdb;
mysql use testdb;
mysql CREATE TABLE `options` (
– `name` varchar(50) DEFAULT NULL,
– `value` varchar(255) DEFAULT NULL,
– `description` varchar(100) DEFAULT NULL,
– KEY `idx_name` (`name`) USING BTREE
– ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
@33310:
mysql use tianlei;
mysql CREATE TABLE `options` (
– `name` varchar(50) DEFAULT NULL,
– `value` varchar(255) DEFAULT NULL,
– `description` varchar(100) DEFAULT NULL,
– KEY `idx_name` (`name`) USING BTREE
– ) ENGINE=FEDERATED DEFAULT CHARSET=utf8
– CONNECTION= mysql://root:root123@172.26.99.157:3306/testdb/options
Query OK, 0 rows affected (0.01 sec)
mysql select * from options;
Empty set (0.01 sec)
@3306:
mysql
mysql insert into options (name,value) values (log , Y
Query OK, 1 row affected (0.00 sec)
mysql select * from options;
+——+——-+————-+
| name | value | description |
+——+——-+————-+
| log | Y | NULL |
+——+——-+————-+
1 row in set (0.00 sec)
@3310:
mysql select * from options;
+——+——-+————-+
| name | value | description |
+——+——-+————-+
| log | Y | NULL |
+——+——-+————-+
1 row in set (0.00 sec)
mysql insert into options (name,value) values (sql_mode , N
Query OK, 1 row affected (0.01 sec)
mysql select * from options;
+———-+——-+————-+
| name | value | description |
+———-+——-+————-+
| log | Y | NULL |
| sql_mode | N | NULL |
+———-+——-+————-+
2 rows in set (0.00 sec)
mysql update options set description= abc where name= log
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql delete from options where name = sql_mode
Query OK, 1 row affected (0.01 sec)
除了直接使用连接串的方法,还可以先创建 server,然后建表时调用 server:
还可以使用 server 的方式将连接串存储起来。
CREATE SERVER dblink
FOREIGN DATA WRAPPER mysql
OPTIONS (USER lepus , HOST 172.26.99.157 , PORT 3306, DATABASE testdb
CREATE TABLE `options2` (
`name` varchar(50) DEFAULT NULL,
`value` varchar(255) DEFAULT NULL,
`description` varchar(100) DEFAULT NULL,
KEY `idx_name` (`name`) USING BTREE
) ENGINE=FEDERATED
DEFAULT CHARSET=utf8
CONNECTION= dblink/options
mysql select * from options2;
ERROR 1429 (HY000): Unable to connect to foreign data source: Access denied for user lepus @ 172.26.99.157 (using password:
mysql drop server dblink;
Query OK, 1 row affected (0.00 sec)
CREATE SERVER dblink
FOREIGN DATA WRAPPER mysql
OPTIONS (USER lepus , HOST 172.26.99.157 , PORT 3306, DATABASE testdb ,PASSWORD lepus
mysql CREATE SERVER dblink
– FOREIGN DATA WRAPPER mysql
– OPTIONS (USER lepus , HOST 172.26.99.157 , PORT 3306, DATABASE testdb ,PASSWORD lepus
Query OK, 1 row affected (0.01 sec)
mysql select * from options2;
+——+——-+————-+
| name | value | description |
+——+——-+————-+
| log | Y | abc |
+——+——-+————-+
1 row in set (0.01 sec)
mysql show create table options2\G
*************************** 1. row ***************************
Table: options2
Create Table: CREATE TABLE `options2` (
`name` varchar(50) DEFAULT NULL,
`value` varchar(255) DEFAULT NULL,
`description` varchar(100) DEFAULT NULL,
KEY `idx_name` (`name`) USING BTREE
) ENGINE=FEDERATED DEFAULT CHARSET=utf8 CONNECTION= dblink/options
1 row in set (0.00 sec)
在 mysql 5.7 官方文档中有 federated 引擎的具体介绍,地址为:
https://dev.mysql.com/doc/refman/5.7/en/federated-storage-engine.html
远程服务器中包括表定义和数据,可以是 myisam、innodb 或其他引擎;
本地服务器中只包括相同表结构的 federated 引擎表和远程服务器的连接串信息。增删改查操作都需要发到远程服务器中。
数据交互如下:
1. 存储引擎查看 FEDERATED 表拥有的每一列,并构造引用远程表的适当 SQL 语句
2. 语句使用 MySQL 客户端 API 发送到远程服务器
3. 远程服务器处理语句,本地服务器检索语句产生的所有结果 (受影响的行数或结果集)
4. 如果语句生成了结果集,则每一列都转换为 FEDERATED 引擎所期望的内部存储引擎格式,并可用于向发出原始语句的客户端显示结果。
限制:
远端服务器必须是 mysql
在调用前,FEDERATED 指向的远端表必须存在
可以指向 FEDERATED 引擎表,注意不要循环嵌套
FEDERATED 引擎无法使用索引,如果结果集很大,数据存放在内存中,可能使用大量 swap 甚至 hang 住。
FEDERATED 引擎表支持 insert、update、delete、select、truncate table 操作和索引操作,但不支持 alter table 操作
能接受 insert …… on deplicate key update, 但不生效,有重复值仍然会报错
不支持事务
可以进行批量插入操作,但注意大小不要超过服务器建能传输的最大包大小
FEDERATED 引擎表无法获知远程服务器上表的变化
使用连接串时,密码不能包括 @符号
INSERT_id 和时间戳选项不会传播到 data provider
针对 FEDERATED 表发出的任何 DROP TABLE 语句只删除本地表,而不删除远程表
不使用查询缓存
不支持用户定义的分区
感谢各位的阅读,以上就是“怎么通过 mysql 的 federated 插件实现 dblink 功能”的内容了,经过本文的学习后,相信大家对怎么通过 mysql 的 federated 插件实现 dblink 功能这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是丸趣 TV,丸趣 TV 小编将为大家推送更多相关知识点的文章,欢迎关注!