1、安装
添加yum源
cat <<EOF | tee /etc/yum.repos.d/proxysql.repo
[proxysql_repo]
name= ProxySQL YUM repository
baseurl=https://repo.proxysql.com/ProxySQL/proxysql-2.1.x/centos/\$releasever
gpgcheck=1
gpgkey=https://repo.proxysql.com/ProxySQL/repo_pub_key
EOF
安装
yum install proxysql
启动
systemctl start proxysql-initial.service
systemctl start proxysql.service
2、ProxySQL相关文件
ProxySQL使用SQLITE数据库,Proxysql很多东西是存储在这个迷你数据库里面的。数据库目录在/var/lib/proxysql
/var/lib/proxysql
-rw-r--r-- 1 root root 1078 Mar 20 12:17 proxysql-ca.pem
-rw-r--r-- 1 root root 1062 Mar 20 12:17 proxysql-cert.pem
-rw------- 1 root root 196608 Mar 20 12:17 proxysql.db.bak
-rw-r--r-- 1 root root 1679 Mar 20 12:17 proxysql-key.pem
-rw------- 1 root root 4097 Mar 20 12:17 proxysql.log
-rw------- 1 root root 163840 Mar 20 12:31 proxysql_stats.db
配置文件/etc/proxysql.cnf
3、配置系统
配置系统分为3层
- RUNTIME层,是proxysql运行过程中实际采用的配置
- MEMORY层,是修改proxysql的唯一正常入口。一般的,修改一个配置,先改Memory,确认无误后再接入生产(RUNTIME),和持久化到磁盘(DISK)
- DISK和CONFIG FILE层,是持久化层,持久化层主要将数据存储在sqlite(
$(DATADIR)/proxysql.db
.)数据库中和文件中(/etc/proxysql.cnf
)。
+-------------------------+
| RUNTIME |
+-------------------------+
/|\ |
| |
[1] | [2] |
| \|/
+-------------------------+
| MEMORY |
+-------------------------+ _
/|\ | |\
| | \
[3] | [4] | \ [5]
| \|/ \
+-------------------------+ +-------------------------+
| DISK | | CONFIG FILE |
+-------------------------+ +-------------------------+
3.1 配置修改命令
以mysql servers
的配置修改为例
(1)将memory
中的配置应用到runtime
LOAD MYSQL SERVERS FROM MEMORY / LOAD MYSQL SERVERS TO RUNTIME
(2)将runtime
配置拉一份到memory
中
SAVE MYSQL SERVERS TO MEMORY / SAVE MYSQL SERVERS FROM RUNTIME
(3)将DISK
的配置拉一份到memory
中来
LOAD MYSQL SERVERS TO MEMORY / LOAD MYSQL SERVERS FROM DISK
(4)将memory
中的配置保存到DISK
中去
SAVE MYSQL SERVERS FROM MEMORY / SAVE MYSQL SERVERS TO DISK
(5)将CONFIG FILE
的配置加载到memory中
LOAD MYSQL SERVERS FROM CONFIG
4、ProxySQL实现读写分离
准备环境为mysql 1主2从,向主库写入,在从库读取
db01 (10.0.0.51:3307) , mysql master
db02 (10.0.0.52:3307) , mysql slave
db03 (10.0.0.53:3307) , mysql slave
proxysql (10.0.0.53:6033) , app+proxysql
4.1 proxysql登录
proxysql对外提供两个端口6032、6033
- 6032是管理口,登陆到proxysql的管理端
- 6033是业务口,登录后用于对后端数据库进行sql操作,6033也是供前端业务所使用的端口
登录管理端口6032
mysql -uadmin -padmin -h 127.0.0.1 -P6032 --prompt='Admin> '
4.2 proxysql录入主从信息
主库master节点放到group 0中,salve节点放到group1。
INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (0,'10.0.0.51',3307);
INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (1,'10.0.0.52',3307);
INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (1,'10.0.0.53',3307);
commit;
查看信息
select hostgroup_id,hostname,port,status from mysql_servers;
4.3 mysql数据库创建监控及应用账户
-
proxysql
是监控账户用于心跳监控 -
sbuser
是应用账户用于对数据库进行读写操作
只需在主库上创建,从库会自动同步
CREATE USER 'proxysql'@'10.0.0.%' IDENTIFIED BY '123';
GRANT USAGE ON *.* TO 'proxysql'@'10.0.0.%';
CREATE USER 'sbuser'@'10.0.0.%' IDENTIFIED BY '123';
GRANT ALL ON * . * TO 'sbuser'@'10.0.0.%';
FLUSH PRIVILEGES;
4.4 proxysql创建监控及应用账户
创建监控账户
UPDATE global_variables SET variable_value='proxysql' WHERE variable_name='mysql-monitor_username';
UPDATE global_variables SET variable_value='123' WHERE variable_name='mysql-monitor_password';
commit;
创建应用账户
INSERT INTO mysql_users(username,password,default_hostgroup) VALUES ('sbuser','123',0);
commit;
4.5 proxysql应用配置变更
LOAD MYSQL VARIABLES TO RUNTIME;
SAVE MYSQL VARIABLES TO DISK;
LOAD MYSQL SERVERS TO RUNTIME;
SAVE MYSQL SERVERS TO DISK;
LOAD MYSQL USERS TO RUNTIME;
SAVE MYSQL USERS TO DISK;
4.6 查看mysql监控情况
SELECT * FROM monitor.mysql_server_connect_log ORDER BY time_start_us DESC LIMIT 10;
SELECT * FROM monitor.mysql_server_ping_log ORDER BY time_start_us DESC LIMIT 10;
4.7 读写分离配置
proxysql的实现方式是做sql路由,可以自定义sql路由规则。这里我们将所有除了select* from 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);
commit;
#rule_id按顺序号进行规则匹配,不配置默认从1累加
#active表示是否启用这个sql路由项
#match_pattern是正则匹配项
#destination_hostgroup表示我们要将该类sql转发到的mysql组
#apply为1表示该正则匹配后,将不再接受其他匹配,直接转发。
应用配置变更
LOAD MYSQL QUERY RULES TO RUNTIME;
SAVE MYSQL QUERY RULES TO DISK;
4.8 读写分离检验
登录业务端检验
mysql -usbuser -p123 -h 127.0.0.1 -P6033
select @@server_id
被分配到slave
做一个事务,不以select语句开头,
begin;select @@server_id;commit;
,被分配到master
网友评论