05_ProxySQL配置之Users配置
备注:文章编写时间201904-201905期间,后续官方在github的更新没有被写入 ~ ~
一、用户配置[Users Configuration]
用户在mysql_users中配置。
友情提醒:在阅读下部分之前,请确保了解了ProxySQL使用的多层配置系统。
特别注意: 1)如果没有运行LOAD MYSQL USERS TO RUNTIME,那么mysql_users表中的更改不会生效; 2)如果没有运行SAVE MYSQL USERS TO DISK 保存配置到的磁盘,那么mysql_users表中的更改将在重启/崩溃后丢失。
二、将MySQL用户配置信息从MEMORY层复制到RUNTIME层[Copying mysql users from memory to runtime]
将MySQL用户配置信息从MEMORY层数据库加载到RUNTIME层数据结构:
Admin> LOAD MYSQL USERS TO RUNTIME;
其他可被接受的别名操作:
Admin> LOAD MYSQL USERS TO RUN;
Admin> LOAD MYSQL USERS FROM MEM;
Admin> LOAD MYSQL USERS FROM MEMORY;
三、将MySQL用户配置信息从MEMORY层复制到DISK层[Copying mysql users from memory to disk]
将MySQL用户配置信息从MEMORY层数据库中保留到DISK层数据库:
Admin> SAVE MYSQL USERS TO DISK;
其他可被接受的别名操作:
Admin> SAVE MYSQL USERS FROM MEM;
Admin> SAVE MYSQL USERS FROM MEMORY;
四、将MySQL用户配置信息从RUNTIME层复制到MEMORY层[Copying mysql users from runtime to memory]
将MySQL用户配置信息从RUNTIME层数据结构中保留到MEMORY层数据库中:
Admin> SAVE MYSQL USERS TO MEMORY;
其他可被接受的别名操作:
Admin> SAVE MYSQL USERS TO MEM;
Admin> SAVE MYSQL USERS FROM RUN;
Admin> SAVE MYSQL USERS FROM RUNTIME;
五、将MySQL用户配置信息从DISK层复制到MEMORY层[Copying mysql users from disk to memory]
将MySQL用户配置信息从DISK层数据库加载到MEMORY层数据库:
Admin> LOAD MYSQL USERS TO MEMORY;
其他可被接受的别名操作:
Admin> LOAD MYSQL USERS TO MEM;
Admin> LOAD MYSQL USERS FROM DISK;
六、使用加密密码[Using encrypted passwords]
ProxySQL支持hash处理后的密码,详情参看Password management部分(06_ProxySQL配置之密码管理)。 在后面的示例中,使用的是明文密码。虽然这对于测试是可接受的,但它不适合生产。对于生产,应该只能使用hash后的密码散列。
七、创建新用户[Creating a new user]
为了创建新用户,必须在mysql_users表中插入对应的新行。 注意,该表有几列是有默认值的。
Admin> SELECT * FROM mysql_users;
Empty set (0.00 sec)
Admin> INSERT INTO mysql_users(username,password) VALUES ('user01','password01');
Query OK, 1 row affected (0.00 sec)
Admin> SELECT * FROM mysql_users\G;
*************************** 1. row ***************************
username: user01
password: password01
active: 1
use_ssl: 0
default_hostgroup: 0
default_schema: NULL
schema_locked: 0
transaction_persistent: 1
fast_forward: 0
backend: 1
frontend: 1
max_connections: 10000
comment:
1 row in set (0.00 sec)
ERROR:
No query specified
八、创建不使用默认值的新用户[create a new user changing several defaults]
在此示例中,将创建一个新用户: 1)使用dbtest01作为默认(连入)的数据库; 2)默认情况下,将连接到主机组10(主机组十)中的主机。
Admin> SELECT username,password,default_hostgroup,default_schema FROM mysql_users;
+----------+------------+-------------------+----------------+
| username | password | default_hostgroup | default_schema |
+----------+------------+-------------------+----------------+
| user01 | password01 | 0 | NULL |
+----------+------------+-------------------+----------------+
1 row in set (0.00 sec)
Admin> INSERT INTO mysql_users(username,password,default_hostgroup,default_schema) VALUES ('user02','password02',10,'dbtest01');
Query OK, 1 row affected (0.00 sec)
Admin> SELECT username,password,default_hostgroup,default_schema FROM mysql_users;
+----------+------------+-------------------+----------------+
| username | password | default_hostgroup | default_schema |
+----------+------------+-------------------+----------------+
| user01 | password01 | 0 | NULL |
| user02 | password02 | 10 | dbtest01 |
+----------+------------+-------------------+----------------+
2 rows in set (0.00 sec)
九、为proxysql创建用户连最大接数限制[Limiting the number of connections a user can create to proxysql]
示例:
Admin> SELECT username,max_connections FROM mysql_users;
+----------+-----------------+
| username | max_connections |
+----------+-----------------+
| user01 | 10000 |
| user02 | 10000 |
+----------+-----------------+
2 rows in set (0.00 sec)
Admin> UPDATE mysql_users SET max_connections=100 WHERE username='user02';
Query OK, 1 row affected (0.00 sec)
Admin> SELECT username,max_connections FROM mysql_users;
+----------+-----------------+
| username | max_connections |
+----------+-----------------+
| user01 | 10000 |
| user02 | 100 |
+----------+-----------------+
2 rows in set (0.00 sec)
十、禁用跨组执行事务[Disabling routing across hostgroups once a transaction has started for a specific user]
一旦针对特定用户启动了事务,就禁用跨主机组的路由
启动事务后,可能会根据查询规则将某些查询发送到其他主机组。为了防止这种情况发生,可以启用transaction_persistent(默认启用)。
示例:
Admin> SELECT username, transaction_persistent FROM mysql_users;
+----------+------------------------+
| username | transaction_persistent |
+----------+------------------------+
| user01 | 1 |
| user02 | 0 |
+----------+------------------------+
2 rows in set (0.00 sec)
Admin> UPDATE mysql_users SET transaction_persistent=1 WHERE username='user02';
Query OK, 1 row affected (0.00 sec)
Admin> SELECT username, transaction_persistent FROM mysql_users;
+----------+------------------------+
| username | transaction_persistent |
+----------+------------------------+
| user01 | 1 |
| user02 | 1 |
+----------+------------------------+
2 rows in set (0.00 sec)
完毕!