目标:1.Mysql federated+存储过程+java+定时任务 实现”建行贷后管理提数” 自动化
2.Mysql federated+存储过程+shell 实现”建行贷后管理提数” 半自动化
federated存储引擎实现跨服务器的数据访问
.数据库之间的跨服务器访问在实际的工作中经常用到,最常见的是不同数据库的数据比对和数据抽取。
针对这个需求ORACLE可以通过透明网关和DBLINK的方式来实现;MySQL提供了存储引擎federated可以实现该功能;
一.实现原理
Federated,能够将多个分离(不在同一台服务器上的机器)的MySQL服务器链接起来,从多个物理服务器
创建一个逻辑数据库
二.实现
本地测试机: 远程测试机:
IP: 172.16.101.27 IP: 172.16.34.129
表名: local_table 表名: remote_table
1.查看数据库服务器是否支持"FEDERATED"存储引擎
.show engines;
.为服务器开启"FEDERATED"存储引擎
windows环境:
E:\MyProgram\mysql-5.6.10-winx64\my.ini 文件中添加federated 如下:
[mysqld]
##开启"FEDERATED"存储引擎
federated
Linux环境:
.配置文件的位置一般在/etc/my.cnf
.具体怎么找
[root@localhost ~]# which mysqld
/usr/sbin/mysqld
[root@localhost ~]# /usr/sbin/mysqld --verbose --help|grep -A 1 'Default options';
Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf
选/etc/my.cnf 文件中添加 federated 如windows举例
.重启Mysql
2.创建表
.CREATE TABLE `remote_table` (
`user_id` int(11) NOT NULL COMMENT '用户ID',
`user_name` varchar(255) NOT NULL COMMENT '用户名',
PRIMARY KEY (`user_id`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into remote_table values('1231','dj1');
insert into remote_table values('1232','dj2');
insert into remote_table values('1233','dj3');
CREATE TABLE `local_table` (
`user_id` int(11) NOT NULL COMMENT '用户ID',
`user_name` varchar(255) NOT NULL COMMENT '用户名',
PRIMARY KEY (`user_id`)
)ENGINE=FEDERATED DEFAULT CHARSET=utf8
CONNECTION='mysql://root:123456@172.16.101.27:3306/zhifu/remote_table'
三.相关问题
.本地数据库服务必须支持”FEDERATED”存储引擎,远程服务器可以不支持,远程数据库目前仅限MySQL
.”FEDERATED”存储引擎是从MySQL5.0开始支持的
.本地的表结构必须与远程的完全一致,操作本地库中的远程表,就是操作远程库中对应的数据库表,
所以在本地库中对应远程表的操作(增、删、改),均为反应都对应的远程表中。
.本地服务器与远程服务器在同一网段,延迟与网速和服务器性能有关.
.由于是跨主机的访问,当表数据量级别达到十万以上的时候,整个访问的速度相对本机有明显的效率问题。