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’;

5.报错连接外部数据源时
MySQL dblink的实现以及密码中含有@问题的解决_第1张图片

把创建的server中host改为内网IP

你可能感兴趣的:(MySQL dblink的实现以及密码中含有@问题的解决)