ProxySQL是一款高性能和高可用的MySQL中间件,Percona也推荐使用ProxySQL。它有以下优点:
- 几乎所有的配置均可在线更改(其配置数据基于SQLite存储),无需重启proxysql
- 强大的规则路由引擎,支持读写分离、查询重写、sql流量镜像
- 详细的状态统计,相当于有了统一的查看sql性能和sql语句统计的入口
- 自动重连和重新执行机制,若一个请求在链接或执行过程中意外中断,proxysql会根据其内部机制重新执行该操作
- query cache功能:比mysql自带QC更灵活,可多维度控制哪类语句可以缓存
- 支持连接池(connection pool)
- 支持分库、分表
- 支持负载均衡
- 自动下线后端DB,根据延迟超过阀值、ping 延迟超过阀值、网络不通或宕机都会自动下线节点
ProxySQL的官方网站:https://proxysql.com/。
1、安装ProxySQL
ProxySQL可以从官方提供的GitHub地址下载,也可以在Percona官网上下载。官方提供了源码、RPM包和DEB包的下载。
这里我们通过RPM包进行安装,下载最新版本2.0.1。
通过YUM安装依赖包:
[root@localhost apps]# yum install perl-DBD-mysql
安装ProxySQL:
[root@localhost apps]# rpm -ivh proxysql-2.0.1-1-centos7.x86_64.rpm
2、ProxySQL目录结构
通过RPM包安装的ProxySQL,其数据存储在/var/lib/proxysql目录下,静态配置文件为/etc/proxysql.cnf,启动脚本为/etc/init.d/proxysql。
数据存储目录/var/lib/proxysql在安装完成后是不存在的,只有在ProxySQL启动后才会建立,在该目录下有以下三个文件重要文件:
- proxysql.db:SQLite数据文件,ProxySQL的配置如账号、密码、路由等信息存储在该文件中
- proxysql.log:ProxySQL的日志文件
- proxysql.pid:ProxySQL的PID文件
ProxySQL的静态配置文件/etc/proxysql.cnf仅用于配置一些启动选项、SQLite数据目录等。ProxySQL只在第一次启动时读取该配置文件进行初始化,以后只读取proxysql.db。
3、ProxySQL的端口
ProxySQL在启动后,会启动一个管理端口和一个客户端端口。默认的管理端口为6032,账号密码均为admin,供管理ProxySQL使用,仅允许本地登录;默认客户端端口为6033,提供对后端DB的访问,账号密码通过管理端设置。
4、ProxySQL服务管理与连接ProxySQL管理端
使用以下命令可以启动|停止|重启动ProxySQL:
/etc/init.d/proxysql start|stop|restart
连接ProxySQL可以使用MySQL提供的连接工具mysql,执行以下命令:
[root@localhost bin]# ./mysql -h 127.0.0.1 -P 6032 -u admin -p
输入密码后即进入ProxySQL的交互式命令行界面:
Welcome to the MySQL monitor. Commands end with ; or g. Your MySQL connection id is 1 Server version: 5.5.30 (ProxySQL Admin Module) Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or 'h' for help. Type 'c' to clear the current input statement. mysql>
5、ProxySQL的库表功能介绍
5.1、ProxySQL中的数据库
登录ProxySQL管理端后,执行show databases;可以看到ProxySQL中有以下几个数据库:
+-----+---------------+-------------------------------------+ | seq | name | file | +-----+---------------+-------------------------------------+ | 0 | main | | | 2 | disk | /var/lib/proxysql/proxysql.db | | 3 | stats | | | 4 | monitor | | | 5 | stats_history | /var/lib/proxysql/proxysql_stats.db | +-----+---------------+-------------------------------------+
- main:内存配置数据库,表里存放后端DB实例、用户验证、路由规则等信息。表名以runtime_开头的表示当前运行的配置,不能通过dml语句修改,只能修改对应的不以rumtime_开头的表,然后load使其生效,save使其保存到硬盘
- disk:持久化到硬盘的配置,对应ProxySQL读取的SQLite数据文件/var/lib/proxysql/proxysql.db
- stats:ProxySQL在运行时抓取的统计信息,包括后端命令执行的次数、流量、processlist、查询种类汇总/执行时间等
- monitor:monitor模块收集的信息,主要是后端DB的健康状态、延迟检查
- stats_history:统计信息的历史记录
5.2、main库中的常用表
- global_variables:设置变量,包括监听的端口、管理账号等
- mysql_replication_hostgroups:监视指定主机组中所有MySQL的read-only值,并根据read-only值将主机分配给写入器或读取器主机组;ProxySQL的monitor模块会监控所有组中MySQL的read-only值,如果发现read-only值发生改变,会自动改写mysql_servers表里的hostgroup关系,以达到自动Failover效果
- mysql_servers:设置后端MySQL主机
- mysql_user:设置后端MySQL的程序账号和监控账号
- scheduler:ProxySQL的任务计划
5.3、stats库中的常用表
- stats_mysql_commands_counters:统计各种SQL类型的执行次数和时间,通过参数mysql-commands_stats控制,默认为true
- stats_mysql_connection_pool:后端MySQL的连接信息
- stats_mysql_processlist:类似MySQL的show processlist命令,查看各线程的状态
- stats_mysql_query_digest:统计各类SQL的执行次数、时间消耗等。通过变量mysql-query_digests控制,默认为true
- tats_mysql_query_rules:路由命中次数统计
5.4、monitor库中的常用表
- mysql_server_connect_log:对后端MySQL进行连接测试的日志
- mysql_server_ping_log:存放使用mysql ping API ping后端MySQL以检测是否可用的日志
- mysql_server_replication_lag_log:后端MySQL主从复制延迟的检测日志