ProxySQL 基础

一、ProxySQL 介绍 
      ProxySQL 是基于MySQL的一款开源的中间件产品,是一个灵活的MySQL代理层,可以实现读写分离,支持Query路由功能,支持动态指定某个SQL进行缓存,支持动态加载(无需重新ProxySQL服务),故障切换和一些过滤功能。
 
      ProxySQL相关网站:
      
  https://www.proxysql.com/
 
二、环境准备
 
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 时,如果出现错误,将恢复为之前保存得状态,这时可以去检查错误日志。 
 
  
posted @ 2022-06-27 16:37  __Yoon  阅读(251)  评论(0编辑  收藏  举报