• 【转】 mysql使用federated引擎实现远程访问数据库(跨网络同时操作两个数据库中的表)


    原文转自:http://www.2cto.com/database/201412/358397.html

    问题:

    这里假设我需要在IP1上的database1上访问IP2的database数据库内的table2表

    方法:

    这里database作为本地数据库需要开启federated引擎才可以访问远程的database内的表,具体开启方法如下:

    本地IP1数据库DATABASE1开启FEDERATED引擎

    MYSQL命令行,查看FEDERATED引擎是否开启,默认是不开启

    >show engines;

    可以在上图中看出本地数据库没有开启federated引擎

    2.如果没有开启
    配置my.cnf
    [mysqld]
    feterated

    3.重启MYSQL服务器

    远程IP2数据库database2开启远程连接

    开启之后,本地数据库database1才有权限访问远程的database2

    2)创建远程登陆用户并授权

    1
    2
    3
    4
    5
    6
    7
    8
    9
    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;
    CODE: [COPY]
    > grant all PRIVILEGES on discuz.* to ted@'123.123.123.123' identified by '123456';
    上面的语句表示将 discuz 数据库的所有权限授权给 ted 这个用户,允许 ted 用户在 123.123.123.123 这个 IP 进行远程登陆,并设置 ted 用户的密码为 123456 。
    下面逐一分析所有的参数:
    all PRIVILEGES 表示赋予所有的权限给指定用户,这里也可以替换为赋予某一具体的权限,例如:select,insert,update,delete,create,drop 等,具体权限间用“,”半角逗号分隔。
    discuz.* 表示上面的权限是针对于哪个表的,discuz 指的是数据库,后面的 * 表示对于所有的表,由此可以推理出:对于全部数据库的全部表授权为“*.*”,对于某一数据库的全部表授权为“数据库名.*”,对于某一数据库的某一表授 权为“数据库名.表名”。
    ted 表示你要给哪个用户授权,这个用户可以是存在的用户,也可以是不存在的用户。这里为了易用性你最好用root用户,因为别人远程的时候也会用,密码也要用root用户的密码,因为别人也是这么用的。(保证大家都用同一个登录信息访问同一个数据库,这是非常重要的)
    123.123.123.123 表示允许远程连接的 IP 地址,如果想不限制链接的 IP 则设置为“%”即可。
    123456 为用户的密码。
    执行了上面的语句后,再执行下面的语句,方可立即生效。
    CODE: [COPY]
    > flush privileges;

    查看远程数据库的访问权限更新之后的情况:

    可以看到已经有一个虚拟的用户scp_pm_154_54可以远程访问IP2上的database2了(这个scp_pm_154_54只是一个虚拟的用户,仅仅用来远程连接使用),下面就试试用这个账户能不能在另一个IP3上面访问这个数据库

    在本地数据库database1中创建远程数据库表

    要求表结构要一模一样,所以可以先

    在database2里面找到建立表table2的语句

    SHOW CREATE TABLE database2.table2

    得到建表语句

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    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

    在本地建立相同的表(远程表)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    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`)
    在本地就可以看到远程表里面的内容了


     

    修改本地的远程表

    可以到远程看到远程也被修改了

  • 相关阅读:
    mysql 查询表结构
    微信网页分享 jssdk config:invalid signature 签名错误
    小程序ios开发注意点
    自己常用易忘的CSS样式
    好久好久没写,,百度API逆地址解析以及删除指定marker
    关于vue打包是因代码校验报错
    git命令行 整理(一位大神给我的私藏)
    百度地图IP定位,点击地图添加marker
    vue-百度地图-maker文字标签显示隐藏
    vue脚手架搭建项目引用百度地图--出坑
  • 原文地址:https://www.cnblogs.com/xphdbky/p/7084442.html
Copyright © 2020-2023  润新知