Hi! 👋 We are doing a big documentation refresh. Help us improve — what's missing or could be better? Let us know! Simply send an email or start a conversation in Google Groups!

Admin Commands

ProxySQL uses a multi-layer configuration system consisting of the Configuration File, Disk Database, Main (Memory) Database, and the Runtime data structures. Moving configuration between these layers is handled via LOAD and SAVE commands.

Table of Contents

Configuration Layers

ProxySQL employs a unique architecture to manage its configuration. For a detailed explanation of why this system exists and how the layers interact, see The Multi-Layer Configuration System.


MySQL Commands

MySQL Servers & Hostgroups

  • LOAD MYSQL SERVERS TO RUNTIME (or TO RUN)
  • SAVE MYSQL SERVERS TO DISK
  • LOAD MYSQL SERVERS FROM DISK
  • SAVE MYSQL SERVERS TO MEMORY (or TO MEM)
  • LOAD MYSQL SERVERS FROM MEMORY (or FROM MEM)
  • LOAD MYSQL SERVERS FROM CONFIG

See Multi-Layer Configuration for details on how configuration flows between layers.

MySQL Users

  • LOAD MYSQL USERS TO RUNTIME (or TO RUN)
  • SAVE MYSQL USERS TO DISK
  • LOAD MYSQL USERS FROM DISK
  • SAVE MYSQL USERS TO MEMORY (or TO MEM)
  • LOAD MYSQL USERS FROM MEMORY (or FROM MEM)
  • LOAD MYSQL USERS FROM CONFIG

See Multi-Layer Configuration for details on how configuration flows between layers.

MySQL Query Rules

  • LOAD MYSQL QUERY RULES TO RUNTIME (or TO RUN)
  • SAVE MYSQL QUERY RULES TO DISK
  • LOAD MYSQL QUERY RULES FROM DISK
  • SAVE MYSQL QUERY RULES TO MEMORY (or TO MEM)
  • LOAD MYSQL QUERY RULES FROM MEMORY (or FROM MEM)
  • LOAD MYSQL QUERY RULES FROM CONFIG

See Multi-Layer Configuration for details on how configuration flows between layers.

MySQL Variables

  • LOAD MYSQL VARIABLES TO RUNTIME (or TO RUN)
  • SAVE MYSQL VARIABLES TO DISK
  • LOAD MYSQL VARIABLES FROM DISK
  • SAVE MYSQL VARIABLES TO MEMORY (or TO MEM)
  • LOAD MYSQL VARIABLES FROM MEMORY (or FROM MEM)
  • LOAD MYSQL VARIABLES FROM CONFIG

LOAD MYSQL VARIABLES TO RUNTIME and its memory aliases return an OK packet whose information field has this exact summary shape:

Records: <records> Updated: <updated> Rejected: <rejected> Unknown: <unknown>

Records is the number of MySQL variable rows examined, Updated is the number accepted into runtime, Rejected is the number of known variables whose values failed validation, and Unknown is the number of names not supported by the running release. A rejected known value is not activated; ProxySQL restores the current valid value in the configuration table when one is available. Unsupported rows are removed from the in-memory variable table. The command can succeed while reporting nonzero Rejected or Unknown, so automation should inspect the information field instead of relying only on the OK status.

See Multi-Layer Configuration for details on how configuration flows between layers.


MySQL X Commands (v4.0+)

These commands are registered by the MySQL X Protocol plugin. They are available only when the plugin library is configured and loaded successfully. See MySQL X Protocol for table schemas, runtime behavior, and released limitations.

MySQL X Users

  • LOAD MYSQLX USERS TO RUNTIME
    • aliases: LOAD MYSQLX USERS FROM MEMORY, LOAD MYSQLX USERS FROM MEM, LOAD MYSQLX USERS TO RUN
  • SAVE MYSQLX USERS TO MEMORY
    • aliases: SAVE MYSQLX USERS TO MEM, SAVE MYSQLX USERS FROM RUNTIME, SAVE MYSQLX USERS FROM RUN
  • LOAD MYSQLX USERS FROM DISK
  • SAVE MYSQLX USERS TO DISK

MySQL X Routes

  • LOAD MYSQLX ROUTES TO RUNTIME
    • aliases: LOAD MYSQLX ROUTES FROM MEMORY, LOAD MYSQLX ROUTES FROM MEM, LOAD MYSQLX ROUTES TO RUN
  • SAVE MYSQLX ROUTES TO MEMORY
    • aliases: SAVE MYSQLX ROUTES TO MEM, SAVE MYSQLX ROUTES FROM RUNTIME, SAVE MYSQLX ROUTES FROM RUN
  • LOAD MYSQLX ROUTES FROM DISK
  • SAVE MYSQLX ROUTES TO DISK

LOAD MYSQLX ROUTES TO RUNTIME also reconciles the plugin’s listeners with the active route set.

MySQL X Backend Endpoints

  • LOAD MYSQLX BACKEND ENDPOINTS TO RUNTIME
    • aliases: LOAD MYSQLX BACKEND ENDPOINTS FROM MEMORY, LOAD MYSQLX BACKEND ENDPOINTS FROM MEM, LOAD MYSQLX BACKEND ENDPOINTS TO RUN
  • SAVE MYSQLX BACKEND ENDPOINTS TO MEMORY
    • aliases: SAVE MYSQLX BACKEND ENDPOINTS TO MEM, SAVE MYSQLX BACKEND ENDPOINTS FROM RUNTIME, SAVE MYSQLX BACKEND ENDPOINTS FROM RUN
  • LOAD MYSQLX BACKEND ENDPOINTS FROM DISK
  • SAVE MYSQLX BACKEND ENDPOINTS TO DISK

MySQL X Variables

  • LOAD MYSQLX VARIABLES TO RUNTIME
    • aliases: LOAD MYSQLX VARIABLES FROM MEMORY, LOAD MYSQLX VARIABLES FROM MEM, LOAD MYSQLX VARIABLES TO RUN
  • SAVE MYSQLX VARIABLES TO MEMORY
    • aliases: SAVE MYSQLX VARIABLES TO MEM, SAVE MYSQLX VARIABLES FROM RUNTIME, SAVE MYSQLX VARIABLES FROM RUN
  • LOAD MYSQLX VARIABLES FROM DISK
  • SAVE MYSQLX VARIABLES TO DISK

The MySQL X disk commands have no aliases. Command matching is case-insensitive, normalizes whitespace, and accepts a trailing semicolon.

For each entity, LOAD ... TO RUNTIME and its aliases read the editable mysqlx_* Admin table and install plugin-owned in-memory state. They do not write runtime_mysqlx_*. SAVE ... TO MEMORY, SAVE ... TO MEM, SAVE ... FROM RUNTIME, and SAVE ... FROM RUN dump plugin-owned state into the editable Admin table; they do not read runtime_mysqlx_*. The runtime tables are read-only projections refreshed from plugin state immediately before an Admin SELECT references them.

LOAD ... FROM DISK replaces the editable Admin table from the disk table, and SAVE ... TO DISK replaces the disk table from the editable Admin table. These copies are transactional; an empty source clears the destination.


PostgreSQL Commands (v3.0+)

PostgreSQL Servers

  • LOAD PGSQL SERVERS TO RUNTIME (or TO RUN)
  • SAVE PGSQL SERVERS TO DISK
  • LOAD PGSQL SERVERS FROM DISK
  • SAVE PGSQL SERVERS TO MEMORY (or TO MEM)
  • LOAD PGSQL SERVERS FROM MEMORY (or FROM MEM)
  • LOAD PGSQL SERVERS FROM CONFIG

See Multi-Layer Configuration for details on how configuration flows between layers.

PostgreSQL Users

  • LOAD PGSQL USERS TO RUNTIME (or TO RUN)
  • SAVE PGSQL USERS TO DISK
  • LOAD PGSQL USERS FROM DISK
  • SAVE PGSQL USERS TO MEMORY (or TO MEM)
  • LOAD PGSQL USERS FROM MEMORY (or FROM MEM)
  • LOAD PGSQL USERS FROM CONFIG

See Multi-Layer Configuration for details on how configuration flows between layers.

PostgreSQL Query Rules

  • LOAD PGSQL QUERY RULES TO RUNTIME (or TO RUN)
  • SAVE PGSQL QUERY RULES TO DISK
  • LOAD PGSQL QUERY RULES FROM DISK
  • SAVE PGSQL QUERY RULES TO MEMORY (or TO MEM)
  • LOAD PGSQL QUERY RULES FROM MEMORY (or FROM MEM)
  • LOAD PGSQL QUERY RULES FROM CONFIG

See Multi-Layer Configuration for details on how configuration flows between layers.

PostgreSQL Variables

  • LOAD PGSQL VARIABLES TO RUNTIME (or TO RUN)
  • SAVE PGSQL VARIABLES TO DISK
  • LOAD PGSQL VARIABLES FROM DISK
  • SAVE PGSQL VARIABLES TO MEMORY (or TO MEM)
  • LOAD PGSQL VARIABLES FROM MEMORY (or FROM MEM)
  • LOAD PGSQL VARIABLES FROM CONFIG

LOAD PGSQL VARIABLES TO RUNTIME and its memory aliases return the same information-field format:

Records: <records> Updated: <updated> Rejected: <rejected> Unknown: <unknown>

The fields have the same meaning as for MySQL: examined rows, accepted updates, known variables with invalid values, and unsupported names. Rejected or unknown PostgreSQL variables are not installed at runtime even though the load command itself returns an OK packet.

See Multi-Layer Configuration for details on how configuration flows between layers.


Generative AI & MCP Commands (v4.0+)

MCP Query Rules

  • LOAD MCP QUERY RULES TO RUNTIME (or TO RUN)
  • SAVE MCP QUERY RULES TO DISK
  • LOAD MCP QUERY RULES FROM DISK
  • SAVE MCP QUERY RULES TO MEMORY (or TO MEM)
  • LOAD MCP QUERY RULES FROM MEMORY (or FROM MEM)

See Multi-Layer Configuration for details on how configuration flows between layers.

MCP Variables

  • LOAD MCP VARIABLES TO RUNTIME (or TO RUN)
  • SAVE MCP VARIABLES TO DISK
  • LOAD MCP VARIABLES FROM DISK
  • SAVE MCP VARIABLES TO MEMORY (or TO MEM)
  • LOAD MCP VARIABLES FROM MEMORY (or FROM MEM)
  • LOAD MCP VARIABLES FROM CONFIG

See Multi-Layer Configuration for details on how configuration flows between layers.

GENAI Variables

  • LOAD GENAI VARIABLES TO RUNTIME (or TO RUN)
  • SAVE GENAI VARIABLES TO DISK
  • LOAD GENAI VARIABLES FROM DISK
  • SAVE GENAI VARIABLES TO MEMORY (or TO MEM)
  • LOAD GENAI VARIABLES FROM MEMORY (or FROM MEM)
  • LOAD GENAI VARIABLES FROM CONFIG

See Multi-Layer Configuration for details on how configuration flows between layers.


Core Admin & System Commands

ClickHouse Users and Variables

These commands exist only in builds compiled with PROXYSQLCLICKHOUSE; user commands additionally require the ClickHouse server to be enabled:

DirectionExact ClickHouse user spellingsExact ClickHouse variable spellings
Memory → runtimeLOAD CLICKHOUSE USERS TO RUNTIME
LOAD CLICKHOUSE USERS FROM MEMORY
LOAD CLICKHOUSE USERS FROM MEM
LOAD CLICKHOUSE USERS TO RUN
LOAD CLICKHOUSE VARIABLES TO RUNTIME
LOAD CLICKHOUSE VARIABLES FROM MEMORY
LOAD CLICKHOUSE VARIABLES FROM MEM
LOAD CLICKHOUSE VARIABLES TO RUN
Runtime → memorySAVE CLICKHOUSE USERS TO MEMORY
SAVE CLICKHOUSE USERS TO MEM
SAVE CLICKHOUSE USERS FROM RUNTIME
SAVE CLICKHOUSE USERS FROM RUN
SAVE CLICKHOUSE VARIABLES TO MEMORY
SAVE CLICKHOUSE VARIABLES TO MEM
SAVE CLICKHOUSE VARIABLES FROM RUNTIME
SAVE CLICKHOUSE VARIABLES FROM RUN
Disk → memoryLOAD CLICKHOUSE USERS FROM DISK
LOAD CLICKHOUSE USERS TO MEMORY
LOAD CLICKHOUSE USERS TO MEM
LOAD CLICKHOUSE VARIABLES FROM DISK
LOAD CLICKHOUSE VARIABLES TO MEMORY
LOAD CLICKHOUSE VARIABLES TO MEM
Memory → diskSAVE CLICKHOUSE USERS TO DISK
SAVE CLICKHOUSE USERS FROM MEMORY
SAVE CLICKHOUSE USERS FROM MEM
SAVE CLICKHOUSE VARIABLES TO DISK
SAVE CLICKHOUSE VARIABLES FROM MEMORY
SAVE CLICKHOUSE VARIABLES FROM MEM

See ClickHouse Configuration for schemas, variable validation, and the compile/startup gates.

Admin Variables

  • LOAD ADMIN VARIABLES TO RUNTIME (or TO RUN)
  • SAVE ADMIN VARIABLES TO DISK
  • LOAD ADMIN VARIABLES FROM DISK
  • SAVE ADMIN VARIABLES TO MEMORY (or TO MEM)
  • LOAD ADMIN VARIABLES FROM MEMORY (or FROM MEM)
  • LOAD ADMIN VARIABLES FROM CONFIG

See Multi-Layer Configuration for details on how configuration flows between layers.

ProxySQL Servers (Cluster Nodes)

  • LOAD PROXYSQL SERVERS TO RUNTIME (or TO RUN)
  • SAVE PROXYSQL SERVERS TO DISK
  • LOAD PROXYSQL SERVERS FROM DISK
  • SAVE PROXYSQL SERVERS TO MEMORY (or TO MEM)
  • LOAD PROXYSQL SERVERS FROM MEMORY (or FROM MEM)
  • LOAD PROXYSQL SERVERS FROM CONFIG

See Multi-Layer Configuration for details on how configuration flows between layers.

Scheduler

  • LOAD SCHEDULER TO RUNTIME (or TO RUN)
  • SAVE SCHEDULER TO DISK
  • LOAD SCHEDULER FROM DISK
  • SAVE SCHEDULER TO MEMORY (or TO MEM)
  • LOAD SCHEDULER FROM MEMORY (or FROM MEM)
  • LOAD SCHEDULER FROM CONFIG

See Multi-Layer Configuration for details on how configuration flows between layers.

REST API

  • LOAD RESTAPI TO RUNTIME (or TO RUN)
  • SAVE RESTAPI TO DISK
  • LOAD RESTAPI FROM DISK
  • SAVE RESTAPI TO MEMORY (or TO MEM)
  • LOAD RESTAPI FROM MEMORY (or FROM MEM)
  • LOAD RESTAPI FROM CONFIG

See Multi-Layer Configuration for details on how configuration flows between layers.

SQLite3 Server

  • LOAD SQLITESERVER VARIABLES TO RUNTIME (or TO RUN)
  • SAVE SQLITESERVER VARIABLES TO DISK
  • LOAD SQLITESERVER VARIABLES FROM DISK
  • SAVE SQLITESERVER VARIABLES TO MEMORY (or TO MEM)
  • LOAD SQLITESERVER VARIABLES FROM MEMORY (or FROM MEM)

See Multi-Layer Configuration for details on how configuration flows between layers.


Specialized Commands

Exact released aliases

The sections above use parenthetical shorthand for the common memory/runtime aliases. The following compact inventory records the additional exact spellings accepted by the released command dispatcher. They perform the same layer transfer as their canonical command; command matching remains case-insensitive.

ModuleAdditional exact spellings
Admin variablesLOAD ADMIN VARIABLES TO MEM
LOAD ADMIN VARIABLES TO MEMORY
SAVE ADMIN VARIABLES FROM MEM
SAVE ADMIN VARIABLES FROM MEMORY
SAVE ADMIN VARIABLES FROM RUN
SAVE ADMIN VARIABLES FROM RUNTIME
LDAP variablesLOAD LDAP VARIABLES FROM DISK
LOAD LDAP VARIABLES FROM MEM
LOAD LDAP VARIABLES FROM MEMORY
LOAD LDAP VARIABLES TO MEM
LOAD LDAP VARIABLES TO MEMORY
LOAD LDAP VARIABLES TO RUN
LOAD LDAP VARIABLES TO RUNTIME
SAVE LDAP VARIABLES FROM MEM
SAVE LDAP VARIABLES FROM MEMORY
SAVE LDAP VARIABLES FROM RUN
SAVE LDAP VARIABLES FROM RUNTIME
SAVE LDAP VARIABLES TO DISK
SAVE LDAP VARIABLES TO MEM
SAVE LDAP VARIABLES TO MEMORY
MCP profilesLOAD MCP PROFILES FROM DISK
LOAD MCP PROFILES FROM MEM
LOAD MCP PROFILES FROM MEMORY
LOAD MCP PROFILES TO MEMORY
LOAD MCP PROFILES TO RUN
LOAD MCP PROFILES TO RUNTIME
SAVE MCP PROFILES FROM RUN
SAVE MCP PROFILES FROM RUNTIME
SAVE MCP PROFILES TO DISK
SAVE MCP PROFILES TO MEM
SAVE MCP PROFILES TO MEMORY
MCP query rulesLOAD MCP QUERY RULES TO MEMORY
SAVE MCP QUERY RULES FROM RUN
SAVE MCP QUERY RULES FROM RUNTIME
MCP variablesLOAD MCP VARIABLES TO MEM
LOAD MCP VARIABLES TO MEMORY
SAVE MCP VARIABLES FROM MEM
SAVE MCP VARIABLES FROM MEMORY
SAVE MCP VARIABLES FROM RUN
SAVE MCP VARIABLES FROM RUNTIME
GenAI variablesSAVE GENAI VARIABLES FROM RUN
SAVE GENAI VARIABLES FROM RUNTIME
MySQL firewallLOAD MYSQL FIREWALL FROM CONFIG
LOAD MYSQL FIREWALL FROM MEM
LOAD MYSQL FIREWALL FROM MEMORY
SAVE MYSQL FIREWALL FROM RUN
SAVE MYSQL FIREWALL FROM RUNTIME
SAVE MYSQL FIREWALL TO MEM
SAVE MYSQL FIREWALL TO MEMORY
PostgreSQL firewallLOAD PGSQL FIREWALL FROM CONFIG
LOAD PGSQL FIREWALL FROM MEM
LOAD PGSQL FIREWALL FROM MEMORY
SAVE PGSQL FIREWALL FROM RUN
SAVE PGSQL FIREWALL FROM RUNTIME
SAVE PGSQL FIREWALL TO MEM
SAVE PGSQL FIREWALL TO MEMORY
MySQL modulesSAVE MYSQL DIGEST TO DISK
SAVE MYSQL QUERY RULES FROM RUN
SAVE MYSQL QUERY RULES FROM RUNTIME
SAVE MYSQL SERVERS FROM RUN
SAVE MYSQL SERVERS FROM RUNTIME
SAVE MYSQL USERS FROM RUN
SAVE MYSQL USERS FROM RUNTIME
SAVE MYSQL VARIABLES FROM RUN
SAVE MYSQL VARIABLES FROM RUNTIME
PostgreSQL modulesSAVE PGSQL DIGEST TO DISK
SAVE PGSQL QUERY RULES FROM RUN
SAVE PGSQL QUERY RULES FROM RUNTIME
SAVE PGSQL SERVERS FROM RUN
SAVE PGSQL SERVERS FROM RUNTIME
SAVE PGSQL USERS FROM RUN
SAVE PGSQL USERS FROM RUNTIME
SAVE PGSQL VARIABLES FROM RUN
SAVE PGSQL VARIABLES FROM RUNTIME
ProxySQL servers, REST API, and schedulerSAVE PROXYSQL SERVERS FROM RUN
SAVE PROXYSQL SERVERS FROM RUNTIME
SAVE RESTAPI FROM RUN
SAVE RESTAPI FROM RUNTIME
SAVE SCHEDULER FROM RUN
SAVE SCHEDULER FROM RUNTIME
SQLite3 server variablesLOAD SQLITESERVER VARIABLES FROM CONFIG
LOAD SQLITESERVER VARIABLES TO MEM
LOAD SQLITESERVER VARIABLES TO MEMORY
SAVE SQLITESERVER VARIABLES FROM MEM
SAVE SQLITESERVER VARIABLES FROM MEMORY
SAVE SQLITESERVER VARIABLES FROM RUN
SAVE SQLITESERVER VARIABLES FROM RUNTIME
TSDB variablesLOAD TSDB VARIABLES FROM CONFIG
LOAD TSDB VARIABLES FROM MEM
LOAD TSDB VARIABLES FROM MEMORY
LOAD TSDB VARIABLES TO RUN
LOAD TSDB VARIABLES TO RUNTIME
SAVE TSDB VARIABLES FROM RUN
SAVE TSDB VARIABLES FROM RUNTIME
SAVE TSDB VARIABLES TO MEM
SAVE TSDB VARIABLES TO MEMORY

The 11 additional DEBUG LOAD/SAVE aliases in the source dispatcher are diagnostic-only spellings and are intentionally not presented as public administration commands. The conditional canonical forms are identified under Debugging & Coredump below.

Selective Query-Digest Purge

The following released forms selectively purge MySQL or PostgreSQL query-digest entries. Commands are case-insensitive; <unix_timestamp> is a Unix realtime timestamp in seconds.

PURGE stats_mysql_query_digest TO <unix_timestamp>;
PURGE TABLE stats_mysql_query_digest TO <unix_timestamp>;
PURGE stats.stats_mysql_query_digest TO <unix_timestamp>;
PURGE stats_pgsql_query_digest TO <unix_timestamp>;
PURGE TABLE stats_pgsql_query_digest TO <unix_timestamp>;
PURGE stats.stats_pgsql_query_digest TO <unix_timestamp>;

ProxySQL removes each digest whose last_seen is less than or equal to the cutoff. A digest observed both before and after the cutoff survives with its accumulated statistics because its latest last_seen is newer. The OK packet’s affected-row count is the number of digest entries purged. A positive timestamp older than process boot is a successful no-op, and a future timestamp removes all current entries.

Selective purge runs through the asynchronous digest purge path. When purges overlap or are issued repeatedly while traffic is updating the digest map, ProxySQL merges the pending purge windows and safely reconciles concurrent updates; newly observed digests outside the cutoff remain available. The value must be a complete, positive integer. Zero, negative values, nonnumeric text, or trailing garbage return an Invalid timestamp error and do not purge entries.

Firewall Management

  • LOAD MYSQL FIREWALL TO RUNTIME (or TO RUN)
  • SAVE MYSQL FIREWALL TO DISK
  • LOAD PGSQL FIREWALL TO RUNTIME (or TO RUN)
  • SAVE PGSQL FIREWALL TO DISK

Debugging & Coredump

The LOAD DEBUG and SAVE DEBUG command family exists only in binaries compiled with DEBUG; normal release builds do not expose it.

  • LOAD DEBUG TO RUNTIME (or TO RUN)
  • SAVE DEBUG TO DISK
  • LOAD COREDUMP TO RUNTIME (aliases: LOAD COREDUMP FROM MEMORY, LOAD COREDUMP FROM MEM, and LOAD COREDUMP TO RUN)

There is no released SAVE COREDUMP command and no disk/config copy of coredump_filters. Insert or provision rows in the main-memory table after every restart, then use one of the four LOAD forms above to replace the active runtime_coredump_filters set.

System Commands

  • PROXYSQL RELOAD TLS: Reloads SSL/TLS certificates for the Admin and Proxy interfaces.
  • SAVE CONFIG TO FILE: (v4.0+) Attempts to export the current configuration back to a .cnf file format.

Checksum Verification

Verify consistency between layers using the CHECKSUM command:

  • CHECKSUM DISK <MODULE> (e.g., CHECKSUM DISK MYSQL SERVERS)
  • CHECKSUM MEMORY <MODULE>
  • CHECKSUM <MODULE> (defaults to current memory state)