proxysql

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;

易错点与排错

相关命令

读完自测

合上页面,先回答,再展开对照。

  1. 修改 mysql_servers 后配置没生效,为什么?
  2. 读写路由不符合预期,先查什么?
  3. 为什么事务和 SELECT ... FOR UPDATE 不应路由到只读副本?
答案
  1. 需要 LOAD MYSQL SERVERS TO RUNTIME,SAVE 只负责持久化。
  2. 查询规则按 rule_id 顺序匹配,检查规则顺序和命中情况。
  3. 它们需要写或强一致语义,路由到只读副本会出错。