ProxySQL 基础


一、ProxySQL 介绍        ProxySQL 是基于MySQL的一款开源的中间件产品,是一个灵活的MySQL代理层,可以实现读写分离,支持Query路由功能,支持动态指定某个SQL进行缓存,支持动态加载(无需重新ProxySQL服务),故障切换和一些过滤功能。         ProxySQL相关网站:          https://www.proxysql.com/   https://github.com/sysown/proxysql/wiki   二、环境准备  
IP server-id 数据库版本 备注
192.168.1.1 13306 5.7.28 Master+ProxySQL
192.168.1.2 23306 5.7.28 slave
192.168.1.3 33306 5.7.28 slave
ProxySQL 2.0.x 版本支持 MGR   三、ProxySQL 安装与启动     1.下载
wget https://github.com/sysown/proxysql/releases/download/v2.0.8/proxysql-2.0.8-1-centos7.x86_64.rpm    
    2.安装ProxySQL
# rpm -ivh proxysql-2.0.8-1-centos7.x86_64.rpm
  查看安装路径及我文件
# 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 的配置文件

    3.启动ProxySQL
# systemctl start proxysql.service
  查看是否启动
# netstat -anlp | grep proxysql
6032 是 ProxySQL 的管理端口号,6033是对外服务的端口号 
ProxySQL 的用户名和密码都是默认的 admin 
  4.管理登陆ProxySQL
# mysql -uadmin -padmin -h127.0.0.1 -P6032
 
mysql> show databases;
+-----+---------------+---------------------------------------+
| seq | name          | file                                  |
+-----+---------------+---------------------------------------+
| 0   | main          |                                       |
| 2   | disk          | /data/proxysql/data/proxysql.db       |
| 3   | stats         |                                       |
| 4   | monitor       |                                       |
| 5   | stats_history | /data/proxysql/data/proxysql_stats.db |
+-----+---------------+---------------------------------------+
    有五个数据库:main、disk、stats 、monitor 和 stats_history     A. main:内存配置数据库,即:MEMORY,表里存放后端DB实例、用户验证、路由规则等…    B.main库下的主要几张表:      mysql_servers:后端可以连接MySQL服务器的列表      mysql_users:配置后端数据库的账号和监控的账号      mysql_query_rules:指定query 路由到后端不同服务器的规则列表    注:表名以 runtime_开头的表示ProxySQL当前运行的配置内容,不能通过DML语句修改。      只能修改对应的不以 runtime 开头的表,然后 “LOAD” 使其生效,“SAVE” 使其存到硬盘以供下次重启加载。    C.disk:持久化磁盘的配置    D.stats:统计信息的汇总    E.monitor:一些监控的收集信息,比如数据库的健康状态等。    F.stats_history:这个库是ProxySQL收集有关其内部功能的历史指标       5.配置ProxySQL所需账户     在master(192.168.1.1)上的mysql上创建ProxySQL的监控账户和对外访问账户
# proxysql 监控账号
create user monitor@'192.%' identified by ‘Monitor@qq.com’;
 
grant select on *.* to monitor@'192.%’;
 
# proxysql 对外访问账号
create user yoon@'192.%' identified by ‘Yoon123!@#’;
 
grant all privileges on *.* to yoon@'192.%';
 
flush privileges;
   注意:8.0.X 用户认证需要修改mysql_native_password    在配置文件中添加用户认证方式:
[mysqld]
default_authentication_plugin=mysql_native_password
         6.ProxySQL配置结构如下: 整套配置系统分为三层: 1.RUNTIME 2.MEMORY 3.DISK 和 CONFIG FILE RUNTIME:代表proxysql当前生效的正在使用的配置,无法直接修改这里的配置,必须要从下一层load进来。 MEMORY:MEMORY层上面连接RUNTIME层,下面连接DISK持久层。这层可以操作proxysql配置,随便修改,不会影响生产环境。修改一个配置都是在MEMORY层完成的,确认正常之后在加载到RUNTIME和持久化的磁盘上。 DISK和CONFIG FILE:持久化配置信息,重启后内存中的数据会消失,所需要将配置信息保存到磁盘中,重启时,可从磁盘加载。    7.重新配置MySQL用户:      1、LOAD MYSQL USERS FROM MEMORY / LOAD MYSQL USERS TO RUNTIME           将内存数据库中的配置加载到 runtime 数据结构,反之亦然。      2、SAVE MYSQL USERS TO MEMORY / SAVE MYSQL USERS FROM RUNTIME           将 MySQL 用户从 runtime 持久化到内存数据库。      3、LOAD MYSQL USERS TO MEMORY / LOAD MYSQL USERS FROM DISK           从磁盘数据库中加载 MySQL 用户到内存数据库中。      4、SAVE MYSQL USERS FROM MEMORY / SAVE MYSQL USERS TO DISK           将内存数据库中的 MySQL 用户持久化到磁盘数据库中。      5、LOAD MYSQL USERS FROM CONFIG          从配置文件中加载 MySQL 用户到内存数据库中。   8.要处理MySQL Server:      1、LOAD MYSQL SERVERS FROM MEMORY / LOAD MYSQL SERVERS TO RUNTIME           将 MySQL server 从内存数据库中加载到 runtime。      2、SAVE MYSQL SERVERS TO MEMORY / SAVE MYSQL SERVERS FROM RUNTIME           将 MySQL server 从 runtime 持久化到内存数据库中。      3、LOAD MYSQL SERVERS TO MEMORY / LOAD MYSQL SERVERS FROM DISK           从磁盘数据库中加载 MySQL server 到内存数据库。      4、SAVE MYSQL SERVERS FROM MEMORY / SAVE MYSQL SERVERS TO DISK           从内存数据库中将 MySQL server 持久化到磁盘数据库中。      5、LOAD MYSQL SERVERS FROM CONFIG          从配置文件中加载 MySQL server 到内存数据库中   9.要处理MySQL的查询规则(mysql query rules):     1、 LOAD MYSQL QUERY RULES FROM MEMORY / LOAD MYSQL QUERY RULES TO RUNTIME          将 MySQL query rules 从内存数据库加载到 runtime 数据结构。     2、 SAVE MYSQL QUERY RULES TO MEMORY / SAVE MYSQL QUERY RULES FROM RUNTIME          将 MySQL query rules 从 runtime 数据结构中持久化到内存数据库。     3、 LOAD MYSQL QUERY RULES TO MEMORY / LOAD MYSQL QUERY RULES FROM DISK          从磁盘数据库中加载 MySQL query rules 到内存数据库中。     4、 SAVE MYSQL QUERY RULES FROM MEMORY / SAVE MYSQL QUERY RULES TO DISK         将 MySQL query rules 从内存数据库中持久化到磁盘数据库中。     5、 LOAD MYSQL QUERY RULES FROM CONFIG        从配置文件中加载 MySQL query rules 到内存数据库中。   10.要处理MySQL 变量(mysql variables):     1、 LOAD MYSQL VARIABLES FROM MEMORY / LOAD MYSQL VARIABLES TO RUNTIME        将 MySQL variables 从内存数据库加载到 runtime 数据结构。     2、 SAVE MYSQL VARIABLES TO MEMORY / SAVE MYSQL VARIABLES FROM RUNTIME        将 MySQL variables 从 runtime 数据结构中持久化到内存数据中。     3、 LOAD MYSQL VARIABLES TO MEMORY / LOAD MYSQL VARIABLES FROM DISK        从磁盘数据库中加载 MySQL variables 到内存数据库中。     4、 SAVE MYSQL VARIABLES FROM MEMORY / SAVE MYSQL VARIABLES TO DISK        将 MySQL variables 从内存数据库中持久化到磁盘数据库中。     5、 LOAD MYSQL VARIABLES FROM CONFIG       从配置文件中加载 MySQL variables 到内存数据库中。   11.要处理管理变量:    1、 LOAD ADMIN VARIABLES FROM MEMORY / LOAD ADMIN VARIABLES TO RUNTIME        将 admin variables 从内存数据库加载到 runtime 数据结构。    2、 SAVE ADMIN VARIABLES TO MEMORY / SAVE ADMIN VARIABLES FROM RUNTIME        将 admin variables 从 runtime 持久化到内存数据库中。    3、 LOAD ADMIN VARIABLES TO MEMORY / LOAD ADMIN VARIABLES FROM DISK        从磁盘数据库中加载 admin variables 到内存数据库中。    4、 SAVE ADMIN VARIABLES FROM MEMORY / SAVE ADMIN VARIABLES TO DISK        将 admin variables 从内存数据库中持久化到磁盘数据库。    5、 LOAD ADMIN VARIABLES FROM CONFIG        从配置文件中加载 admin variables 到内存数据库中。     一般在内存层修改,然后保存到运行系统,保存到磁盘数据库系统 load xxx to runtime; save xxx to disk;   管理配置: disk and config file 持久化配置文件 disk -> 是sqlite3 数据库 ,默认位置是$DATADIR/proxysql.db( /var/lib/proxysql/proxysql.db) config file 是一个传统配置文件:一般不更改   三者关系: 1.ProxySQL启动时,首先去找/etc/proxysql.cnf配置文件,找到它的datadir,如果datadir下有proxysql.db,就加载proxysql.db 2.如果启动时,带有—init标志,会用/etc/proxysql.cnf的配置,把runtime、disk全部初始化一下 3.在调用是调用-reload会把/etc/proxysql.cnf和disk中配置进行合并。如果冲突需要用户干预。disk会覆盖config file   传统配置文件: 传统配置文件默认路径为/etc/proxysql.cnf,也可以在二进制程序proxysql上使用-c或–config来手动指定配置文件   小结: 几个常用的命令:(只要不加载到runtime,修改的配置就不会生效) LOAD MYSQL USERS TO RUNTIME;  将内存数据库中的配置加载到 runtime 数据结构 SAVE MYSQL USERS TO DISK;   将内存数据库中的 MySQL 用户持久化到磁盘数据库中。 LOAD MYSQL SERVERS TO RUNTIME;  将 MySQL server 从内存数据库中加载到 runtime。 SAVE MYSQL SERVERS TO DISK;   从内存数据库中将 MySQL server 持久化到磁盘数据库中。 LOAD MYSQL QUERY RULES TO RUNTIME;  将 MySQL query rules 从内存数据库加载到 runtime 数据结构。 SAVE MYSQL QUERY RULES TO DISK;  将 MySQL query rules 从内存数据库中持久化到磁盘数据库中。 LOAD MYSQL VARIABLES TO RUNTIME;  将 MySQL variables 从内存数据库加载到 runtime 数据结构。 SAVE MYSQL VARIABLES TO DISK;   将 MySQL variables 从内存数据库中持久化到磁盘数据库中。 LOAD ADMIN VARIABLES TO RUNTIME;   将 admin variables 从内存数据库加载到 runtime 数据结构。 SAVE ADMIN VARIABLES TO DISK;  将 admin variables 从内存数据库中持久化到磁盘数据库。 注意:只有加载到 runtime 状态时才会去做最后的有效性验证。在保存到内存数据库或持久化到磁盘上时,都不会发生任何警告或错误。当加载到 runtime 时,如果出现错误,将恢复为之前保存得状态,这时可以去检查错误日志。