Let's be real – when your MySQL server acts up on Fedora, those logs are golden. I remember wasting hours troubleshooting a production issue because I didn't know where Fedora stored MySQL logs by default. Not fun. This guide solves that pain permanently.
Where Fedora Server 41 Stores MySQL Logs
First things first: Fedora Server 41 handles MySQL logging differently than Ubuntu or CentOS. The default locations changed in recent versions, which tripped me up last month during a migration project.
The critical directories:
- Error logs:
/var/lib/mysql/fedora-server.localdomain.err
- Slow query logs:
/var/lib/mysql/slow-queries.log
- Binary logs:
/var/lib/mysql/binlog.XXXXXX
Permission headaches happen constantly here. The mysql
user owns these files. Use sudo ls -l /var/lib/mysql/*.log
to verify ownership before troubleshooting access issues.
Finding Active Log Locations via MySQL
Run these SQL commands directly in your MySQL shell:
SHOW VARIABLES LIKE 'log_error'; SHOW VARIABLES LIKE 'slow_query_log_file'; SHOW VARIABLES LIKE 'log_bin_basename';
Sample output from my Fedora Server 41 box:
Variable Name | Value |
---|---|
log_error | /var/lib/mysql/fedora-server.localdomain.err |
slow_query_log_file | /var/lib/mysql/slow-queries.log |
log_bin_basename | /var/lib/mysql/binlog |
Viewing Different MySQL Log Types
Not all logs serve the same purpose. Here's what each does (and when you'll need them):
Error Logs – Your First Diagnostic Tool
When MySQL refuses to start, this is your bible. Tail it live during service restarts:
sudo tail -f /var/lib/mysql/fedora-server.localdomain.err
Common errors I've deciphered:
InnoDB: Unable to lock ./ibdata1
– Usually means MySQL is already runningCan't start server: Bind on TCP/IP port
– Port conflict with another serviceTable 'xxx' is marked as crashed
– RequiresREPAIR TABLE
Slow Query Logs – The Performance Killer Hunter
Enable these ONLY when troubleshooting performance. They balloon quickly. First, check if logging is active:
mysql -e "SHOW VARIABLES LIKE 'slow_query_log';"
To enable temporarily (resets on reboot):
sudo mysql -e "SET GLOBAL slow_query_log = 'ON';" sudo mysql -e "SET GLOBAL long_query_time = 2;" # Logs queries slower than 2 seconds
When analyzing:
sudo mysqldumpslow /var/lib/mysql/slow-queries.log
Binary Logs – For Replication and Point-in-Time Recovery
Don't view these directly with text editors! Use MySQL's tools:
sudo mysqlbinlog /var/lib/mysql/binlog.000007 | less
Pro tip: Pipe to grep
for specific table operations:
sudo mysqlbinlog binlog.000007 | grep -i "UPDATE users"
Configuring MySQL Logging on Fedora 41
The main config file lives at /etc/my.cnf.d/mysql-server.cnf
. Make backups before editing!
Directive | Purpose | Example Value |
---|---|---|
log_error | Error log path | /var/log/mysql/error.log |
slow_query_log | Enable slow query logging | ON |
slow_query_log_file | Slow log path | /var/log/mysql/slow.log |
log_bin | Enable binary logging | /var/log/mysql/binlog |
expire_logs_days | Auto-delete old binlogs | 7 |
After editing, restart MySQL properly:
sudo systemctl restart mysqld
Fedora 41 uses mysqld
service name, NOT mysql
. Took me 20 minutes to figure out why my service wasn't restarting during my first Fedora MySQL setup.
Solving Permission Issues (The Fedora Special)
SELinux loves blocking log access. Symptoms include empty logs after configuration changes. Fixes:
- Check SELinux context:
ls -Z /var/log/mysql/
- Apply correct context:
sudo semanage fcontext -a -t mysqld_log_t "/var/log/mysql(/.*)?"
sudo restorecon -Rv /var/log/mysql
If MySQL can't write logs, check ownership:
sudo chown mysql:mysql /var/log/mysql -R sudo chmod 750 /var/log/mysql
Essential Log Management Commands
Don’t let logs eat your disk space:
Task | Command |
---|---|
Rotate logs manually | sudo mysqladmin flush-logs |
Delete old binary logs | sudo mysql -e "PURGE BINARY LOGS BEFORE NOW() - INTERVAL 7 DAY;" |
Monitor log size | sudo du -sh /var/lib/mysql/*.log |
Troubleshooting Common Log Problems
From my support ticket archives:
Logs Missing After Fedora Update
Fedora 41 moved from MariaDB to MySQL 8.0 by default. If you upgraded:
sudo mysql_upgrade --force
Then verify log paths in /etc/my.cnf.d/mysql-server.cnf
.
"Permission Denied" When Viewing Logs
Even with sudo? Try:
sudo usermod -aG mysql $(whoami)
Log out and back in. Or access logs via MySQL user:
mysql -e "SHOW BINARY LOGS;"
FAQs: MySQL Logs on Fedora Server 41
Why can't I find MySQL logs in /var/log?
Fedora defaults to /var/lib/mysql
for logs. You must relocate them manually in mysql-server.cnf
if you prefer /var/log
.
How do I enable query logging temporarily?
SET GLOBAL general_log = 'ON'; SET GLOBAL log_output = 'FILE';
Remember to disable it later! General logs can grow 1GB+ per hour on busy systems.
Can I log all queries to a specific table?
Yes! Modify mysql-server.cnf
:
[mysqld] log_output=TABLE general_log=1
Then query the mysql.general_log
table. But honestly? This makes queries slower. I only use it for debugging dev environments.
What's the fastest way to search huge logs?
Use grep
with context:
sudo grep -C 25 'ERROR' /var/lib/mysql/error.log | less
For binary logs:
sudo mysqlbinlog binlog.00000X | grep --color -i 'delete'
Why are my logs empty after configuration?
Three likely culprits:
- AppArmor/SELinux blocking writes (check
/var/log/audit/audit.log
) - Incorrect file permissions (run
sudo restorecon -Rv /var/lib/mysql
) - MySQL service restart failed (check
sudo systemctl status mysqld
)
Essential Toolkit for MySQL Log Analysis
Beyond basic commands:
- Percona Toolkit:
sudo dnf install percona-toolkit
forpt-query-digest
- Logwatch: Automated daily log summaries (
sudo dnf install logwatch
) - GoAccess: Real-time web log analyzer (works with slow logs!)
Final tip from my worst debugging night: Always verify log rotation during initial setup. I once filled a 100GB partition with binary logs because expire_logs_days
was misconfigured. Happy logging!
Comment