MySQL FEDERATED引擎 远程调用数据库

本小妞迷上赌 提交于 2020-08-18 03:43:52
  • FEDERATED 引擎

  • 使用注意事项

    • 通过 FEDERATED 引擎创建的表只是在本地有表定义文件,数据文件则存在于远程数据库中,通过这个引擎可以实现类似Oracle下DBLINK的远程数据访问功能,就是说,这种建表方式只会在数据库A中创建一个表B的表结构文件,表的索引,数据等文件还是在机器B上的数据库B中,相当于只是在数据库A中创建了表B的一个快捷方式

    • FEDERATED 表可能会被复制到其他的slave数据库,你需要确保slave服务器也能够使用定义在connection中或mysql.servers表中的link的用户名/密码 连接上远程服务器

    • 远程服务器必须是MySQL数据库

    • 在访问FEDERATED表中定义的远程数据库的表前,远程数据库中必须存在这张表

    • FEDERATED 表不支持通常意义的索引,服务器从远程库获取所有的行然后在本地进行过滤,不管是否加了where条件或limit限制

      • 查询可能造成性能下降和网络负载,因为查询返回的数据必须存放在内存中,所以容易造成使用系统的swap分区或挂起

    • FEDERATED表不支持字段的前缀索引

    • FEDERATED表不支持ALTER TABLE语句或者任何DDL语句

    • FEDERATED表不支持事务

    • 本地FEDERATED表无法知道远程库中表结构的改变

    • 任何drop语句都只是对本地库的操作,不对远程库有影响

  • FEDERATED 默认关闭的,所以需要先开启它

  • 登录MySQL

  • 查看引擎

    • mysql> show engines;
  • 首先找到mysql的安装目录。找到启动文件 my.ini
    • show variables like '%data%'
  • 快速定位MySQL安装路径
  • 打开 my.ini 文件,并在末尾追加 federated
  • 重启MySQL
  • 查看资源引擎
  • 已支持
  • 远程MySQL数据表
    • CREATE TABLE `test` (
        `id` int DEFAULT NULL,
        `name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
        `age` int DEFAULT NULL
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

       

  • 本地数据库创建表SQL
    • 建表语句格式:
    • CREATE TABLE `table_name`(......) ENGINE =FEDERATED CONNECTION='mysql://[username]:[password]@[location]:[port]/[db-name]/[table-name]'
  • 创建表

    • CREATE TABLE `loctest` (
        `id` int(11) NOT NULL,
        `name` varchar(30) COLLATE utf8mb4_unicode_ci NOT NULL,
        PRIMARY KEY (`id`)
      ) ENGINE=FEDERATED DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci CONNECTION='mysql://root:root@39.106.128.197:3306/practice/test';

       

  • 注意
    • ENGINE=FEDERATED
  • 我们一般建表的时候,数据库引擎是:ENGINE=INNODB, 此时我们要切换FEDERATED

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!