1、ProxySQL 介绍
ProxySQL 是基于 MySQL 的一款开源的中间件的产品,是一个灵活的 MySQL 代理层,可以实现读写分离,支持 Query 路由功能,支持动态指定某个 SQL 进行缓存,支持动态加载(无需重启 ProxySQL 服务),故障切换和一些 SQL 的过滤功能。
介绍:相关 ProxySQL 的网站
https://www.proxysql.com/
https://github.com/sysown/proxysql/wiki
2、环境准备
全新初始化的实例
IP
server-id
数据库版本
备注
10.0.0.160
1603306
MySQL 8.0.18
Master(主库)+ ProxySQL2.0.8
10.0.0.161
1613306
MySQL 8.0.18
Slave1(从库)
10.0.0.162
1623306
MySQL 8.0.18
Slave2(从库)
ProxySQL 2.0.x 版本支持 MGR注:我的 ProxySQL 和 主库放在一起的,我已近配置好了主从复制状态。这是我的实验环境,实际环境注意实际情况。一般的代理环境结构如上图。slave 节点的read_only=1
3、ProxySQL 安装与启动
下载
wget https://github.com/sysown/proxysql/releases/download/v2.0.8/proxysql-2.0.8-1-centos7.x86_64.rpm
安装 ProxySQL
[root@mysql-160 ~]# rpm -ivh proxysql-2.0.8-1-centos7.x86_64.rpm
# 查看相应安装文件路径,有哪些文件
[root@mysql-160 ~]# rpm -ql proxysql
/etc/logrotate.d/proxysql
/etc/proxysql.cnf
/etc/systemd/system/proxysql.service
/usr/bin/proxysql
/usr/share/proxysql/tools/proxysql_galera_checker.sh
/usr/share/proxysql/tools/proxysql_galera_writer.pl
/etc/proxysql.cnf是 ProxySQL 的配置文件
启动 ProxySQL
[root@mysql-160 ~]# systemctl start proxysql.service
# 查看是否启动
[root@mysql-160 ~]# netstat -anlp | grep proxysql
[root@mysql-160 ~]# netstat -anlp | grep proxysql
tcp 0 0 0.0.0.0:6032 0.0.0.0:* LISTEN 2989/proxysql
tcp 0 0 0.0.0.0:6033 0.0.0.0:* LISTEN 2989/proxysql
6032 是 ProxySQL 的管理端口号,6033是对外服务的端口号ProxySQL 的用户名和密码都是默认的admin
查看 ProxySQL 的版本
[root@mysql-160 ~]# proxysql --version
管理员登录 ProxySQL
[root@mysql-160 ~]# /usr/local/mysql/bin/mysql -uadmin -padmin -h 127.0.0.1 -P 6032
可见有五个库: main、disk、stats 、monitor 和 stats_historymain: 内存配置数据库,即 MEMORY,表里存放后端 db 实例、用户验证、路由规则等信息。main 库中有如下信息:
库下的主要表:mysql_servers: 后端可以连接 MySQL 服务器的列表mysql_users: 配置后端数据库的账号和监控的账号。mysql_query_rules: 指定 Query 路由到后端不同服务器的规则列表。
注: 表名以 runtime_开头的表示 ProxySQL 当前运行的配置内容,不能通过 DML 语句修改。
只能修改对应的不以 runtime 开头的表,然后 “LOAD” 使其生效,“SAVE” 使其存到硬盘以供下次重启加载。disk:持久化的磁盘的配置stats: 统计信息的汇总monitor:一些监控的收集信息,比如数据库的健康状态等stats_history: 这个库是 ProxySQL 收集的有关其内部功能的历史指标
4、配置 ProxySQL 所需账户
在 Master (10.0.0.160) 的MySQL 上创建 ProxySQL 的监控账户和对外访问账户
#proxysql 的监控账户
create user 'monitor'@'10.0.0.%' identified by '123456';
grant all privileges on *.* to 'monitor'@'10.0.0.%' with grant option;
#proxysql 的对外访问账户
create user 'proxysql'@'10.0.0.%' identified by '123456';
grant all privileges on *.* to 'proxysql'@'10.0.0.%' with grant option;
flush privileges;
注意 8.0.x 用户认证的方式需要修改为mysql_native_password
需要在my.cnf 加上这个用户认证方式,再来创建用户
[mysqld]
default_authentication_plugin=mysql_native_password
5、ProxySQL 的多层配置系统
配置结构如下:
https://github.com/sysown/proxysql/wiki/Configuring-ProxySQ