mysql使用federated引擎实现远程访问数据库(跨网络同时操作两个数据库中的表)
需求:
需要在IP1上的database1上访问IP2的database数据库内的table2表
这里database作为本地数据库需要开启federated引擎才可以访问远程的database内的表
> show engines;
如果有FEDERATED引擎,但Support是NO,说明你的mysql安装了这个引擎,但没启用,去my.cnf文件末添加一行 federated
配置my.cnf,加入feterated
[mysqld]
feterated
重新启动mysql即可。
远程IP2数据库database2开启远程连接
开启之后,本地数据库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;
create user 'test'@'%' identified by '123456'
# test 数据库的所有权限授权给 ted 这个用户,允许 ted 用户在 192.168.20.22 这个 IP 进行远程登陆,并设置 ted 用户的密码为 123456 。
grant all PRIVILEGES on test.* to ted@'192.168.20.22' identified by '123456';
在本地数据库database1中创建远程数据库表
要求表结构要一模一样,所以可以先
在database2里面找到建立表table2的语句
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";
在本地就可以看到远程表里面的内容了