用户认证
用户账号如果需要使用数据库代理登录,则必须赋予账号远程登录权限,否则无法通过数据库读写分离访问。
操作步骤
1、连接GaussDB(for MySQL)实例。
2、实例连接成功后,执行下列SQL语句,查看使用的账号的host是否包含数据库读写分离地址。
SELECT user,host FROM mysql.user;
读写分离地址获取方式:
-
登录管理控制台。
-
单击管理控制台左上角的,选择区域和项目。
-
在页面左上角单击,选择“数据库 > 云数据库 GaussDB(for MySQL)”。
-
在“实例管理”页面,选择目标实例,单击实例名称,进入实例的“基本信息”页面。
-
在左侧导航栏,单击“数据库代理”。
方法一:在“数据库代理”页面中,在“代理地址”模块“链接地址”,获取当前实例的数据库读写分离地址。
方法二:在“读写分离”页面中,在“读写分离信息”模块“读写分离地址”处,获取当前实例的数据库读写分离地址。
3、如果查询的host不包含数据库代理所在网段,则需要赋予远程访问权限。例如root用户从192.168.0网段连接到GaussDB(for MySQL)服务器:
GRANT
ALL PRIVILEGES ON . TO 'root'@'192.168.0.%' IDENTIFIED BY password WITH GRANT OPTION;
flush privileges;
4、当修改安全组时,确保入方向规则和出方向规则允许读写分离的地址访问,读写分离默认端口号为3306。
-
登录管理控制台。
-
单击管理控制台右上角的,选择Region。
-
在页面左上角单击,选择“数据库 > 云数据库 GaussDB(for MySQL)”。
-
在“实例管理”页面,选择目标实例,单击实例名称,进入实例的“基本信息”页面。
-
在“基本信息”页面中,在“网络信息”模块的“内网安全组”处,单击安全组名称,进入安全组页面。
-
在入方向规则页签下,默认允许3306端口访问。如果没有该条规则,单击“快速添加规则”,弹框页面中勾选“MySQL(3306)”,单击“确定”。
图 放通3306端口
图 快速添加3306端口
说明当您使用MySQL8.0客户端访问数据库读写分离时,可能会报错auth user failed。
在连接数据库时添加 --default-auth=mysql_native_password。
连接池设置
使用连接池时,需要设置连接探活机制,确保部分连接超时断开时不会被继续使用。
- jdbc连接池和Druid连接池设置:
testOnBorrow=true,
- HikariCP连接池设置:
connectionTestQuery=”SELECT 1”
读请求路由到主实例的场景
- 如果查询语句被放在事务中,事务请求都会路由到主实例。如果在查询语句前设置set autocommit=0时也当做事务处理路由到主实例。
- 如果所有只读节点都均异常或只读节点权重为0时,则查询会路由到主实例。对于成功开启读写分离功能的实例,您可以设置其主实例和只读实例的权重。具体操作请参见读写分离权重。
- 在执行SQL语句时:
如果执行了Multi-Statements(如“ insert xxx;select xxx ”),当前连接的后续请求会全部路由到主节点,需断开当前连接并重新连接才能恢复读写分离。
带锁的读操作(如SELECT for UPDATE)会被路由到主节点。
当使用 / FORCE_MASTER / 这个Hint语句时,会被路由到主实例。