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

 

 

 

 

 

你可能感兴趣的:(数据库,mysql,dblink)