前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >分布式跨库查询 mysql federated引擎的使用

分布式跨库查询 mysql federated引擎的使用

作者头像
IT云清
发布2019-03-22 16:11:42
3.7K0
发布2019-03-22 16:11:42
举报
文章被收录于专栏:IT云清IT云清IT云清
分布式跨库查询时,可以尝试使用federated引擎,来创建远程表的映射,方便查询。

1.开启引擎

查询数据库是否支持
SHOW ENGINES;
在这里插入图片描述
在这里插入图片描述
有,说明支持,但是没有开启,开启一下:
配置文件添加:federated,如下:
[mysqld]
federated
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
然后重启mysql,再次查询,发现已经开启:
在这里插入图片描述
在这里插入图片描述

2.场景

数据库1:阿里云 java4all,表product_stock;
数据库2:华为云 wangtest1,表user;
user表中有一个product_stock_id。
需求:需要跨库查询。

3.创建数据库表映射

在华为云的wangtest1数据库中,创建一个阿里云的java4all库的product_stock表的映射表。
CREATE TABLE `product_stock` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `stock` int(11) DEFAULT NULL COMMENT '库存',
  PRIMARY KEY (`id`)
) ENGINE=FEDERATED  DEFAULT CHARSET=utf8 COMMENT='库存表,来自阿里云映射'
CONNECTION='mysql://root:1xxx@1xx.xx.xx.xx:3306/java4all/product_stock';
这里需要注意,数据库引擎的选择,要明确指定引擎ENGINE=FEDERATED
创建完后,会发现,在wangtest1库中,也有了product_stock表:
在这里插入图片描述
在这里插入图片描述
此时,其实在华为云的wangtest1库中,就有了阿里云的java4all库中的product_stock这张表的映射了。我们可以看到,这张表外观看起来和正常的表是一样的,但是其实华为云这边这是存储了表结构,数据还是从阿里云拉取的。
我们尝试在阿里云修改数据,在华为云这边刷新,也会看到变化。反之也是可以的。在使用层面看来,这个product_stock和本地原本就创建了的效果是一样的,各种查询都是支持的,但是不建议给映射表写的权限。
查询测试:
SELECT * from user a ,product_stock ps 
WHERE a.product_stock_id = ps.id
and ps.`name` LIKE CONCAT('%','香','%')
and a.user_type = 1;
在这里插入图片描述
在这里插入图片描述

4.注意事项

1.映射表的字段,要少于等于原表(远程表)字段。
2.远程表的数据库据密码,不能含有@字符,因为在创建映射表时,CONNECTION='mysql://root:1xxx@1xx.xx.xx.xx:3306/java4all/product_stock',这里用户名密码,和数据库地址之间的分隔符是@,如果你的密码含有@,会导致解析出错。
3.修改本地表结构,是不允许的,因为你这个表是映射远程表的,远程表没改,你改了,显然不行。如果远程表修改了,这个表需要重新映射。
4.删除本地映射表,对远程表无负作用。
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年03月20日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 分布式跨库查询时,可以尝试使用federated引擎,来创建远程表的映射,方便查询。
  • 1.开启引擎
    • 查询数据库是否支持
      • 有,说明支持,但是没有开启,开启一下:
        • 配置文件添加:federated,如下:
          • 然后重启mysql,再次查询,发现已经开启:
          • 2.场景
            • 数据库1:阿里云 java4all,表product_stock;
              • 数据库2:华为云 wangtest1,表user;
                • user表中有一个product_stock_id。
                  • 需求:需要跨库查询。
                  • 3.创建数据库表映射
                    • 在华为云的wangtest1数据库中,创建一个阿里云的java4all库的product_stock表的映射表。
                      • 这里需要注意,数据库引擎的选择,要明确指定引擎ENGINE=FEDERATED,
                        • 创建完后,会发现,在wangtest1库中,也有了product_stock表:
                          • 此时,其实在华为云的wangtest1库中,就有了阿里云的java4all库中的product_stock这张表的映射了。我们可以看到,这张表外观看起来和正常的表是一样的,但是其实华为云这边这是存储了表结构,数据还是从阿里云拉取的。
                            • 我们尝试在阿里云修改数据,在华为云这边刷新,也会看到变化。反之也是可以的。在使用层面看来,这个product_stock和本地原本就创建了的效果是一样的,各种查询都是支持的,但是不建议给映射表写的权限。
                              • 查询测试:
                              • 4.注意事项
                                • 1.映射表的字段,要少于等于原表(远程表)字段。
                                  • 2.远程表的数据库据密码,不能含有@字符,因为在创建映射表时,CONNECTION='mysql://root:1xxx@1xx.xx.xx.xx:3306/java4all/product_stock',这里用户名密码,和数据库地址之间的分隔符是@,如果你的密码含有@,会导致解析出错。
                                    • 3.修改本地表结构,是不允许的,因为你这个表是映射远程表的,远程表没改,你改了,显然不行。如果远程表修改了,这个表需要重新映射。
                                      • 4.删除本地映射表,对远程表无负作用。
                                      相关产品与服务
                                      数据库
                                      云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
                                      领券
                                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档