ProxySQL使用三层存储来管理配置,这使得配置修改生效非常灵活,上层应用毫无感知。配置管理的相关命令相信我们都很熟悉了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
LOAD MYSQL USERS TO RUNTIME;
SAVE MYSQL USERS TO DISK;

LOAD MYSQL SERVERS TO RUNTIME;
SAVE MYSQL SERVERS TO DISK;

LOAD MYSQL QUERY RULES TO RUNTIME;
SAVE MYSQL QUERY RULES TO DISK;

LOAD MYSQL VARIABLES TO RUNTIME;
SAVE MYSQL VARIABLES TO DISK;

LOAD ADMIN VARIABLES TO RUNTIME;
SAVE ADMIN VARIABLES TO DISK;

从下层到上层传递使用load .. to/from , 从上层到下层传递使用save … to/from 。多用几次就很熟悉了。初次之外,还有一些命令,很有用,但官方没有在文档中提及,只是分散在issue或blog中,这里统一做一个汇总。

  • PROXYSQL FLUSH CONFIGDB;
    这个命令的使用场景是当proxysql的数据库文件proxysql.db发生变更时,使proxysql进程重新与之关联。这对多个proxysql同步配置非常有用。可以将配置好的proxysql.db传输到另一台proxysql,并覆盖其原有的db文件,然后执行PROXYSQL FLUSH CONFIGDB;使得proxysql进程与之关联,但其中的配置并未生效,还需执行load … to mem;load … to run;才行。这仍然使的配置的同步变得简单。
  • PROXYSQL READONLY;
    设置管理台为只读,防止误操作修改数据。也可使用set admin-read_only=‘true’; 然后load .. to run;来实现。
  • PROXYSQL READWRITE;
    当管理台设置为只读时,通过这个命令才能解除只读状态。
  • PROXYSQL PAUSE;
    该命令使proxysql停止接受新的连接,但允许已经连上的连接处理完事务。这使得关闭proxysql更优雅,对应用的影响更小。但如果应用端使用连接池的话,貌似不能起到预期的效果。因为客户端执行完SQL并不断开连接。
  • PROXYSQL RESUME;
    该命令恢复处于PAUSE状态的proxysql,使其正常工作。
  • PROXYSQL FLUSH LOGS;
    该命令关闭并重新打开proxysql的error log(proxysql.log),如果开启了query event log则会rotate一个新的日志文件。这在rotate log时很有用. proxysql的日志有时会打出许多NOTE信息,从而掩盖有用的日志。我们可以通过定时任务定期删除这些没用的日志信息。一个简单的脚本如下:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #!/bin/bash

    admin='mysql -uadmin -padmin -h127.0.0.1 -P6032'
    sed -i '/\[INFO\] Received command SET @@session\.autocommit = OFF/d' /db/proxysql/data/proxysql.log

    $admin -e "proxysql flush logs;"

    logdir=/db/proxysql/logs
    nlog=`ls -l $logdir | grep queries | wc -l`

    if [ $nlog -ge 10 ];then
    cd $logdir
    ls $logdir | grep queries | head -n 8 | xargs rm -f
    fi