ProxySQL Logging Overview
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.
Error Log
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
Query Log
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=?"
# }
Log Variables Reference
| Variable | Default | Description |
|---|---|---|
| mysql-eventslog_filename | "" | Path for query event log file |
| mysql-eventslog_filesize | 104857600 | Max log file size before rotation (bytes) |
| mysql-eventslog_default_log | 0 | Log all queries by default (0=use rule log column) |
| mysql-eventslog_format | 1 | 1=binary, 2=JSON |
| mysql-long_query_time | 1000 | Only log queries slower than this (ms) |
| admin-logfile_name | "" | Admin interface query log file |
Audit Log
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
Log Rotation
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
Admin Interface Logging
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