ProxySQL MySQL 连接池与读写分离
proxysql 在 MySQL 前面做连接复用、读写分离和查询规则路由。它有自己的管理库(默认 6032),配置分 runtime 和 disk 两层。
proxysql --initial
proxysql -f -c /etc/proxysql.cnf
proxysql --version
管理接口:
mysql -u admin -padmin -h 127.0.0.1 -P 6032
SHOW DATABASES;
SELECT * FROM mysql_servers;
SELECT * FROM mysql_query_rules;
SELECT * FROM stats_mysql_connection_pool;
添加后端并生效:
INSERT INTO mysql_servers(hostgroup_id,hostname,port,weight)
VALUES (10,'db-primary',3306,1),(20,'db-replica',3306,1);
LOAD MYSQL SERVERS TO RUNTIME;
SAVE MYSQL SERVERS TO DISK;
LOAD ... TO RUNTIME 才生效,SAVE ... TO DISK 才持久化。rule_id 顺序匹配;顺序错会导致读写路由错误。hostgroup 划分不对,会把流量打到不可用节点。SELECT ... FOR UPDATE 和跨语句会话状态不要路由到只读副本。stats_mysql_connection_pool 和查询规则命中情况。mysql — 客户端pgbouncer — PostgreSQL 连接池mysql-router — MySQL 官方路由合上页面,先回答,再展开对照。
mysql_servers 后配置没生效,为什么?SELECT ... FOR UPDATE 不应路由到只读副本?LOAD MYSQL SERVERS TO RUNTIME,SAVE 只负责持久化。rule_id 顺序匹配,检查规则顺序和命中情况。