背景
现在一般使用的数据库都是mysql,微服务架构中, 分库分表是标配, 不同的数据源可能部署在不同的服务器, 联合查询就需要跨库连表查询, 常见做法:
1表冗余, 这样需要维护表的数据, 同步数据.相当于多存一份数据
2查单表, 然后组装, 这样需要的开发量大, 并且分页查询很不好处理
如果你用的是MySQL数据库, 那么有一种更快捷省时省力的方式, 就是:
给远程表创建一个快捷方式.同于方法1的区别是, 这里只是引用, 而不需要复制一份数据.
开启mysql 表的快捷方式:
1 开启你的FEDERATED引擎
查询你的使用的mysql数据库的FEDERATED引擎有没有开启。
SHOWENGINES;
如果没有开启, 则修改一下mysql数据库的配置文件
windows修改 my.ini文件 Linux修改my.cnf文件
在配置文件末尾加上 federated
2 重启msyql 服务器
windows重启mysql服务命令
netstop mysql netstart mysql
linux重启mysql服务命令
servicemysqld restart
3 快捷表的创建
远程源表
本地快捷表
CREATETABLE`barang`( `id_barang`INT(255) NOTNULL, `id_kategori`INT(255) NULLDEFAULTNULL, `nama_barang`VARCHAr(255) NULLDEFAULTNULLCOLLATE’latin1_swedish_ci’, `harga`INT(255) NULLDEFAULTNULL, `stok`INT(255) NULLDEFAULTNULL, PRIMARY KEY(`id_barang`) USINGBTREE )ENGINE=FEDERATED CONNECTION=’mysql://username:[email protected]:3306/tets/test;
说明: 这里和普通建表语句的区别在于: ENGINE 的写法
查询
查询时,就可以像本地查询一样. 可以看见本地的数据将远程的数据也引用过来了
跨服务器的跨库查询特点:
1.该跨库查询方式不支持事务,所有涉及到事务的操作,不要用这种方式。
2.不能修改表的结构, 只是查询使用。
3.MySQL使用这种跨库查询方式,远程数据库目前仅支持MySQL,其他数据库不支持。
4.表结构必须和目标数据库表完全一致。
写在最后
掌握了这种方法后, 以后可以查询远程表像在本地查询一样. 跨库查询再也不会头疼了. 希望对大家有所帮助,如果你有更好的方式,欢迎大家评论, 交流.