create user 'monitor'@'192.168.%' identified by 'monitorpassword';
grant all privileges on *.* to 'monitor'@'192.168.%' with grant option;
create user 'proxysql'@'192.168.%' identified by 'proxypassword';
grant all privileges on *.* to 'proxysql'@'192.168.%' with grant option;
flush privileges;
insert into mysql_replication_hostgroups ( writer_hostgroup, reader_hostgroup, comment) values (10,20,'proxy');
insert into mysql_servers(hostgroup_id,hostname,port) values (10,'192.168.0.204',3306);
insert into mysql_servers(hostgroup_id,hostname,port) values (20,'192.168.0.64',3306);
UPDATE global_variables SET variable_value='monitor' WHERE variable_name='mysql-monitor_username';
UPDATE global_variables SET variable_value='monitorpassword' WHERE variable_name='mysql-monitor_password';
insert into mysql_users (username,password,default_hostgroup) values ('proxysql','proxypassword',10);
insert into mysql_query_rules(rule_id,active,match_pattern,destination_hostgroup,apply) values (1,1,'^select.*for update$',10,1);
insert into mysql_query_rules(rule_id,active,match_pattern,destination_hostgroup,apply) values (2,1,'^select',20,1);
commit;
load mysql servers to runtime;
save mysql servers to disk;
load mysql variables to runtime;
save mysql variables to disk;
load mysql users to runtime;
save mysql users to disk;
load mysql query rules to runtime;
save mysql query rules to disk;
用proxysql用户来登陆,注意端口号这次是6033:
mysql -uproxysql -pproxypassword -h 127.0.0.1 -P 6033
执行一些sql,比如创建数据库,创建表,进行一些插入,查询之类的:
create database test;
use test;
create table test_table(col1 varchar(10), col2 int);
insert into test_table values ('hello', 999);
commit;
select * from test_table;
然后再用admin用户登陆ProxySQL管理端:
mysql -uadmin -padmin -h 127.0.0.1 -P 6032
查询一些调度记录,数据库监控情况等等:
select * from monitor.mysql_server_connect_log;
select * from mysql_server_ping_log limit 10;
select * from mysql_server_read_only_log limit 10;
select hostgroup,schemaname,username,digest_text,count_star from stats_mysql_query_digest;
作者: zhaorenhai
ProxySQL是业界著名的数据库代理层软件,可以实现数据库的读写分离,负载均衡等高可用功能。可对接的数据库有MySQL,MariaDB,Percona。 最近ProxySQL 2.0.15版本开始支持arm64平台,见如下链接:https://github.com/sysown/proxysql/releases/tag/v2.0.15 , 其中centos,ubuntu,debian等系统都有对应的arm64的版本。 本文准备在MariaDB数据库上测试一下最新的ProxySQL arm64版本,也给其他有兴趣的小伙伴提供个参考。
测试环境,还是采用华为云上的云服务器,共三台,一台用来装ProxySQL,另外两台一台装MariaDB主库,另外一台装MariaDB从库。OS我们采用Ubuntu 18.04版本。MariaDB就用OS自带的10.1版本。
首先搭建一个MariaDB的主从复制高可用环境,具体步骤可以参考这篇博客:https://kunpengcompute.github.io/2020/10/26/mariadb-ji-qun-zai-x86-he-arm64-shang-de-hun-he-bu-shu/ 虽然这篇博客的里面的OS是用的openEuler,不过除了软件安装的命令和配置文件的路径有些许差异外,其他基本都一样。
在主数据库上创建两个数据库账户,一个是ProxySQL用来监控数据库的,一个是ProxySQL用来调度业务请求的
然后在调度节点上安装并启动ProxySQL:
登陆ProxySQL:
mysql -uadmin -padmin -h 127.0.0.1 -P 6032
ProxySQL上的配置,包括创建组,创建用户,创建数据库服务器,创建读写分离的调度规则,并将这些配置持久化:
用proxysql用户来登陆,注意端口号这次是6033:
mysql -uproxysql -pproxypassword -h 127.0.0.1 -P 6033
执行一些sql,比如创建数据库,创建表,进行一些插入,查询之类的:
然后再用admin用户登陆ProxySQL管理端:
mysql -uadmin -padmin -h 127.0.0.1 -P 6032
查询一些调度记录,数据库监控情况等等:
根据查询的结果可以看出来,的确读写已经被分离到了不同的数据库。
参考文档:
https://www.cnblogs.com/keme/p/12290977.html#1proxysql-%E4%BB%8B%E7%BB%8D