ProxySQL MySQL MySQL · DBA · Operations

ProxySQLLogging Configuration

Configure ProxySQL error logs, query logs, audit logs and admin logs. Enable per-rule query logging, set log rotation and monitor slow queries.

ProxySQL provides several logging mechanisms to help you monitor activity, diagnose issues, and audit query traffic. Understanding each log type helps you quickly find the root cause of problems in production.

The main ProxySQL log file records startup events, errors, warnings and important state changes.

BASH — Error Log
# Default error log location
tail -f /var/lib/proxysql/proxysql_errorlog

# Set custom log path in proxysql.cnf
# errorlog="/var/log/proxysql/proxysql_errorlog"

# Search for errors
grep -i "error" /var/lib/proxysql/proxysql_errorlog | tail -50

# Search for connection issues
grep -i "connect" /var/lib/proxysql/proxysql_errorlog | tail -30

ProxySQL can log individual queries to a binary log file. Enable per query rule using the log column.

SQL — Enable Query Log
-- Enable query logging for a specific rule
UPDATE mysql_query_rules SET log=1 WHERE rule_id=2;
LOAD MYSQL QUERY RULES TO RUNTIME;
SAVE MYSQL QUERY RULES TO DISK;

-- Enable global query logging
UPDATE global_variables SET variable_value='true'
WHERE variable_name='mysql-eventslog_filename';

UPDATE global_variables SET variable_value='/var/lib/proxysql/proxysql_queries.log'
WHERE variable_name='mysql-eventslog_filename';

-- Set log format (1=binary, 2=JSON)
UPDATE global_variables SET variable_value='2'
WHERE variable_name='mysql-eventslog_format';

-- Only log queries slower than threshold (ms)
UPDATE global_variables SET variable_value='1000'
WHERE variable_name='mysql-long_query_time';

LOAD MYSQL VARIABLES TO RUNTIME;
SAVE MYSQL VARIABLES TO DISK;
BASH — View Query Log
# View query log (JSON format)
tail -f /var/lib/proxysql/proxysql_queries.log

# Example log entry (JSON format):
# {
#   "client": "192.168.1.50:54321",
#   "HID": 20,
#   "server": "192.168.1.101:3306",
#   "starttime": "2026-04-24 10:00:00.123",
#   "endtime": "2026-04-24 10:00:00.456",
#   "duration_us": 333,
#   "user": "appuser",
#   "db": "myapp",
#   "query": "SELECT * FROM orders WHERE id=?"
# }
VariableDefaultDescription
mysql-eventslog_filename""Path for query event log file
mysql-eventslog_filesize104857600Max log file size before rotation (bytes)
mysql-eventslog_default_log0Log all queries by default (0=use rule log column)
mysql-eventslog_format11=binary, 2=JSON
mysql-long_query_time1000Only log queries slower than this (ms)
admin-logfile_name""Admin interface query log file
SQL — Audit Log
-- ProxySQL audit log tracks connections and authentication events
UPDATE global_variables SET variable_value='/var/lib/proxysql/proxysql_audit.log'
WHERE variable_name='mysql-auditlog_filename';

UPDATE global_variables SET variable_value='104857600'
WHERE variable_name='mysql-auditlog_filesize';

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

-- View audit log
-- tail -f /var/lib/proxysql/proxysql_audit.log
BASH — Log Rotation
# ProxySQL rotates logs automatically when filesize limit reached
# You can also force rotation:

# Flush logs from Admin interface
mysql -u admin -padmin -h 127.0.0.1 -P 6032 -e "PROXYSQL FLUSH LOGS;"

# Configure logrotate for ProxySQL logs
cat > /etc/logrotate.d/proxysql << EOF
/var/lib/proxysql/proxysql_errorlog {
    daily
    rotate 14
    compress
    delaycompress
    missingok
    notifempty
    postrotate
        mysql -u admin -padmin -h 127.0.0.1 -P 6032 -e "PROXYSQL FLUSH LOGS;" > /dev/null 2>&1
    endscript
}
EOF
SQL — Admin Logging
-- Log all Admin interface queries (useful for auditing config changes)
UPDATE global_variables SET variable_value='/var/lib/proxysql/proxysql_admin.log'
WHERE variable_name='admin-logfile_name';

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

-- View admin log from shell:
-- tail -f /var/lib/proxysql/proxysql_admin.log