配置文件

v2.2.0版本开始,使用link进行数据库配置时,数据库组件统一了不同数据库类型的配置格式,以简化配置管理。

简化配置通过配置项link指定,格式如下:

即:

  1. 类型:账号:密码@协议(地址)/数据库名称?特性配置

其中:

  • 数据库名称特性配置为非必须参数,其他参数为必须参数。
  • 协议可选配置为:tcp/udp/file,常见配置为tcp
  • 特性配置根据不同的数据库类型,由其底层实现的第三方驱动定义,具体需要参考第三方驱动官网。例如,针对mysql驱动而言,使用的第三方驱动为:https://github.com/go-sql-driver/mysql 支持的特性配置如multiStatementsloc等。

示例:

  1. database:
  2. default:
  3. link: "mysql:root:12345678@tcp(127.0.0.1:3306)/test"
  4. user:
  5. link: "sqlite::@file(/var/data/db.sqlite3)"

不同数据类型对应的link示例如下:

框架支持的数据库类型请参考:

完整配置

完整的config.yaml数据库配置项的数据格式形如下:

完整的数据库配置项示例(YAML):

  1. database:
  2. default:
  3. host: "127.0.0.1"
  4. port: "3306"
  5. user: "root"
  6. pass: "12345678"
  7. name: "test"
  8. type: "mysql"
  9. role: "master"
  10. debug: "true"
  11. dryrun: 0
  12. weight: "100"
  13. prefix: "gf_"
  14. timezone: "local"
  15. maxIdle: "10"
  16. maxOpen: "100"
  17. maxLifetime: "30s"

使用该配置方式时,为保证数据库安全,默认底层不支持多行SQL语句执行。为了得到更多配置项控制,请参考推荐的简化配置,同时建议您务必了解清楚简化配置项中每个连接参数的功能作用。

gdb的配置支持集群模式,数据库配置中每一项分组配置均可以是多个节点,支持负载均衡权重策略,例如:

  1. database:
  2. default:
  3. - link: "mysql:root:12345678@tcp(127.0.0.1:3306)/test"
  4. role: "master"
  5. - link: "mysql:root:12345678@tcp(127.0.0.1:3306)/test"
  6. role: "slave"
  7. user:
  8. - link: "mysql:root:12345678@tcp(127.0.0.1:3306)/user"
  9. role: "master"
  10. - link: "mysql:root:12345678@tcp(127.0.0.1:3306)/user"
  11. role: "slave"
  12. - link: "mysql:root:12345678@tcp(127.0.0.1:3306)/user"
  13. role: "slave"

以上数据库配置示例中包含两个数据库分组defaultuser,其中default分组包含一主一从,user分组包含一主两从。在代码中可以通过g.DB()g.DB("user")获取对应的数据库连接对象。

日志配置

gdb支持日志输出,内部使用的是glog.Logger对象实现日志管理,并且可以通过配置文件对日志对象进行配置。默认情况下gdb关闭了DEBUG日志输出,如果需要打开DEBUG信息需要将数据库的debug参数设置为true。以下是为一个配置文件示例:

其中database.logger即为gdb的日志配置,当该配置不存在时,将会使用日志组件的默认配置,具体请参考 章节。

原生配置(高阶,可选)

以下为数据库底层管理配置介绍,如果您对数据库的底层配置管理比较感兴趣,可继续阅读后续章节。

gdb数据库管理模块的内部配置管理数据结构如下:

ConfigNode用于存储一个数据库节点信息;用于管理多个数据库节点组成的配置分组(一般一个分组对应一个业务数据库集群);Config用于管理多个ConfigGroup配置分组。

配置管理特点:

  1. 支持多节点数据库集群管理;
  2. 每个节点可以单独配置连接属性;
  3. 采用单例模式管理数据库实例化对象;
  4. 支持对数据库集群分组管理,按照分组名称获取实例化的数据库操作对象;
  5. 支持多种关系型数据库管理,可通过ConfigNode.Type属性进行配置;
  6. 支持Master-Slave读写分离,可通过ConfigNode.Role属性进行配置;
  7. 支持客户端的负载均衡管理,可通过ConfigNode.Weight属性进行配置,值越大,优先级越高;
  1. type Config map[string]ConfigGroup // 数据库配置对象
  2. type ConfigGroup []ConfigNode // 数据库分组配置
  3. // 数据库配置项(一个分组配置对应多个配置项)
  4. type ConfigNode struct {
  5. Host string // 地址
  6. User string // 账号
  7. Pass string // 密码
  8. Name string // 数据库名称
  9. Type string // 数据库类型:mysql, sqlite, mssql, pgsql, oracle
  10. Link string // (可选)自定义链接信息,当该字段被设置值时,以上链接字段(Host,Port,User,Pass,Name)将失效(该字段是一个扩展功能)
  11. Extra string // (可选)不同数据库的额外特性配置,由底层数据库driver定义
  12. Role string // (可选,默认为master)数据库的角色,用于主从操作分离,至少需要有一个master,参数值:master, slave
  13. Debug bool // (可选)开启调试模式
  14. Charset string // (可选,默认为 utf8)编码,默认为 utf8
  15. Prefix string // (可选)表名前缀
  16. Weight int // (可选)用于负载均衡的权重计算,当集群中只有一个节点时,权重没有任何意义
  17. MaxIdleConnCount int // (可选)连接池最大闲置的连接数
  18. MaxOpenConnCount int // (可选)连接池最大打开的连接数
  19. MaxConnLifetime time.Duration // (可选,单位秒)连接对象可重复使用的时间长度
  20. }

特别说明,gdb的配置管理最大的特点是,(同一进程中)所有的数据库集群信息都使用同一个配置管理模块进行统一维护,不同业务的数据库集群配置使用不同的分组名称进行配置和获取。

配置方法

这是原生调用gdb模块来配置管理数据库。如果开发者想要自行控制数据库配置管理可以参考以下方法。若无需要可忽略该章节。

接口文档:

  1. // 添加一个数据库节点到指定的分组中
  2. func AddConfigNode(group string, node ConfigNode)
  3. // 添加一个配置分组到数据库配置管理中(同名覆盖)
  4. func AddConfigGroup(group string, nodes ConfigGroup)
  5. // 添加一个数据库节点到默认的分组中(默认为default,可修改)
  6. func AddDefaultConfigNode(node ConfigNode)
  7. // 添加一个配置分组到数据库配置管理中(默认分组为default,可修改)
  8. func AddDefaultConfigGroup(nodes ConfigGroup)
  9. // 设置默认的分组名称,获取默认数据库对象时将会自动读取该分组配置
  10. func SetDefaultGroup(groupName string)
  11. // 设置数据库配置为定义的配置信息,会将原有配置覆盖
  12. func SetConfig(c Config)

默认分组表示,如果获取数据库对象时不指定配置分组名称,那么gdb默认读取的配置分组。例如:gdb.NewByGroup()可获取一个默认分组的数据库对象。简单的做法,我们可以通过gdb包的配置管理方法进行自定义的数据库全局配置,例如: