爱易网
IT新闻
IT新闻
爱易资讯
网站搭建
云虚拟主机教程
云服务器教程
Apache教程
IIS教程
Nginx教程
网站策划
站长文章
推广教程
淘宝客教程
网页设计
HTML教程
XHTML教程
CSS教程
HTML5教程
CSS3教程
JavaSript基础
JQuery教程
Node.js教程
前端技术
Ajax教程
Js特效
Xml教程
平面设计
页面UI设计
photoshop教程
程序开发
AI人工智能
Asp教程
Php教程
Asp.Net教程
Net Core教程
C#教程
Java教程
Jsp教程
开发技术
微信小程序教程
Uniapp开发教程
微信公众号开发
Andriod教程
IOS教程
DOS教程
Python教程
Docker教程
Windows Container教程
数据库
MSSQL教程
MySQL教程
Redis教程
Access教程
Oracle教程
数据库教程
操作系统
Linux教程
Windows教程
MAC教程
Cisco教程
交换机教程
防火墙教程
搜索
爱易网页
MySQL教程
mysql可以在本地数据库访问远程数据库存储过程吗?解决方法
mysql可以在本地数据库访问远程数据库存储过程吗?解决方法
日期:2014-05-16 浏览次数:20873 次
mysql可以在本地数据库访问远程数据库存储过程吗?
各位大侠,小妹遇到棘手问题,需要在本地存储过程访问远程数据库的存储过程,改怎么实现?
mysql不支持连接数据库,这是个棘手的问题,可以在本地数据库访问远程数据库中得表(federated引擎实现),可是我需要操作表,需要调用远程数据库存储过程返回查询结果,改如何实现?谢谢~
------解决方案--------------------
如果只是访问B服务器上的某个表,则可以直接通过 FEDERATED存储引擎
引用
15.7. FEDERATED存储引擎
15.7.1. 安装FEDERATED存储引擎
15.7.2. FEDERATED存储引擎的介绍
15.7.3. 如何使用FEDERATED表
15.7.4. FEDERATED存储引擎的局限性
FEDERATED存储引擎访问在远程数据库的表中的数据,而不是本地的表。
FEDERATED存储引擎仅在-MAX版的MySQL上可用。
要为FEDERATED引擎检查源码,请查看MySQL源码分发版的sql目录。
对于FEDERATED存储引擎,在http://forums.mysql.com/list.php?105上有一个专门的论坛。
15.7.1. 安装FEDERATED存储引擎
要允许这个存储引擎,当你构建MySQL时请使用--with-federated-storage-engine来configure。
15.7.2. FEDERATED存储引擎的描述
当你创建一个FEDERATED表的时候,服务器在数据库目录创建一个表定义文件。文件由表的名字开始,并有一个.frm扩展名。无其它表被创建,因为实际的数据在一个远程数据库上。这不同于为本地表工作的存储引擎的方式。
对于本地的数据录表,数据文件是本地的。例如,如果你创建一个名为user的MyISAM表,MyISAM处理器创建一个名为users.MYD的数据文件。对本地表读,插入,删除和更新在本地数据文件里的数据的处理器和记录被以对处理器的特定格式存储。为了读记录,处理器必须把数据分解进列。为了写记录,列值必须被转换到被处理器使用的行格式并且被写进本地的数据文件。
使用MySQL FEDERATED存储引擎,没有对表的本地数据文件(比如,没有.MYD文件)。取而代之地,一个远程数据库存储那些正常地应该在表中的数据。这使得MySQL客户端API来读,删除,更新和插入数据的使用成为必要。数据取回被通过SELECT * FROM tbl_name SQL语句来初始化。要读这个结果,通过使用mysql_fetch_row() C API函数,行被一次取一个,然后从SELECT结果包中的列转换成FEDERATED处理器期望的格式。
基本流程如下:
1. SQL调用被本地发布
2. MySQL处理器API (数据以处理器格式)
3. MySQL客户端API (数据被转换成SQL调用)
4. 远程数据库-> MySQL客户端API
5. 转换结果包(如果有的话)到处理器格式
6. 处理器 API -> 结果行或受行影响的对本地的计数
15.7.3. 如何使用FEDERATED表
使用FEDERATED表的步骤是非常简单的。通常,你运行两个服务器,要么在同一个主机上,要么在不同主机上。(一个FEDERATED表使用其它被同一服务器管理的表也是可能的。虽然只有极少的点要这么做)。
首先,你必须在你想要用FEDERATED表访问的远程服务器上有一个表。假设,远程的表在FEDERATED数据库中并且被如下定义:
CREATE TABLE test_table (
id int(20) NOT NULL auto_increment,
name varchar(32) NOT NULL default '',
other int(20) NOT NULL default '0',
PRIMARY KEY (id),
KEY name (name),
KEY other_key (other)
)
ENGINE=MyISAM
DEFAULT CHARSET=latin1;
ENGINE表选项可能命名任何存储引擎,该表需要不是一个MyISAM表。
接着,在本地服务器上为访问远程表创建一个FEDERATED表:
CREATE TABLE federated_table (
id int(20) NOT NULL auto_increment,
name varchar(32) NOT NULL default '',
other int(20) NOT NULL default '0',
PRIMARY KEY (id),
KEY name (name),
KEY other_key (other)
)
ENGINE=FEDERATED
DEFAULT CHARSET=latin1
CONNECTION='mysql://root@remote_host:9306/federated/test_table';
(注意: CONNECTION 替代 用在先前版本的MySQL里的COMMENT)。
除了ENGINE表选项应该是FEDERATED,并且CONNECTION表选项是给FEDERATED指明如何连接到远程服务器上的连接字符串之外,这个表的结构必须完全与远程表的结构相同。
FEDERATED引擎仅创建在已联盟数据库中的test_table.frm文件。
远程主机信息指明本地服务器要连接到的远程服务器,数据库和表信息指明哪一个远程表要被作为数据文件来用。在这个例子中。远程服务器被指定来作为远程主机在9306端口上运行,所以你要启动服务器,让它监听9306端口。
在CONNECTION选项中的连接字符串的一般形式如下:
scheme://user_name[:password]@host_name[:port_num]/db_name/tbl_name
只有mysql在这一点被支持为scheme,密码和端口号时可选的。
这里有一些连接字符串的例子:
CONNECTION='mysql://username:password@hostname:port/database/tablename'
CONNECTION='mysql://username@hostname/database/tablename'
CONNECTION='mysql://username:password@hostname/database/tablename'
为指定连接字符串使用CONNECTION是非可选,并且在将来可能会改变。当你使用FEDERATED表的时候,要记得这个,因为这意味着当将来发生那种改变之时,可能被要求。
因为任何被用的密码作为纯文本被存在连接字符串中,它可以被任何使对FEDERATED表使用SHOW CREATE TABLE或SHOW TABLE STATUS的用户,或者在INFORMATION_SCHEMA数据库中查询TABLES表的用户看见。
对于FEDERATED存储引擎,在http://forums.mysql.com/list.php?105上有一个专门的论坛。
15.7.4. FEDERATED存储引擎的局限性
FEDERATED支持及不支持的如下:
· 在第一个版本中,远程服务器必须是一个MySQL服务器。FEDERATED对其它数据库引擎的支持可能会在将来被添加。
· FEDERATED表指向的远程表在你通过FEDERATED表访问它之前必须存在。
· 一个FEDERATED表指向另一个FEDERATED表是可能的,但是你必须小心不要创建一个循环。 <
上一篇:MYSQL锁处理
下一篇: SQL语句日期有关问题!
免责声明:
本文仅代表作者个人观点,与爱易网无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
相关资料
更多>
mysql导入导出(补给)
mysql 服务终止不了
解决mysql连接慢的有关问题
postgre中 delete语句中使用 limit 报错。该怎么处理
MySQL 中group by的兑现
JBPM4.4、Spring3跟Mysql5整合
有没有可能在不停服务情况下, 调整一个表的外键关系?解决方法
mysql 连接异常(10048)
mysql-cluster 中的 sql node(主) 与 单独的 mysql server(从) 做主从复制(异常解决)
推荐阅读
更多>
windows下mysql忘记root密码的解决办法,碰到这个有关问题的朋友可以参考下
小弟我的存储过程加入注释就出现Parameter '?/*' not found in the collection异常该怎么处理
SQL 语法参考
mysql的相仿indexOf方法
MySql中delimiter的功用
postgresql中怎么调用自定义函数
惯用sql语句 - mysql
MySql用户创办、授权以及删除
mysql的一些维护下令
论MySQL几时使用索引,何时不使用索引
稍微复杂的sql语句
Mysql之创办约束条件
MYSQL使用经验(二)-主从复制
mysql关于权限的治理
怎么查询前10条记录
请教mysql如何创建表结构
mysql 是不是嵌入式数据库,该如何处理
mysql #1170异常(42000) BLOB/TEXT Column Used in Key Specification Without a Key Le
在Postgresql中一条修改信息的语句啊该如何处理
利用 mysql-5.5.27.tar.gz 回从源码安装 mysql-5.5.27