MySQL中dblink的实现
2014-08-11 15:48
141 查看
参照以下博客:http://blog.csdn.net/renfengjun/article/details/18730977
最近项目中涉及MySQL数据库视图的创建,需要整合两个位于不同服务器上数据库的内容,就遇到了远程访问数据库的问题。在cracle中可以通过dblink来实现跨本地数据库来访问另外一个数据库中的数据。通过在网上查找,发现可以通过MySQL中的federated插件来实现类似的功能。
操作环境:
宿主机为win8系统,MySQL数据库,ip:192.168.1.98;从机为VMware虚拟机中的Linux系统,版本为CentOS6.5,MySQL数据库,ip:192.168.1.106。
实现功能:
可以在Linux系统中MySQL数据库(target端)中建立宿主机MySQL数据库(source端)中某个表的link,当在Linux中读取link表时,就相当于直接读取宿主机中的原始表内容。
实现步骤:
1. 查看target端(Linux虚拟机中)是否安装了federated插件:
mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints
|
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| CSV | YES | CSV storage engine | NO | NO | NO
|
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO
|
| MyISAM | YES | MyISAM storage engine | NO | NO | NO
|
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO
|
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO
|
| FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL
|
| ARCHIVE | YES | Archive storage engine | NO | NO | NO
|
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES
|
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO
|
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
显示没有安装federated插件
2. 安装federated插件:
mysql>install
plugin federated soname 'ha_federated.so';
ERROR
1125 (HY000): Function 'federated' already exists
说明已经安装过了,但没有启用
[root@localhost
etc]# service mysql stop
[root@localhost
etc]# mysqld_safe --federated &
[root@localhost
etc]# 140811 01:20:
1161f
21 mysqld_safe Logging to '/var/lib/mysql/localhost.localdomain.err'.
140811 01:20:22 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
mysql>
show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| CSV | YES | CSV storage engine | NO | NO | NO |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| MyISAM | YES | MyISAM storage engine | NO | NO | NO |
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| FEDERATED |YES
| Federated MySQL storage engine | NULL | NULL | NULL |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
federated插件已经启用
3.
配置/etc/my.conf,设置federated为默认启动
[root@localhost
etc]# vi /etc/my.conf
在文件中加入一行:
federated
重启mysql服务
service
mysql restart
mysql>
show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| CSV | YES | CSV storage engine | NO | NO | NO |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| MyISAM | YES | MyISAM storage engine | NO | NO | NO |
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| FEDERATED | YES | Federated MySQL storage engine | NULL | NULL | NULL |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
已经设置为默认启动了。
4.
在source端建立测试表,我是通过Navicat建立表的,其sql文件为:
DROP
TABLE IF EXISTS `e_eledata`;
CREATE TABLE `e_eledata` (
`ID` bigint(20) unsigned NOT NULL auto_increment COMMENT 'ID',
`E_ELEMETERHEAD_ID` bigint(20) default NULL COMMENT '电表表头ID',
`DAQDT` timestamp NULL default NULL COMMENT '数据采集时间',
`DLDT` timestamp NULL default NULL COMMENT '数据入库时间',
`APCURRENT` decimal(10,3) default NULL COMMENT 'A相电流。单位:A。',
`BPCURRENT` decimal(10,3) default NULL COMMENT 'B相电流。单位:A。',
`CPCURRENT` decimal(10,3) default NULL COMMENT 'C相电流。单位:A。',
`APVOLTAGE` decimal(10,3) default NULL COMMENT 'A相电压。单位:V。',
`BPVOLTAGE` decimal(10,3) default NULL COMMENT 'B相电压。单位:V。',
`CPVOLTAGE` decimal(10,3) default NULL COMMENT 'C相电压。单位:V。',
PRIMARY KEY (`ID`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='电路数据表';
5.
在target端建立link表,可以直接改写source表的sql脚本文件为:
DROP
TABLE IF EXISTS `e_eledata_link`;
CREATE TABLE `e_eledata_link`
(
`ID` bigint(20) unsigned NOT NULL auto_increment COMMENT 'ID',
`E_ELEMETERHEAD_ID` bigint(20) default NULL COMMENT '电表表头ID',
`DAQDT` timestamp NULL default NULL COMMENT '数据采集时间',
`DLDT` timestamp NULL default NULL COMMENT '数据入库时间',
`APCURRENT` decimal(10,3) default NULL COMMENT 'A相电流。单位:A。',
`BPCURRENT` decimal(10,3) default NULL COMMENT 'B相电流。单位:A。',
`CPCURRENT` decimal(10,3) default NULL COMMENT 'C相电流。单位:A。',
`APVOLTAGE` decimal(10,3) default NULL COMMENT 'A相电压。单位:V。',
`BPVOLTAGE` decimal(10,3) default NULL COMMENT 'B相电压。单位:V。',
`CPVOLTAGE` decimal(10,3) default NULL COMMENT 'C相电压。单位:V。',
PRIMARY KEY (`ID`)
) ENGINE=FEDERATEDAUTO_INCREMENT=1DEFAULT
CHARSET=utf8 COMMENT='电路数据表'
CONNECTION='mysql://usrname:password@192.168.1.98:3306/databasename/table
其中:
usrname为宿主机中MySQL的用户名
password为相应的密码
(要保证该用户具有远程登陆的权限,可以通过以下命令来设置:
mysql>GRANT ALL PRIVILEGES ON *.* TO 'usrname'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
其中*.*是指对用户开放所有数据库和表的权限,如果只开放某一个数据库的一个表为databasename.table;'%'指的是该用户可以从任意的一个ip地址来远程访问数据库,包括本地,如果要限制用户从特定的ip来访问,将其改为'ip地址')
192.168.1.98是source数据库的ip,这里为我宿主机的ip
3306为数据库的端口,默认一般为3306
database 和table分别为source端数据库的名称和表名称
将该sql脚本在target端运行
6. 实现跨本地数据库的访问
在target端通过访问e_eledata_link表来访问source端e_eledata表
mysql>
select *from e_eledata_link;
最近项目中涉及MySQL数据库视图的创建,需要整合两个位于不同服务器上数据库的内容,就遇到了远程访问数据库的问题。在cracle中可以通过dblink来实现跨本地数据库来访问另外一个数据库中的数据。通过在网上查找,发现可以通过MySQL中的federated插件来实现类似的功能。
操作环境:
宿主机为win8系统,MySQL数据库,ip:192.168.1.98;从机为VMware虚拟机中的Linux系统,版本为CentOS6.5,MySQL数据库,ip:192.168.1.106。
实现功能:
可以在Linux系统中MySQL数据库(target端)中建立宿主机MySQL数据库(source端)中某个表的link,当在Linux中读取link表时,就相当于直接读取宿主机中的原始表内容。
实现步骤:
1. 查看target端(Linux虚拟机中)是否安装了federated插件:
mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints
|
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| CSV | YES | CSV storage engine | NO | NO | NO
|
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO
|
| MyISAM | YES | MyISAM storage engine | NO | NO | NO
|
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO
|
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO
|
| FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL
|
| ARCHIVE | YES | Archive storage engine | NO | NO | NO
|
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES
|
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO
|
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
显示没有安装federated插件
2. 安装federated插件:
mysql>install
plugin federated soname 'ha_federated.so';
ERROR
1125 (HY000): Function 'federated' already exists
说明已经安装过了,但没有启用
[root@localhost
etc]# service mysql stop
[root@localhost
etc]# mysqld_safe --federated &
[root@localhost
etc]# 140811 01:20:
1161f
21 mysqld_safe Logging to '/var/lib/mysql/localhost.localdomain.err'.
140811 01:20:22 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
mysql>
show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| CSV | YES | CSV storage engine | NO | NO | NO |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| MyISAM | YES | MyISAM storage engine | NO | NO | NO |
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| FEDERATED |YES
| Federated MySQL storage engine | NULL | NULL | NULL |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
federated插件已经启用
3.
配置/etc/my.conf,设置federated为默认启动
[root@localhost
etc]# vi /etc/my.conf
在文件中加入一行:
federated
重启mysql服务
service
mysql restart
mysql>
show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| CSV | YES | CSV storage engine | NO | NO | NO |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| MyISAM | YES | MyISAM storage engine | NO | NO | NO |
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| FEDERATED | YES | Federated MySQL storage engine | NULL | NULL | NULL |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
已经设置为默认启动了。
4.
在source端建立测试表,我是通过Navicat建立表的,其sql文件为:
DROP
TABLE IF EXISTS `e_eledata`;
CREATE TABLE `e_eledata` (
`ID` bigint(20) unsigned NOT NULL auto_increment COMMENT 'ID',
`E_ELEMETERHEAD_ID` bigint(20) default NULL COMMENT '电表表头ID',
`DAQDT` timestamp NULL default NULL COMMENT '数据采集时间',
`DLDT` timestamp NULL default NULL COMMENT '数据入库时间',
`APCURRENT` decimal(10,3) default NULL COMMENT 'A相电流。单位:A。',
`BPCURRENT` decimal(10,3) default NULL COMMENT 'B相电流。单位:A。',
`CPCURRENT` decimal(10,3) default NULL COMMENT 'C相电流。单位:A。',
`APVOLTAGE` decimal(10,3) default NULL COMMENT 'A相电压。单位:V。',
`BPVOLTAGE` decimal(10,3) default NULL COMMENT 'B相电压。单位:V。',
`CPVOLTAGE` decimal(10,3) default NULL COMMENT 'C相电压。单位:V。',
PRIMARY KEY (`ID`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='电路数据表';
5.
在target端建立link表,可以直接改写source表的sql脚本文件为:
DROP
TABLE IF EXISTS `e_eledata_link`;
CREATE TABLE `e_eledata_link`
(
`ID` bigint(20) unsigned NOT NULL auto_increment COMMENT 'ID',
`E_ELEMETERHEAD_ID` bigint(20) default NULL COMMENT '电表表头ID',
`DAQDT` timestamp NULL default NULL COMMENT '数据采集时间',
`DLDT` timestamp NULL default NULL COMMENT '数据入库时间',
`APCURRENT` decimal(10,3) default NULL COMMENT 'A相电流。单位:A。',
`BPCURRENT` decimal(10,3) default NULL COMMENT 'B相电流。单位:A。',
`CPCURRENT` decimal(10,3) default NULL COMMENT 'C相电流。单位:A。',
`APVOLTAGE` decimal(10,3) default NULL COMMENT 'A相电压。单位:V。',
`BPVOLTAGE` decimal(10,3) default NULL COMMENT 'B相电压。单位:V。',
`CPVOLTAGE` decimal(10,3) default NULL COMMENT 'C相电压。单位:V。',
PRIMARY KEY (`ID`)
) ENGINE=FEDERATEDAUTO_INCREMENT=1DEFAULT
CHARSET=utf8 COMMENT='电路数据表'
CONNECTION='mysql://usrname:password@192.168.1.98:3306/databasename/table
其中:
usrname为宿主机中MySQL的用户名
password为相应的密码
(要保证该用户具有远程登陆的权限,可以通过以下命令来设置:
mysql>GRANT ALL PRIVILEGES ON *.* TO 'usrname'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
其中*.*是指对用户开放所有数据库和表的权限,如果只开放某一个数据库的一个表为databasename.table;'%'指的是该用户可以从任意的一个ip地址来远程访问数据库,包括本地,如果要限制用户从特定的ip来访问,将其改为'ip地址')
192.168.1.98是source数据库的ip,这里为我宿主机的ip
3306为数据库的端口,默认一般为3306
database 和table分别为source端数据库的名称和表名称
将该sql脚本在target端运行
6. 实现跨本地数据库的访问
在target端通过访问e_eledata_link表来访问source端e_eledata表
mysql>
select *from e_eledata_link;
相关文章推荐
- mysql 使用federated 引擎实现dblink 远程表访问
- mysql使用federated引擎实现dblink远程表访问
- mysql 使用federated 实现dblink 远程表访问
- 用mysql实现类似于oracle dblink的功能
- 用mysql实现类似于oracle dblink的功能
- MySQL的FEDERATED引擎实现类Oracle的DBlink
- mysql实现类似于oracle dblink的功能/开启Federated引擎
- mysql使用federated_实现类似oracle的dblink的功能
- mysql 用FEDERATED引擎实现DBLINK
- 如何才能实现MySQL的自动备份
- 使用函数递归实现基于php和MySQL的动态树型菜单
- 选择一定的日期oracle与mysql的实现
- Tomcat5.5链接Oracle、DB2、MySQL数据源实现JSP下拉框的填充
- PHP实现多服务器session共享之mysql共享
- 使用Mysql的Replication功能实现数据库同步
- 实现 win2003 下 mysql 数据库每天自动备份
- 二十行语句实现从Excel到mysql的转化
- 对Jbpm数据库应用的简单分析和在Mysql上实现的demo
- 在LINUX中实现JSP联接MYSQL初级教程
- PHP中利用mysql进行访问统计的思路和实现代码