最近發現了 percona 自家網站的個推薦的 ProxySQL howto 在github.com有開源,並且還在持續更新。感覺commit者就是 percona自家的員工或領他家工資資助的人才。
大概記錄 對ProxySQL的瞭解。
- C++寫的,性能應該不是問題。 github地址
- 運行時分admin進程與proxy進程, 一般 6032 端口是 admin 進程。6033是proxy。
- admin的目標是熱配置生效,不必重啓proxy。能直接使用mysql客戶端簡單的sql操作生效。
- 整體配置可以從proxysql.cnf讀,admin配置可以從proxysql-admin.cnf 熱load進來。
- 配置爲runtime\memory\disk\config-file的多層管理概念,詳看官方wiki有介紹
- 配置以mysql的內存表方式存於內存,能通過 SAVE、LOAD 指令保存配置與加載配置。
舉個例子(坑):
第一次啓動時,讀取默認配置文件 /etc/proxysql.cnf 其中第一項是 datadir=”/var/lib/proxysql”
這時如何改了admin相關的變量,如:set admin-mysql_ifaces==”192.168.1.110:6032”;
這時要執行 SAVE ADMIN VARIABLES TO DISK; 指令,配置save到datadir目錄的文件了。
以後啓動都不會再讀取proxysql.cnf的配置。這點要注意。
PS: 不要學我例子改 admin-mysql_ifaces, admin帳號只允許用127.0.0.1 IP連接。
如果真的改了,只能刪除datadir目錄,重啓proxysql了。
說說幾個關鍵有配置項(或叫表)
- mysql_servers – 後端真實的mysql實例
- mysql_users – 連接proxySQL的用戶,以及連接後端mysql的用戶;注意兩者相同。
- mysql_query_rules — 查詢規則,支持鏈式的多條規則。詳細看query rules wiki
- global_variables — 如表名,不解釋。wiki
三層配置生效關係指令:
save / local 指令 組合如下:
[SAVE | LOAD ]
[MYSQL USER | MYSQL SERVER | ADMIN VARIABLES | MYSQL VARIABLES | MYSQL QUERY RULES]
[ TO | FROM ]
[ MEMORY | RUNTIME | DISK | CONFIG];
總之,就是配置可以save或load。 方向上可以TO或FROM,目標與來源有4項。
想要配置生效(active),必需load進RUNTIME中。
- LOAD MYSQL USERS TO RUNTIME;
- LOAD MYSQL SERVERS TO RUNTIME;
- LOAD MYSQL QUERY RULES TO RUNTIME;
- LOAD MYSQL VARIABLES TO RUNTIME;
- LOAD ADMIN VARIABLES TO RUNTIME;
要持久化,必需SAVE進DISK:
- SAVE MYSQL USERS TO DISK;
- SAVE MYSQL SERVERS TO DISK;
- SAVE MYSQL QUERY RULES TO DISK;
- SAVE MYSQL VARIABLES TO DISK;
- SAVE ADMIN VARIABLES TO DISK;
配置 後端的 mysql,至少到配置2個表, 與授權一個moniter用戶 的數據。
- mysql_servers
- mysql_users
- mysql_replication_hostgroups 最好連這個表也配置一下。
- grant select ON . TO ‘monitor ‘@’$proxysql_ip’ identified by ‘monitor’;
1與2項,直接使用insert sql 插入即可。插入後還要Load TO RUNTIME 才生效。
只有monitor正確了, 才能正常代理mysql協議到後端。
查看是否有monitor連接出錯:
SELECT * FROM monitor.mysql_server_connect_log ORDER BY time_start_us DESC LIMIT 10;