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 - Cant 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;
经验分享 程序员 微信小程序 职场和发展