一 配置读写分离表
1 mysql_user 列表配置
1 username && password 账号密码
2 default_hostgroup 写hostgroup_id
3 transaction_persistent 保证了同一个事务中所有的语句都会路由到同一组示例
2 mysql_servers DB列表配置
该表的主键是hostgroup_id+hostname+port
1 hostgroup_id
1 不同功能不同hostgroup_id(写hostgroup_id,读hostgroup_id)
2 status 集群健康情况
ONLINE:当前后端实例状态正常。
SHUNNED:临时被剔除,可能因为后端too many connection error,或者超过了max_replication_lag。
OFFLINE_SOFT:软离线状态,不再接受新的连接,但已建立的连接会等待活跃事务完成。
OFFLINE_HARD:硬离线状态,不再接受新的连接,已建立的连接或被强制中断,当后端实例宕机或网络不可达,会出现。
3 max_replication_lag 设置延迟判断
4 weight 权重比,默认为1,权重越大优先级越高
5 max_connections 最大连接数(不要大于mysql的max_connections)
3 mysql_query_rules列表配置
1 active 是否启用(默认启用)
2 match_pattern 具体的匹配规则
1 ^SELECT ->只转发select 读hostgroup_id
2 ^SELECT.*FOR UPDATE$ select for update是需要修改数据的,所以要定向到主库 写hostgroup_id
3 apply 是否应用 (默认应用)
二 创建相关账号
1 监控账号权限需要 SUPER, REPLICATION CLIENT
set mysql-monitor_username='proxysql';set mysql-monitor_password='proxysql';
通过日志观测监控账号是否正常监控mysql复制进程
2 程序账号权限需要 update,delete,insert,select,create
三 常规配置加载操作
//实时加载
load mysql servers to runtime; mysql_server
load mysql users to runtime; mysql_users
load mysql variables to runtime; variables
load mysql query rules to runtime; query_rule
//刷新到磁盘
save mysql servers to disk;
save mysql users to disk;
save mysql variables to disk;
save mysql query rules to disk;
四 查看读写分离情况
stats_mysql_query_digest表记载着读写分离的具体操作
五 proxysql 权重与 读写
在mysql_servers中新添加一条记录,标明主库配置读hostgroup_id,weight低于其他从库,这样做的目的就是当两个从库都出现问题时,主库提供读服务
六 标准插入语句
mysql_user
insert into mysql_users(username,password,active,default_hostgroup,transaction_persistent)values('user','pwd',1,w-hostgrop-id,1);
mysql_server
insert into mysql_servers(hostgroup_id,hostname,port,weight,max_connections,max_replication_lag,comment) values(w-hostgroup-id,'MASTER-IP',PORT,1,MAX_CONNECTIONS,10,'test my proxysql');
insert into mysql_servers(hostgroup_id,hostname,port,weight,max_connections,max_replication_lag,comment) values(r-hostgroup-id,'MASTER-IP',3306,weight,MAX_CONNECTIONS,10,'test my proxysql');
insert into mysql_servers(hostgroup_id,hostname,port,weight,max_connections,max_replication_lag,comment)values(r-hostgroup-id,,'Slave-IP',3306,weight+1,MAX_CONNECTIONS,10,'test my proxysql');
insert into mysql_servers(hostgroup_id,hostname,port,weight,max_connections,max_replication_lag,comment)values(r-hostgroup-id,,'Slave-IP',3306,weight+1,MAX_CONNECTIONS,10,'test my proxysql');
mysql_query_rules
INSERT INTO mysql_query_rules(active,match_pattern,destination_hostgroup,apply) VALUES(1,'^SELECT.*FOR UPDATE$',w-hostgroup-id,1);
INSERT INTO mysql_query_rules(active,match_pattern,destination_hostgroup,apply)VALUES(2,'^SELECT',r-hostgroup-id,1);
七 操作
1 GRANT SUPER,REPLICATION CLIENT ON *.* TO 'proxysql' IDENTIFIED BY 'proxysql';
2 mysql -uadmin -padmin -h127.0.0.1 -P6032 登录proxysql
3 常规配置加载操作