proxysql 配置疑问

1.环境
192.168.1.100  主库
192.168.1.101  从库
192.168.1.102  proxysql

2.软件
mysql5.7.19
proxysql1.4.4

3.安装
下载:wget   https://github.com/sysown/prox ... 4.rpm
安装依赖:yum  install   perl-DBD-MySQL
安装proxysql:rpm  -ivh  proxysql-1.4.4-1-centos67.x86_64.rpm 
启动:service proxysql start
mysql安装、主从配置略

4.创建数据库账号
在主库创建数据库账号

业务账号
CREATE USER 'proxytest'@'%' IDENTIFIED BY 'proxytest';
GRANT USAGE ON  *.* TO 'proxytest'@'%';
监控账号
CREATE USER 'monitor'@'%' IDENTIFIED BY 'monitor';
GRANT ALL ON * . * TO 'monitor'@'%';
FLUSH PRIVILEGES;

5.配置
连接管理端口
mysql -u admin -padmin -h 127.0.0.1 -P6032

查看有没有规则,有规则delete规则,重新配置
SELECT * FROM mysql_servers;
SELECT * from mysql_replication_hostgroups;
SELECT * from mysql_query_rules;
SELECT * FROM mysql_users;

添加server和user
insert into  mysql_servers(hostgroup_id,hostname,port,max_connections)  values(0,'192.168.1.100',3307,10),(1,'192.168.1.101',3307,10);
insert into  mysql_users(username,password,active,default_hostgroup,default_schema)  values('proxytest','proxytest',1,0,'test');
注意:  mysql_users表中active要为1,否则连接不上。还有default_hostgroup 要设置为正确的值,这里设置为0,即主库,与mysql_servers中的hostgroup_id对应。
load  mysql  servers  to  runtime;
save  mysql servers  to  disk ;
load  mysql  users  to  runtime;
save  mysql users  to  disk ;

配置监控
UPDATE global_variables SET variable_value='monitor' WHERE variable_name='mysql-monitor_username';
UPDATE global_variables SET variable_value='monitor' WHERE variable_name='mysql-monitor_password';
load  mysql  variables   to   runtime   ;
save  mysql   variables  to  disk   ;

读写分离配置
这里我们将所有除了SELECT.*FOR UPDATE的select全部发送到slave,其他的的语句发送到master。

INSERT INTO mysql_query_rules(active,match_pattern,destination_hostgroup,apply) VALUES(1,'^SELECT.*FOR UPDATE$',0,1);
INSERT INTO mysql_query_rules(active,match_pattern,destination_hostgroup,apply) VALUES(1,'^SELECT',1,1);
LOAD MYSQL QUERY RULES TO RUNTIME;
SAVE MYSQL QUERY RULES TO DISK;

6.测试
连上proxysql 6033进行测试
mysql -uproxytest -pproxytest -P6033
创建测试表:
CREATE TABLE `t1` (
  `id` int(11) DEFAULT NULL,
   `name` varchar(20) DEFAULT NULL
   );

进行DML 、DDL测试操作。

我测了没有问题,这里疑问:
 1.我看官方文档proxysql 配置读写分离没有用到mysql_replication_hostgroups 表, 
https://github.com/sysown/proxysql/wiki/ProxySQL-Read-Write-Split-(HOWTO). 
 什么情况下用到?
2.mysql_query_rules规则里面如何写不区分大小写的规则,比如大写SELECT和小写
 select 会匹配一条规则。
3. proxysql高可用就是多个proxysql前面配个keepalived ?

5 个评论

现在读写分离通过mysql-monitor_writer_is_also_reader 更智能的控制, 不过, 还是需要mysql_replication_hostgroups 这个表。
mysql-monitor_writer_is_also_reader 这个是谁的参数?
另外我看ProxySQL现在支持的读写分离模式总有有三种:
* 基于端口模式,即,一个端口写,一个端口读,类似于MySQL Router的模式。
* 基于规则表达的读写分离,把以SELECT开头的都转到从库,但SELECT ... for update的请求的主库。
* 基于单条SQL的读写分离,把一个SQL做读写分离,其它还是请求主库
是的, 分别是这三种
Read/write split using different ports
basic read/write split using regex
read/write split using regex and digest
按作者的意思是第三个更好一些
我也推荐第三种

要回复文章请先登录注册