强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan
现在在做的项目分为7个服务,其中有一个单表服务,对应的数据库有一张表存储的是单表的数据,其他服务用到这张表基本是需要将本服务的表中对应的id转换为对应的name。项目初期没有分库分表,但是项目稳定一版后,架构方面考虑分库分表,这样就涉及到一个服务在开发阶段不能随意连接其他服务的表进行操作,为了解决此问题,我们考虑将单表服务的表远程映射到其他服务的数据库中,这样做,当单表服务的数据有变动时,其他服务对应的单表数据表数据也会同步!
使用navicat连接mysql之后,F6键打开命令行界面,输入指令:show engines;
①mysql -uroot -proot 连接mysql
②查看mysql的安装目录和数据存放路径
③找到mysql的数据存放路径,会找到相应的my.ini文件,如果找到之后叫其他的名字,可以改名为my.ini,打开my.ini文件在其中加上federated
3.重启mysql服务
①快捷键win+X+G打开计算机管理,找到mysql的服务,将mysql的服务停掉之后再启动
现在假设有两套库,一套在服务器192.168.22.10上,一套在我本地127.0.0.1上,将单表服务分在服务器上,我本地数据库上没有单表的数据表,只有我们本服务的表。服务器上的数据库名称叫itoo,单表有一张表叫t_dictionary,现在将服务器上的t_dictionary表映射到我本地库中,在我本地,连接mysql,执行以下命令:
CREATE TABLE `t_dictionary` (
`id` varchar(22) NOT NULL,
`operator` varchar(20) DEFAULT NULL COMMENT '操作人',
`is_delete` tinyint(2) DEFAULT NULL COMMENT '是否删除',
`dictionary_code` varchar(20) DEFAULT NULL COMMENT '字典code',
`dictionary_name` varchar(20) DEFAULT NULL COMMENT '字典类型名称',
`timespan` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '时间戳',
PRIMARY KEY (`id`),
KEY `FK_9wjh2c0vbqiu5qdgnhay8t9le` (`dictionary_type_id`) USING BTREE
) ENGINE=FEDERATED
CONNECTION='mysql://admin:[email protected]:3306/itoo/t_dictionary';
其中创建的表结构要和服务器上的一模一样,ENGINE为FEDERATED,CONNECTION中的admin:admin表示服务器的用户名:密码,itoo是服务器上的数据库名称,t_dictionary是服务器上的表名称,执行完之后,在本地库中将看到t_dictionary表已经映射过来了。
在服务器上将这张映射的表修改一条数据,会发现本地库中这张映射过来的表数据同时改变了!到此基本可以确定这样远程映射表是成功了!我将代码中的数据库地址修改为我本地,执行某个接口的查询操作,成功查询回正确的结果,标明远程映射表成功!