Golang Go语言中 go-sql-driver/mysql 支持读写分离吗

查看官方文档没找到主从配置, 是不是需要自己实现该功能?

如果没有相关配置,有什么推荐的 mysql 包吗,orm 类的暂时不需要。


Golang Go语言中 go-sql-driver/mysql 支持读写分离吗
12 回复

没 可以初始化两个 DB 实例,读写用不同的 DB 实例去操作

更多关于Golang Go语言中 go-sql-driver/mysql 支持读写分离吗的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


明白了

应该没有,云上都是 vip 自动做了,自建 db server 的吗?

现在 mysql 是 1 主 3 从,没有前置 vip,想自己来控制读写。

读写分离,其实就是根据 sql 来控制调用哪个 db 的连接,自己使用的话手动选择一下就行了。

想请教一下,vip 不是用于三层冗余度吗?为什么能实现 mysql 的读写分离呢?还是说这个地儿的 vip 指的是广义上的四七层负载呢?感谢。



就是个 fake mysql 。实现了 mysql 的协议,可以用 mysql 客户端连上,可以解析出来 sql 。根据 sql 前五个字符来判断是 select 就走从库,insert/update/delete 就走主库。

当然就是简单这么一说啊,真正实现还要考虑事物、预处理、健康检查、虚拟表映射等等等等

比如 https://blog.csdn.net/weixin_39594296/article/details/113555158 这个。就是用 go 实现的是 mysql 服务器。可以用 php/go/python/java 等连接。

感谢解答,我还以为 vip 有什么骚操作我没查到呢😂

就是一个代理,分析你的 sql 再决定转发目标读写库

可以试试看 mycat 这样的中间件

在Golang(Go语言)中,go-sql-driver/mysql 本身是一个纯粹的MySQL驱动,它并不直接支持数据库读写分离功能。然而,开发者可以通过一些编程技巧和额外的库来实现这一功能。

要实现读写分离,通常的做法是配置多个数据库连接池,一个用于主数据库(处理写操作),另一个或多个用于从数据库(处理读操作)。go-sql-driver/mysql 可以作为这些连接池的底层驱动。

在实际应用中,可以使用像 GORM 这样的ORM库来简化数据库操作,并借助其提供的读写分离功能。GORM 允许为读写操作分别设置主从数据库,并通过 DB().UseMaster()DB().UseSlave() 方法在读写数据库之间切换。

以下是一个简化的示例流程:

  1. 使用 go-sql-driver/mysql 驱动连接到主数据库和从数据库。
  2. 通过 GORM 库的 SetMasterDBSetSlaveDB 方法设置主从数据库。
  3. 在执行数据库操作时,根据需要调用 UseMasterUseSlave 方法来切换数据库。

通过这种方式,开发者可以在Go语言中实现MySQL数据库的读写分离,从而提高数据库的整体性能和系统的稳定性。

回到顶部