MySQL dblink的实现以及密码中含有@问题的解决

           通过MySQL的 federated引擎可以实现本地数据库来访问另外一个mysql数据库中的数据,也就是mysql dblink。可以在Linux系统中MySQL数据库(target端)中建立宿主机MySQL数据库(source端)中某个表的link,当在Linux中读取link表时,就相当于直接读取宿主机中的原始表内容。

具体的操作步骤如下:

1.查看mysql的版本以及引擎

mysql> select version();
+-----------+
| version() |
+-----------+
| 5.7.16    |
+-----------+
1 row in set (0.00 sec)
 
mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
| FEDERATED          | NO      | Federated MySQL storage engine                                 | NO           | NO   | NO         |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+

 

2.修改配置文件使其支持FEDERATED。

     在在/etc/my.cnf 添加federated。

3.配置dblink

CREATE TABLE table_1(id INT(11), NAME VARCHAR(255))
ENGINE = FEDERATED
CONNECTION='mysql://user:password@*.*.*.*:port/test/table_1'

user:账号    password:密码     @后面是源数据库服务器ip,端口以及表

 

4.解决密码中含有@的问题

如果密码中有@符号,采用步骤三来创建dblink 会报错。

[Err] 1432 - Can't create federated table. The data source connection string 'mysql://root:my@123@*.*.*.*:3306/test/tb_test' is not in the correct format.

文档有说明 :When using a CONNECTION string, you cannot use an '@' character in the password.

解决方案有两个:

 a.修改数据库密码

b. 采用创建server的方式

 CREATE SERVER fedlk
     FOREIGN DATA WRAPPER mysql
    OPTIONS (USER 'root',PASSWORD 'Password', HOST '*.*.*.*', PORT 3306, DATABASE 'test');


CREATE TABLE table_1(id INT(11), NAME VARCHAR(255))
) ENGINE = FEDERATED DEFAULT CHARSET=utf8 CONNECTION = 'fedlk/table_1';

 

 

 

 

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL不直接支持跨库连接,但可以使用dblink方式实现跨库连接。在创建,可以使用FEDERATED存储引擎,并在连接参数指定远程数据库的连接信息。例如,可以使用以下语法创建一个以FEDERATED为存储引擎的表: CREATE TABLE 表名 (列定义) ENGINE=FEDERATED CONNECTION='mysql://用户名:密码@远程主机:端口号/远程数据库/远程表名'; 其,用户名和密码是远程数据库的登录凭证,远程主机是远程数据库的IP地址或主机名,端口号是远程数据库的端口号,远程数据库是要连接的数据库名称,远程表名是要连接的表名。 例如,可以使用以下语法创建一个以FEDERATED为存储引擎的表,并连接到远程数据库的表: CREATE TABLE my_table (id INT, name VARCHAR(50)) ENGINE=FEDERATED CONNECTION='mysql://username:password@hostname:port/remote_database/remote_table'; 在验证查询,可以使用LEFT JOIN语句来查询本地表和远程表的数据。例如,可以使用以下语法进行验证查询: SELECT * FROM local_table t1 LEFT JOIN remote_table t2 ON t1.column = t2.column; 其,local_table是本地表的名称,remote_table是远程表的名称,column是连接两个表的列名。 请注意,使用dblink方式连接远程数据库需要确保远程数据库的连接信息正确,并且本地数据库服务器可以访问远程数据库服务器。 #### 引用[.reference_title] - *1* *2* [mysql跨库关联查询(dblink)](https://blog.csdn.net/qq_48721706/article/details/124088963)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [mysql数据库dblink的使用](https://blog.csdn.net/ycx987/article/details/129347285)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值