注入mysql跨库查询_技巧篇:mysql远程跨库查询小结

使用场景,举例说明:

我有两台阿里云的ecs服务器,IP分别是:xxx.xxx.xxx.1,xxx.xxx.xxx.2

数据库分别是:IP为1的db1,IP为2的db2

db1中有张表sys_user:

建表SQL如下:

CREATE TABLE `sys_user` (

`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '编号',

`username` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '用户名',

`password` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '密码',

`state` int(4) DEFAULT NULL COMMENT '状态,1正常,0待审核,-1删除',

`createtime` datetime DEFAULT NULL COMMENT '创建时间',

`operatortime` datetime DEFAULT NULL COMMENT '修改时间',

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

db2中,我想查看db1中的表sys_user数据

基于此,两台服务器之间的跨库查询,可以使用如下的方式进行(MySQL的FEDERATED):

首先,执行show engines;查看是否支持FEDERATED

419334a262b7?tdsourcetag=s_pcqq_aiomsg

image.png

另外,编辑 /etc/my.cnf,在[mysqld]模块加入federated:

419334a262b7?tdsourcetag=s_pcqq_aiomsg

image.png

如果编辑了/etc/my.cnf,需要重新启动MySQL:

systemctl restart mysql

show engines返回的结果,支持FEDERATED的话,就可以在db2中建表了

建表SQL如下(需要注意的是ENGINE,CONNECTION,这里演示的是,该表的结构和db1中的sys_user保持一致):

CREATE TABLE `engin_sys_user` (

`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '编号',

`username` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '用户名',

`password` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '密码',

`state` int(4) DEFAULT NULL COMMENT '状态,1正常,0待审核,-1删除',

`createtime` datetime DEFAULT NULL COMMENT '创建时间',

`operatortime` datetime DEFAULT NULL COMMENT '修改时间',

PRIMARY KEY (`id`)

) ENGINE=FEDERATED AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci

CONNECTION='mysql://username:password@xxx.xxx.xxx.2:port/db/table'

另外,CONNECTION还可以使用另外一种方式(需要注意的是SERVER , WRAPPER):

CREATE SERVER server_dz

FOREIGN DATA WRAPPER mysql

OPTIONS (HOST 'xxx.xxx.xxx.2',USER 'xxx',PASSWORD 'xxx' ,PORT 3306,DATABASE 'db');

执行后,建表语句中可以使用:CONNECTION='server_dz',需要注意的是表名,要和db1中的保持一致

测试效果如下:

修改db1中sys_user的表数据后,再db2查看 engin_sys_user的表数据,结果如下图:

419334a262b7?tdsourcetag=s_pcqq_aiomsg

image.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值