以下是mysql_users表的属性。
| 字段名 | 数据类型 | 可为空? | 默认值 | |-----------------------|---------|----------|-------| |username (pk,uk) | VARCHAR | NOT NULL | | |password | VARCHAR | NULL | | |active | INT | NOT NULL | 1 | |use_ssl | INT | NOT NULL | 0 | |default_hostgroup | INT | NOT NULL | 0 | |default_schema | VARCHAR | NULL | | |schema_locked | INT | NOT NULL | 0 | |transaction_persistent | INT | NOT NULL | 1 | |fast_forward | INT | NOT NULL | 0 | |backend (pk) | INT | NOT NULL | 1 | |frontend (uk) | INT | NOT NULL | 1 | |max_connections | INT | NOT NULL | 10000 |各字段的意义:
username, password:前端连接到ProxySQL以及ProxySQL连接到后端时使用的用户凭据。
active:active=0的用户会保留在库中,但不会加载到runtime数据结构中,只有active=1用户才是有效用户。该字段默认值为1。
default_hostgroup:如果该用户发送的查询语句无法匹配任何规则,则该查询会路由到该字段指定的默认组中。
default_schema:建立连接时默认将切换到该schema。
schema_locked:目前还不支持该功能。
transaction_persistent:如果正在和ProxySQL建立连接的客户端使用的用户设置了该字段,那么当该用户开启一个事务后,该客户端后续的请求都将路由到同一主机组中(无视查询规则),使得事务在这个组中是持久的,避免同一事务分散到其它组,直到事务结束才可能会路由到其它主机组。注意,有些老版本中,这个字段默认值为0,强烈建议修改为1。
fast_forward:如果设置了该字段,ProxySQL将绕过查询处理层(重写语句、缓存),直接将原请求语句转发给后端节点。
frontend:如果设置为1,前端将可以使用该用户(username,password)连接到ProxySQL。
backend:如果设置为1,ProxySQL将可以使用该用户(username,password)连接到后端节点。
max_connections:使用该用户"建立到ProxySQL的连接"的最大数量。默认值为10000,所以每个用户最多和ProxySQL建立10000个连接。注意,这是前端到ProxySQL的连接限制,ProxySQL和某个后端节点的最大连接数量是通过mysql_servers中的max_connections字段控制的。
注意,当前版本的ProxySQL要求所有的用户均设置frontend和backend为1(即所有用户都可以进行frontend --> ProxySQL以及ProxySQL --> backend的连接认证)。将来版本中,ProxySQL将分离这两部分连接的用户凭据。这样前端将永远不知道后端的用户凭据,它们只能通过中间的ProxySQL发送请求,无法直接和后端节点建立连接,从而提高安全性。
关于快速转发fast_forward:
不要求用一个不同的端口:正常的ProxySQL逻辑和"fast forward"的逻辑使用的是完全相同的代码/模块。
fast forward是基于每用户的:根据连接到ProxySQL用户的设置,决定该用户是否启用、禁用fast forward功能。
fast forward算法的启用是在用户认证之后:ProxySQL仍然需要先对客户端使用的用户进行认证,尽管客户端的请求会直接原样转发给后端,但ProxySQL仍然会和前端先建立好连接。这意味着,如果前端和ProxySQL的连接发生错误,也会被处理。
fast forward不支持SSL连接。
如果使用压缩功能,必须在两端都启用压缩。
4.4 事务持久化:transaction_persistentmysql_users表中的transaction_persistent字段,当它的值为1时,表示事务持久化:当某连接使用该用户开启了一个事务后,那么在事务提交/回滚之前,所有的语句都路由到同一个组中,避免语句分散到不同组。在以前的版本中,默认值为0,不知道从哪个版本开始,它的默认值为1。我们期望的值为1,所以强烈建议插入用户后先检查下这个字段的值是否为1,如果为0,则执行下面的语句修改为1。
update mysql_users set transaction_persistent=1 where username='root'; update mysql_users set transaction_persistent=1 where username='sqlsender'; load mysql users to runtime; save mysql users to disk; 5.总结添加后端节点、监控后端节点、添加MySQL用户是使用ProxySQL所必须完成的步骤。这3个步骤虽然需要操作的过程不多,但是涉及的内容还是比较多的。
强烈建议将mysql_servers、mysql_users、mysql_replication_hostgroups这3个表的所有字段都了解一遍。不仅如此,要熟练使用ProxySQL,还应该对main库中的表的各个字段都比较熟悉,至少要知道它们什么意思。