这里假设我需要在IP1上的database1上访问IP2的database数据库内的table2表
这里database作为本地数据库需要开启federated引擎才可以访问远程的database内的表,具体开启方法如下:
MYSQL命令行,查看FEDERATED引擎是否开启,默认是不开启
>show engines;
可以在上图中看出本地数据库没有开启federated引擎
2.如果没有开启
配置my.cnf
[mysqld]
feterated
3.重启MYSQL服务器
开启之后,本地数据库database1才有权限访问远程的database2
2)创建远程登陆用户并授权
USE mysql; SELECT host,user,PASSWORD from user; GRANT ALL PRIVILEGES ON *.* TO "root"@"%" IDENTIFIED BY "yourpassward"; FLUSH PRIVILEGES; USE mysql; SELECT host,user,PASSWORD from user;CODE: [COPY]
查看远程数据库的访问权限更新之后的情况:
可以看到已经有一个虚拟的用户scp_pm_154_54可以远程访问IP2上的database2了(这个scp_pm_154_54只是一个虚拟的用户,仅仅用来远程连接使用),下面就试试用这个账户能不能在另一个IP3上面访问这个数据库
要求表结构要一模一样,所以可以先
SHOW CREATE TABLE database2.table2
得到建表语句
CREATE TABLE `e_hostcomputer` ( `ID` bigint(20) NOT NULL COMMENT 'ID', `CODE` varchar(30) DEFAULT NULL COMMENT '编码', `NAME` varchar(50) DEFAULT NULL COMMENT '名称', `IP` varchar(15) DEFAULT NULL COMMENT 'IP地址', `STATUS` char(1) DEFAULT NULL COMMENT '状态', `CRTR` varchar(50) DEFAULT NULL COMMENT '创建者', `CRTDT` timestamp NULL DEFAULT NULL COMMENT '创建时间', `UPDR` varchar(50) DEFAULT NULL COMMENT '修改者', `UPDDT` timestamp NULL DEFAULT NULL COMMENT '修改时间', PRIMARY KEY (`ID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='上位机表'
远程IP2上数据库database2中的表table2
在本地建立相同的表(远程表)
CREATE TABLE `e_hostcomputer_link39` ( `ID` bigint(20) NOT NULL COMMENT 'ID', `CODE` varchar(30) DEFAULT NULL COMMENT '编码', `NAME` varchar(50) DEFAULT NULL COMMENT '名称', `IP` varchar(15) DEFAULT NULL COMMENT 'IP地址', `STATUS` char(1) DEFAULT NULL COMMENT '状态', `CRTR` varchar(50) DEFAULT NULL COMMENT '创建者', `CRTDT` timestamp NULL DEFAULT NULL COMMENT '创建时间', `UPDR` varchar(50) DEFAULT NULL COMMENT '修改者', `UPDDT` timestamp NULL DEFAULT NULL COMMENT '修改时间', PRIMARY KEY (`ID`) ) ENGINE=federated connection="mysql://scp_pm_154_54:scp_pm_154_54@112.219.11.139:13306/rzem/e_hostcomputer";在本地就可以看到远程表里面的内容了
修改本地的远程表
可以到远程看到远程也被修改了