美文网首页
技巧篇:mysql远程跨库查询小结

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

作者: 辛夷z | 来源:发表于2018-11-15 15:13 被阅读249次

使用场景,举例说明:

我有两台阿里云的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

image.png

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


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的表数据,结果如下图:


image.png

相关文章

  • 技巧篇:mysql远程跨库查询小结

    使用场景,举例说明: 我有两台阿里云的ecs服务器,IP分别是:xxx.xxx.xxx.1,xxx.xxx.xxx...

  • MySQL跨库查询

    一、跨库查询介绍 在MySQL中跨库查询主要分为两种情况,一种是同服务器的跨库查询;另一种是不同服务器的跨库查询;...

  • mysql跨库查询

    CREATETABLEfederated_table( idint(20)NOTNULLauto_incremen...

  • mysql权限问题,看不到其它的库!

    今天在安装mysql数据库后,想开启远程连接,发现查询不到了mysql数据库自带的mysql数据库,是由于用户的权...

  • MySQL基础

    在mysql数据库中\g等价于; \G将查询到的信息,旋转90°变成纵向 远程连接数据库:mysql -h 目标地...

  • CentOS7 MySQL命令

    启动 关闭 重启 查看服务状态 查看MySQL配置 远程登录 更改root密码 查询数据库 进入数据库 列出数据库...

  • MySQL 相关问题

    一.MySQL远程连接 有时候在进行MySQL远程连接时,需要开启远程访问权限。可以通过查询mysql.user表...

  • MySQL远程带条件导出数据

    MySQL远程带条件导出数据 远程查询结果导出到本地(query.sql为查询语句):

  • Mysql对于information_schema库的一些用法

    1) 查询mysql每一个数据库的大小 2) 查询mysql单个库中每张表的的大小 3) 查询mysql单个库中单...

  • 数据库面试简答、30道高频面试题

    一、MySQL问答 1、数据库sql语句查询,跨表查询有哪几种方式 内连接(inner可以不写) 这就是内连接,它...

网友评论

      本文标题:技巧篇:mysql远程跨库查询小结

      本文链接:https://www.haomeiwen.com/subject/tlsyfqtx.html