Preface
I've implemented ProxySQL on PXC yesterday but got some errors when configured query rules.I'm gonna do it again in my master-slave environment again.Let's see the procedure.
Procedure
Start ProxySQL.
1 [root@zlm1 17:22:46 /var/lib] 2 #service proxysql start 3 Starting ProxySQL: ProxySQL is already running. 4 5 [root@zlm1 17:23:16 /var/lib] 6 #ps aux|grep proxysql 7 root 666 0.0 0.5 58180 5180 ? S 15:06 0:00 proxysql -c /etc/proxysql.cnf -D /var/lib/proxysql 8 root 667 0.0 2.0 104152 21068 ? Sl 15:06 0:02 proxysql -c /etc/proxysql.cnf -D /var/lib/proxysql 9 root 5523 0.0 0.0 112640 960 pts/1 R+ 15:55 0:00 grep --color=auto proxysql
Login ProxySQL configure the hostgroups.
1 [root@zlm1 17:27:11 ~] 2 #mysql -uadmin -padmin -h127.0.0.1 -P6032 3 mysql: [Warning] Using a password on the command line interface can be insecure. 4 Welcome to the MySQL monitor. Commands end with ; or g. 5 Your MySQL connection id is 1 6 Server version: 5.5.30 (ProxySQL Admin Module) 7 8 Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 9 10 Oracle is a registered trademark of Oracle Corporation and/or its 11 affiliates. Other names may be trademarks of their respective 12 owners. 13 14 Type 'help;' or 'h' for help. Type 'c' to clear the current input statement. 15 16 admin@127.0.0.1:6032 [(none)]>select * from mysql_replication_hostgroups; 17 Empty set (0.00 sec) 18 19 admin@127.0.0.1:6032 [(none)]>insert into mysql_replication_hostgroups(writer_hostgroup,reader_hostgroup) values(10,20); 20 Query OK, 1 row affected (0.00 sec) 21 22 admin@127.0.0.1:6032 [(none)]>select * from mysql_replication_hostgroups; 23 +------------------+------------------+---------+ 24 | writer_hostgroup | reader_hostgroup | comment | 25 +------------------+------------------+---------+ 26 | 10 | 20 | | 27 +------------------+------------------+---------+ 28 1 row in set (0.00 sec) 29 30 admin@127.0.0.1:6032 [(none)]>select * from runtime_mysql_replication_hostgroups; 31 Empty set (0.00 sec) 32 33 admin@127.0.0.1:6032 [(none)]>select * from disk.mysql_replication_hostgroups; 34 Empty set (0.00 sec) 35 36 admin@127.0.0.1:6032 [(none)]>load mysql servers to runtime;save mysql servers to disk; 37 Query OK, 0 rows affected (0.00 sec) 38 39 admin@127.0.0.1:6032 [(none)]>select * from runtime_mysql_replication_hostgroups; 40 +------------------+------------------+---------+ 41 | writer_hostgroup | reader_hostgroup | comment | 42 +------------------+------------------+---------+ 43 | 10 | 20 | | 44 +------------------+------------------+---------+ 45 1 row in set (0.00 sec) 46 47 admin@127.0.0.1:6032 [(none)]>select * from disk.mysql_replication_hostgroups; 48 +------------------+------------------+---------+ 49 | writer_hostgroup | reader_hostgroup | comment | 50 +------------------+------------------+---------+ 51 | 10 | 20 | | 52 +------------------+------------------+---------+ 53 1 row in set (0.00 sec)
Configure the mysql servers.
1 admin@127.0.0.1:6032 [(none)]>select * from mysql_servers; 2 Empty set (0.00 sec) 3 4 admin@127.0.0.1:6032 [(none)]>insert into mysql_servers(hostgroup_id,hostname,max_connections,max_replication_lag) values(10,'192.168.56.100',100,300); 5 Query OK, 1 row affected (0.00 sec) 6 7 admin@127.0.0.1:6032 [(none)]>insert into mysql_servers(hostgroup_id,hostname,max_connections,max_replication_lag) values(20,'192.168.56.101',100,300); 8 Query OK, 1 row affected (0.00 sec) 9 10 admin@127.0.0.1:6032 [(none)]>select * from mysql_servers; 11 +--------------+----------------+------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+ 12 | hostgroup_id | hostname | port | status | weight | compression | max_connections | max_replication_lag | use_ssl | max_latency_ms | comment | 13 +--------------+----------------+------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+ 14 | 10 | 192.168.56.100 | 3306 | ONLINE | 1 | 0 | 100 | 300 | 0 | 0 | | 15 | 20 | 192.168.56.101 | 3306 | ONLINE | 1 | 0 | 100 | 300 | 0 | 0 | | 16 +--------------+----------------+------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+ 17 2 rows in set (0.00 sec) 18 19 admin@127.0.0.1:6032 [(none)]>select * from runtime_mysql_servers; 20 Empty set (0.00 sec) 21 22 admin@127.0.0.1:6032 [(none)]>select * from disk.mysql_servers; 23 Empty set (0.00 sec) 24 25 admin@127.0.0.1:6032 [(none)]>load mysql servers to runtime;save mysql servers to disk; 26 Query OK, 0 rows affected (0.00 sec) 27 28 Query OK, 0 rows affected (0.05 sec) 29 30 admin@127.0.0.1:6032 [(none)]>select * from runtime_mysql_servers; 31 +--------------+----------------+------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+ 32 | hostgroup_id | hostname | port | status | weight | compression | max_connections | max_replication_lag | use_ssl | max_latency_ms | comment | 33 +--------------+----------------+------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+ 34 | 20 | 192.168.56.101 | 3306 | ONLINE | 1 | 0 | 100 | 300 | 0 | 0 | | 35 | 20 | 192.168.56.100 | 3306 | ONLINE | 1 | 0 | 100 | 300 | 0 | 0 | | 36 +--------------+----------------+------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+ 37 2 rows in set (0.00 sec) 38 39 //Why does the hostgroup_id in table "runtime_mysql_servers" still "20"? 40 41 admin@127.0.0.1:6032 [(none)]>select * from disk.mysql_servers; 42 +--------------+----------------+------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+ 43 | hostgroup_id | hostname | port | status | weight | compression | max_connections | max_replication_lag | use_ssl | max_latency_ms | comment | 44 +--------------+----------------+------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+ 45 | 10 | 192.168.56.100 | 3306 | ONLINE | 1 | 0 | 100 | 300 | 0 | 0 | | 46 | 20 | 192.168.56.101 | 3306 | ONLINE | 1 | 0 | 100 | 300 | 0 | 0 | | 47 +--------------+----------------+------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+ 48 2 rows in set (0.00 sec) 49 50 //The hostgroup_id in table "disk.mysql_servers" has taken effect. 51 52 //Check the variables of "read_only" and "super_read_only". 53 zlm@192.168.56.100:3306 [(none)]>show variables like '%read_only%'; 54 +-----------------------+-------+ 55 | Variable_name | Value | 56 +-----------------------+-------+ 57 | innodb_read_only | OFF | 58 | read_only | OFF | 59 | super_read_only | OFF | 60 | transaction_read_only | OFF | 61 | tx_read_only | OFF | 62 +-----------------------+-------+ 63 5 rows in set (0.00 sec) 64 65 admin@127.0.0.1:6032 [(none)]>load mysql servers to runtime; 66 Query OK, 0 rows affected (0.00 sec) 67 68 admin@127.0.0.1:6032 [(none)]>select * from runtime_mysql_servers; 69 +--------------+----------------+------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+ 70 | hostgroup_id | hostname | port | status | weight | compression | max_connections | max_replication_lag | use_ssl | max_latency_ms | comment | 71 +--------------+----------------+------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+ 72 | 20 | 192.168.56.101 | 3306 | ONLINE | 1 | 0 | 100 | 300 | 0 | 0 | | 73 | 20 | 192.168.56.100 | 3306 | ONLINE | 1 | 0 | 100 | 300 | 0 | 0 | | 74 +--------------+----------------+------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+ 75 2 rows in set (0.00 sec) 76 77 //It's still "20". 78 79 admin@127.0.0.1:6032 [(none)]>select * from mysql_servers; 80 +--------------+----------------+------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+ 81 | hostgroup_id | hostname | port | status | weight | compression | max_connections | max_replication_lag | use_ssl | max_latency_ms | comment | 82 +--------------+----------------+------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+ 83 | 20 | 192.168.56.100 | 3306 | ONLINE | 1 | 0 | 100 | 300 | 0 | 0 | | 84 | 20 | 192.168.56.101 | 3306 | ONLINE | 1 | 0 | 100 | 300 | 0 | 0 | | 85 +--------------+----------------+------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+ 86 2 rows in set (0.00 sec) 87 88 //The "hostgroup_id" in mysql_serves also turned to be "20".Why does it happen?It's the reason why my query rule did not take effect yesterday. 89 90 admin@127.0.0.1:6032 [(none)]>SELECT * FROM monitor.mysql_server_connect_log ORDER BY time_start_us DESC LIMIT 10; 91 +----------------+------+------------------+-------------------------+---------------------------------------------------------------+ 92 | hostname | port | time_start_us | connect_success_time_us | connect_error | 93 +----------------+------+------------------+-------------------------+---------------------------------------------------------------+ 94 | 192.168.56.100 | 3306 | 1533999241153417 | 0 | Access denied for user 'monitor'@'zlm1' (using password: YES) | 95 | 192.168.56.101 | 3306 | 1533999240299607 | 0 | Access denied for user 'monitor'@'zlm1' (using password: YES) | 96 | 192.168.56.101 | 3306 | 1533999181251828 | 0 | Access denied for user 'monitor'@'zlm1' (using password: YES) | 97 | 192.168.56.100 | 3306 | 1533999180299465 | 0 | Access denied for user 'monitor'@'zlm1' (using password: YES) | 98 | 192.168.56.101 | 3306 | 1533999120959376 | 0 | Access denied for user 'monitor'@'zlm1' (using password: YES) | 99 | 192.168.56.100 | 3306 | 1533999120299350 | 0 | Access denied for user 'monitor'@'zlm1' (using password: YES) | 100 | 192.168.56.100 | 3306 | 1533999061361175 | 0 | Access denied for user 'monitor'@'zlm1' (using password: YES) | 101 | 192.168.56.101 | 3306 | 1533999060299292 | 0 | Access denied for user 'monitor'@'zlm1' (using password: YES) | 102 | 192.168.56.100 | 3306 | 1533999001472876 | 0 | Access denied for user 'monitor'@'zlm1' (using password: YES) | 103 | 192.168.56.101 | 3306 | 1533999000299091 | 0 | Access denied for user 'monitor'@'zlm1' (using password: YES) | 104 +----------------+------+------------------+-------------------------+---------------------------------------------------------------+ 105 10 rows in set (0.00 sec) 106 107 //It seems the privileges was configurated abnormally. 108 109 zlm@192.168.56.100:3306 [(none)]>select user,host from mysql.user; 110 +---------------+--------------+ 111 | user | host | 112 +---------------+--------------+ 113 | repl | 192.168.56.% | 114 | zlm | 192.168.56.% | 115 | bkuser | localhost | 116 | monitor | localhost | 117 | mysql.session | localhost | 118 | mysql.sys | localhost | 119 | root | localhost | 120 +---------------+--------------+ 121 7 rows in set (0.00 sec) 122 123 zlm@192.168.56.100:3306 [(none)]>drop user monitor@localhost; 124 Query OK, 0 rows affected (0.00 sec) 125 126 zlm@192.168.56.100:3306 [(none)]>grant all privileges on *.* to monitor@'%' identified by 'monitor'; 127 ERROR 1045 (28000): Access denied for user 'zlm'@'192.168.56.%' (using password: YES) 128 zlm@192.168.56.100:3306 [(none)]>exit 129 Bye 130 131 [root@zlm1 17:59:50 /data/backup] 132 #mysql -uroot -pPassw0rd -hlocalhost -S /tmp/mysql3306.sock 133 mysql: [Warning] Using a password on the command line interface can be insecure. 134 Welcome to the MySQL monitor. Commands end with ; or g. 135 Your MySQL connection id is 2758 136 Server version: 5.7.21-log MySQL Community Server (GPL) 137 138 Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 139 140 Oracle is a registered trademark of Oracle Corporation and/or its 141 affiliates. Other names may be trademarks of their respective 142 owners. 143 144 Type 'help;' or 'h' for help. Type 'c' to clear the current input statement. 145 146 root@localhost:mysql3306.sock [(none)]>grant all privileges on *.* to monitor@'%' identified by 'monitor'; 147 Query OK, 0 rows affected, 1 warning (0.00 sec) 148 149 root@localhost:mysql3306.sock [(none)]>select user,host from mysql.user; 150 +---------------+--------------+ 151 | user | host | 152 +---------------+--------------+ 153 | monitor | % | 154 | repl | 192.168.56.% | 155 | zlm | 192.168.56.% | 156 | bkuser | localhost | 157 | mysql.session | localhost | 158 | mysql.sys | localhost | 159 | root | localhost | 160 +---------------+--------------+ 161 7 rows in set (0.00 sec) 162 163 admin@127.0.0.1:6032 [(none)]>SELECT * FROM monitor.mysql_server_connect_log ORDER BY time_start_us DESC LIMIT 10; 164 +----------------+------+------------------+-------------------------+---------------------------------------------------------------+ 165 | hostname | port | time_start_us | connect_success_time_us | connect_error | 166 +----------------+------+------------------+-------------------------+---------------------------------------------------------------+ 167 | 192.168.56.101 | 3306 | 1533999721321021 | 1040 | NULL | 168 | 192.168.56.100 | 3306 | 1533999720303754 | 441 | NULL | 169 | 192.168.56.100 | 3306 | 1533999661174268 | 370 | NULL | 170 | 192.168.56.101 | 3306 | 1533999660302486 | 1468 | NULL | 171 | 192.168.56.100 | 3306 | 1533999601377823 | 0 | Access denied for user 'monitor'@'zlm1' (using password: YES) | 172 | 192.168.56.101 | 3306 | 1533999600302394 | 0 | Access denied for user 'monitor'@'zlm1' (using password: YES) | 173 | 192.168.56.101 | 3306 | 1533999541205310 | 0 | Access denied for user 'monitor'@'zlm1' (using password: YES) | 174 | 192.168.56.100 | 3306 | 1533999540302168 | 0 | Access denied for user 'monitor'@'zlm1' (using password: YES) | 175 | 192.168.56.101 | 3306 | 1533999480925661 | 0 | Access denied for user 'monitor'@'zlm1' (using password: YES) | 176 | 192.168.56.100 | 3306 | 1533999480302043 | 0 | Access denied for user 'monitor'@'zlm1' (using password: YES) | 177 +----------------+------+------------------+-------------------------+---------------------------------------------------------------+ 178 10 rows in set (0.00 sec) 179 180 //The monitor became normal. 181 182 admin@127.0.0.1:6032 [(none)]>select * from mysql_servers; 183 +--------------+----------------+------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+ 184 | hostgroup_id | hostname | port | status | weight | compression | max_connections | max_replication_lag | use_ssl | max_latency_ms | comment | 185 +--------------+----------------+------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+ 186 | 10 | 192.168.56.100 | 3306 | ONLINE | 1 | 0 | 100 | 300 | 0 | 0 | | 187 | 20 | 192.168.56.100 | 3306 | ONLINE | 1 | 0 | 100 | 300 | 0 | 0 | | 188 | 10 | 192.168.56.101 | 3306 | ONLINE | 1 | 0 | 100 | 300 | 0 | 0 | | 189 | 20 | 192.168.56.101 | 3306 | ONLINE | 1 | 0 | 100 | 300 | 0 | 0 | | 190 +--------------+----------------+------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+ 191 4 rows in set (0.00 sec) 192 193 admin@127.0.0.1:6032 [(none)]>delete from mysql_servers; 194 Query OK, 4 rows affected (0.00 sec) 195 196 admin@127.0.0.1:6032 [(none)]>insert into mysql_servers(hostgroup_id,hostname,max_connections,max_replication_lag) values(10,'192.168.56.100',100,300),(20,'192.168.56.101',100,300); 197 Query OK, 2 rows affected (0.00 sec) 198 199 admin@127.0.0.1:6032 [(none)]>select * from mysql_servers; 200 +--------------+----------------+------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+ 201 | hostgroup_id | hostname | port | status | weight | compression | max_connections | max_replication_lag | use_ssl | max_latency_ms | comment | 202 +--------------+----------------+------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+ 203 | 10 | 192.168.56.100 | 3306 | ONLINE | 1 | 0 | 100 | 300 | 0 | 0 | | 204 | 20 | 192.168.56.101 | 3306 | ONLINE | 1 | 0 | 100 | 300 | 0 | 0 | | 205 +--------------+----------------+------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+ 206 2 rows in set (0.00 sec) 207 208 admin@127.0.0.1:6032 [(none)]>load mysql servers to runtime;save mysql servers to disk; 209 Query OK, 0 rows affected (0.00 sec) 210 211 Query OK, 0 rows affected (0.02 sec) 212 213 admin@127.0.0.1:6032 [(none)]>select * from mysql_servers; 214 +--------------+----------------+------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+ 215 | hostgroup_id | hostname | port | status | weight | compression | max_connections | max_replication_lag | use_ssl | max_latency_ms | comment | 216 +--------------+----------------+------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+ 217 | 10 | 192.168.56.100 | 3306 | ONLINE | 1 | 0 | 100 | 300 | 0 | 0 | | 218 | 10 | 192.168.56.101 | 3306 | ONLINE | 1 | 0 | 100 | 300 | 0 | 0 | | 219 | 20 | 192.168.56.101 | 3306 | ONLINE | 1 | 0 | 100 | 300 | 0 | 0 | | 220 +--------------+----------------+------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+ 221 3 rows in set (0.00 sec) 222 223 //Why there're three records in table "mysql_servers"? 224 225 admin@127.0.0.1:6032 [(none)]>select * from runtime_mysql_servers; 226 +--------------+----------------+------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+ 227 | hostgroup_id | hostname | port | status | weight | compression | max_connections | max_replication_lag | use_ssl | max_latency_ms | comment | 228 +--------------+----------------+------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+ 229 | 10 | 192.168.56.100 | 3306 | ONLINE | 1 | 0 | 100 | 300 | 0 | 0 | | 230 | 20 | 192.168.56.101 | 3306 | ONLINE | 1 | 0 | 100 | 300 | 0 | 0 | | 231 | 10 | 192.168.56.101 | 3306 | ONLINE | 1 | 0 | 100 | 300 | 0 | 0 | | 232 +--------------+----------------+------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+ 233 3 rows in set (0.00 sec) 234 235 admin@127.0.0.1:6032 [(none)]>select * from disk.mysql_servers; 236 +--------------+----------------+------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+ 237 | hostgroup_id | hostname | port | status | weight | compression | max_connections | max_replication_lag | use_ssl | max_latency_ms | comment | 238 +--------------+----------------+------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+ 239 | 10 | 192.168.56.100 | 3306 | ONLINE | 1 | 0 | 100 | 300 | 0 | 0 | | 240 | 20 | 192.168.56.101 | 3306 | ONLINE | 1 | 0 | 100 | 300 | 0 | 0 | | 241 +--------------+----------------+------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+ 242 2 rows in set (0.00 sec) 243 244 admin@127.0.0.1:6032 [(none)]>show variables like '%also%'; 245 +-------------------------------------+-------+ 246 | Variable_name | Value | 247 +-------------------------------------+-------+ 248 | mysql-monitor_writer_is_also_reader | true | 249 +-------------------------------------+-------+ 250 1 row in set (0.00 sec) 251 252 admin@127.0.0.1:6032 [(none)]>SELECT * FROM monitor.mysql_server_connect_log ORDER BY time_start_us DESC LIMIT 10; 253 +----------------+------+------------------+-------------------------+---------------+ 254 | hostname | port | time_start_us | connect_success_time_us | connect_error | 255 +----------------+------+------------------+-------------------------+---------------+ 256 | 192.168.56.100 | 3306 | 1534001701142271 | 357 | NULL | 257 | 192.168.56.101 | 3306 | 1534001700318759 | 1260 | NULL | 258 | 192.168.56.101 | 3306 | 1534001641047510 | 1215 | NULL | 259 | 192.168.56.100 | 3306 | 1534001640318616 | 435 | NULL | 260 | 192.168.56.101 | 3306 | 1534001581271612 | 1089 | NULL | 261 | 192.168.56.100 | 3306 | 1534001580317548 | 201 | NULL | 262 | 192.168.56.100 | 3306 | 1534001521182217 | 1198 | NULL | 263 | 192.168.56.101 | 3306 | 1534001520317373 | 922 | NULL | 264 | 192.168.56.101 | 3306 | 1534001461241620 | 1110 | NULL | 265 | 192.168.56.100 | 3306 | 1534001460316352 | 326 | NULL | 266 +----------------+------+------------------+-------------------------+---------------+ 267 10 rows in set (0.00 sec)
Configure the mysql users.
1 admin@127.0.0.1:6032 [(none)]>select * from mysql_users; 2 Empty set (0.00 sec) 3 4 admin@127.0.0.1:6032 [(none)]>insert into mysql_users(username,password,active,default_hostgroup,default_schema) values('zlm','zlmzlm',1,10,'zlm'); 5 Query OK, 1 row affected (0.00 sec) 6 7 admin@127.0.0.1:6032 [(none)]>select * from mysql_users; 8 +----------+----------+--------+---------+-------------------+----------------+---------------+------------------------+--------------+---------+----------+-----------------+ 9 | username | password | active | use_ssl | default_hostgroup | default_schema | schema_locked | transaction_persistent | fast_forward | backend | frontend | max_connections | 10 +----------+----------+--------+---------+-------------------+----------------+---------------+------------------------+--------------+---------+----------+-----------------+ 11 | zlm | zlmzlm | 1 | 0 | 10 | zlm | 0 | 1 | 0 | 1 | 1 | 10000 | 12 +----------+----------+--------+---------+-------------------+----------------+---------------+------------------------+--------------+---------+----------+-----------------+ 13 1 row in set (0.00 sec) 14 15 admin@127.0.0.1:6032 [(none)]>select * from runtime_mysql_users; 16 Empty set (0.00 sec) 17 18 admin@127.0.0.1:6032 [(none)]>select * from disk.mysql_users; 19 Empty set (0.00 sec) 20 21 admin@127.0.0.1:6032 [(none)]>load mysql users to runtime;save mysql users to disk; 22 Query OK, 0 rows affected (0.00 sec) 23 24 Query OK, 0 rows affected (0.01 sec) 25 26 admin@127.0.0.1:6032 [(none)]>select * from runtime_mysql_users; 27 +----------+-------------------------------------------+--------+---------+-------------------+----------------+---------------+------------------------+--------------+---------+----------+-----------------+ 28 | username | password | active | use_ssl | default_hostgroup | default_schema | schema_locked | transaction_persistent | fast_forward | backend | frontend | max_connections | 29 +----------+-------------------------------------------+--------+---------+-------------------+----------------+---------------+------------------------+--------------+---------+----------+-----------------+ 30 | zlm | *512FB3FAA6F522E351929CAC70AD8EBB0F5901B6 | 1 | 0 | 10 | zlm | 0 | 1 | 0 | 0 | 1 | 10000 | 31 | zlm | *512FB3FAA6F522E351929CAC70AD8EBB0F5901B6 | 1 | 0 | 10 | zlm | 0 | 1 | 0 | 1 | 0 | 10000 | 32 +----------+-------------------------------------------+--------+---------+-------------------+----------------+---------------+------------------------+--------------+---------+----------+-----------------+ 33 2 rows in set (0.00 sec) 34 35 admin@127.0.0.1:6032 [(none)]>select * from disk.mysql_users; 36 +----------+----------+--------+---------+-------------------+----------------+---------------+------------------------+--------------+---------+----------+-----------------+ 37 | username | password | active | use_ssl | default_hostgroup | default_schema | schema_locked | transaction_persistent | fast_forward | backend | frontend | max_connections | 38 +----------+----------+--------+---------+-------------------+----------------+---------------+------------------------+--------------+---------+----------+-----------------+ 39 | zlm | zlmzlm | 1 | 0 | 10 | zlm | 0 | 1 | 0 | 1 | 1 | 10000 | 40 +----------+----------+--------+---------+-------------------+----------------+---------------+------------------------+--------------+---------+----------+-----------------+ 41 1 row in set (0.00 sec)
Configure the query rules.
1 admin@127.0.0.1:6032 [(none)]>select * from mysql_query_rules; 2 Empty set (0.00 sec) 3 4 admin@127.0.0.1:6032 [(none)]>insert into mysql_query_rules(active,username,match_pattern,schemaname,destination_hostgroup,apply) values(1,'zlm','^select','zlm',20,1); 5 Query OK, 1 row affected (0.00 sec) 6 7 admin@127.0.0.1:6032 [(none)]>select active,username,match_pattern,schemaname,destination_hostgroup,apply from mysql_query_rules; 8 +--------+----------+---------------+------------+-----------------------+-------+ 9 | active | username | match_pattern | schemaname | destination_hostgroup | apply | 10 +--------+----------+---------------+------------+-----------------------+-------+ 11 | 1 | zlm | ^select | zlm | 20 | 1 | 12 +--------+----------+---------------+------------+-----------------------+-------+ 13 1 row in set (0.00 sec) 14 15 admin@127.0.0.1:6032 [(none)]>select * from runtime_mysql_query_rules; 16 Empty set (0.00 sec) 17 18 admin@127.0.0.1:6032 [(none)]>select * from disk.mysql_query_rules; 19 Empty set (0.00 sec) 20 21 admin@127.0.0.1:6032 [(none)]>load mysql query rules to runtime;save mysql query rules to disk; 22 Query OK, 0 rows affected (0.00 sec) 23 24 admin@127.0.0.1:6032 [(none)]>select active,username,match_pattern,schemaname,destination_hostgroup,apply from runtime_mysql_query_rules; 25 +--------+----------+---------------+------------+-----------------------+-------+ 26 | active | username | match_pattern | schemaname | destination_hostgroup | apply | 27 +--------+----------+---------------+------------+-----------------------+-------+ 28 | 1 | zlm | ^select | zlm | 20 | 1 | 29 +--------+----------+---------------+------------+-----------------------+-------+ 30 1 row in set (0.00 sec) 31 32 admin@127.0.0.1:6032 [(none)]>select active,username,match_pattern,schemaname,destination_hostgroup,apply from disk.mysql_query_rules; 33 +--------+----------+---------------+------------+-----------------------+-------+ 34 | active | username | match_pattern | schemaname | destination_hostgroup | apply | 35 +--------+----------+---------------+------------+-----------------------+-------+ 36 | 1 | zlm | ^select | zlm | 20 | 1 | 37 +--------+----------+---------------+------------+-----------------------+-------+ 38 1 row in set (0.00 sec)
Test whether proxy can seperate writing and reading operations.
1 admin@127.0.0.1:6032 [(none)]>show create table stats.stats_mysql_query_digestG 2 *************************** 1. row *************************** 3 table: stats_mysql_query_digest 4 Create Table: CREATE TABLE stats_mysql_query_digest ( 5 hostgroup INT, 6 schemaname VARCHAR NOT NULL, 7 username VARCHAR NOT NULL, 8 digest VARCHAR NOT NULL, 9 digest_text VARCHAR NOT NULL, 10 count_star INTEGER NOT NULL, 11 first_seen INTEGER NOT NULL, 12 last_seen INTEGER NOT NULL, 13 sum_time INTEGER NOT NULL, 14 min_time INTEGER NOT NULL, 15 max_time INTEGER NOT NULL, 16 PRIMARY KEY(hostgroup, schemaname, username, digest)) 17 1 row in set (0.00 sec) 18 19 admin@127.0.0.1:6032 [(none)]>select hostgroup,schemaname,username,substr(digest_text,120,-120),count_star from stats_mysql_query_digest_reset; 20 Empty set (0.00 sec) 21 22 [root@zlm1 18:36:17 /data/backup] 23 #mysql -uzlm -pzlmzlm -h192.168.56.100 -P6033 24 mysql: [Warning] Using a password on the command line interface can be insecure. 25 Welcome to the MySQL monitor. Commands end with ; or g. 26 Your MySQL connection id is 6 27 Server version: 5.5.30 (ProxySQL) 28 29 Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. 30 31 Oracle is a registered trademark of Oracle Corporation and/or its 32 affiliates. Other names may be trademarks of their respective 33 owners. 34 35 Type 'help;' or 'h' for help. Type 'c' to clear the current input statement. 36 37 zlm@192.168.56.100:6033 [(none)]>show tables; 38 +---------------+ 39 | Tables_in_zlm | 40 +---------------+ 41 | test | 42 +---------------+ 43 1 row in set (0.00 sec) 44 45 zlm@192.168.56.100:6033 [(none)]>select * from test; 46 +------+------+ 47 | id | name | 48 +------+------+ 49 | 1 | aaa | 50 | 2 | bbb | 51 | 3 | ccc | 52 +------+------+ 53 3 rows in set (0.00 sec) 54 55 zlm@192.168.56.100:6033 [(none)]>insert into test values(4,'eee'); 56 Query OK, 1 row affected (0.00 sec) 57 58 zlm@192.168.56.100:6033 [(none)]>update test set name='ddd' where id=4; 59 Query OK, 1 row affected (0.00 sec) 60 Rows matched: 1 Changed: 1 Warnings: 0 61 62 zlm@192.168.56.100:6033 [(none)]>select * from test; 63 +------+------+ 64 | id | name | 65 +------+------+ 66 | 1 | aaa | 67 | 2 | bbb | 68 | 3 | ccc | 69 | 4 | ddd | 70 +------+------+ 71 4 rows in set (0.00 sec) 72 73 admin@127.0.0.1:6032 [(none)]>select hostgroup,schemaname,username,substr(digest_text,120,-120),count_star from stats_mysql_query_digest; 74 +-----------+------------+----------+-----------------------------------+------------+ 75 | hostgroup | schemaname | username | substr(digest_text,120,-120) | count_star | 76 +-----------+------------+----------+-----------------------------------+------------+ 77 | 10 | zlm | zlm | update test set name=? where id=? | 1 | 78 | 20 | zlm | zlm | select * from test | 2 | 79 | 10 | zlm | zlm | show tables | 1 | 80 | 10 | zlm | zlm | select USER() | 1 | 81 | 10 | zlm | zlm | insert into test values(?,?) | 1 | 82 | 10 | zlm | zlm | select @@version_comment limit ? | 1 | 83 +-----------+------------+----------+-----------------------------------+------------+ 84 6 rows in set (0.00 sec) 85 86 //What baffled me is that why the "select USER()" and "select @@version_comment limit ?" were not in the hostgroup "20"? 87 88 zlm@192.168.56.100:6033 [(none)]>select @@hostname; 89 +------------+ 90 | @@hostname | 91 +------------+ 92 | zlm2 | 93 +------------+ 94 1 row in set (0.00 sec) 95 96 //The select operation has been executed on slave zlm2. 97 98 admin@127.0.0.1:6032 [(none)]>select hostgroup,schemaname,username,substr(digest_text,120,-120),count_star from stats_mysql_query_digest; 99 +-----------+------------+----------+-----------------------------------+------------+ 100 | hostgroup | schemaname | username | substr(digest_text,120,-120) | count_star | 101 +-----------+------------+----------+-----------------------------------+------------+ 102 | 10 | zlm | zlm | update test set name=? where id=? | 1 | 103 | 20 | zlm | zlm | select * from test | 2 | 104 | 10 | zlm | zlm | show tables | 1 | 105 | 10 | zlm | zlm | select USER() | 1 | 106 | 20 | zlm | zlm | select @@hostname | 1 | 107 | 10 | zlm | zlm | insert into test values(?,?) | 1 | 108 | 10 | zlm | zlm | select @@version_comment limit ? | 1 | 109 +-----------+------------+----------+-----------------------------------+------------+ 110 7 rows in set (0.00 sec) 111 112 //The new statement of "select @@hostname" was put into hostgroup "20" correctly.