MariaDB在Linux上的日志管理操作指南
MariaDB在Linux环境下的日志管理是数据库运维的重要环节,主要包括错误日志、查询日志、慢查询日志、二进制日志的配置与管理,以及日志轮转和清理等操作,以下是具体步骤:
错误日志记录MariaDB服务器启动、运行及关闭过程中的错误信息(如启动失败、权限问题),是故障排查的基础。
/var/log/mysql/error.log(Ubuntu/Debian)或/var/log/mariadb/error.log(RHEL/CentOS)。/etc/my.cnf或/etc/mysql/mariadb.conf.d/50-server.cnf),在[mysqld]部分添加/修改以下参数:[mysqld]
log_error = /var/log/mysql/error.log # 自定义日志路径
log_error_verbosity = 3 # 日志级别(0=无,1=错误,2=警告,3=信息,默认1)
tail命令实时监控或cat查看内容:sudo tail -f /var/log/mysql/error.log # 实时查看
sudo cat /var/log/mysql/error.log # 查看全部内容
查询日志记录所有客户端与服务器的交互(包括连接、断开、SQL语句),用于审计或分析客户端行为。
[mysqld]部分添加以下参数(默认禁用):[mysqld]
general_log = 1 # 启用(1=开启,0=关闭)
general_log_file = /var/log/mysql/query.log # 自定义日志路径
tail或cat命令。慢查询日志记录执行时间超过阈值的SQL语句(用于优化慢查询),还可记录未使用索引的查询。
[mysqld]部分添加以下参数(默认禁用):[mysqld]
slow_query_log = 1 # 启用
slow_query_log_file = /var/log/mysql/slow-query.log # 日志路径
long_query_time = 2 # 慢查询阈值(秒,默认10秒)
log_queries_not_using_indexes = 1 # 记录未使用索引的查询
tail命令实时查看慢查询日志。二进制日志记录对数据库的所有更改操作(如INSERT、UPDATE、DELETE),用于数据复制、备份恢复(如mysqlbinlog工具恢复数据)。
[mysqld]部分添加以下参数(默认禁用):[mysqld]
log_bin = /var/log/mysql/mysql-bin.log # 日志文件前缀(实际文件名为mysql-bin.000001)
server_id = 1 # 主从复制唯一标识(主从服务器需不同)
expire_logs_days = 10 # 日志保留天数(自动删除过期日志)
max_binlog_size = 100M # 单个日志文件最大大小(超过则滚动)
binlog_format = ROW # 推荐ROW格式(更安全,支持基于行的复制)
mysqlbinlog工具解析二进制日志:mysqlbinlog /var/log/mysql/mysql-bin.000001
中继日志仅在从服务器上使用,用于存储从主服务器接收的二进制日志,再应用到本地数据库(主从复制必备)。
[mysqld]部分添加以下参数:[mysqld]
relay_log = /var/log/mysql/mysql-relay-bin.log # 中继日志路径
relay_log_recovery = 1 # 启用中继日志恢复(崩溃后重新读取主服务器日志)
日志文件长期运行会占用大量磁盘空间,需通过logrotate工具实现自动轮转、压缩、删除。
/etc/logrotate.d/mysql文件(若不存在则创建),添加以下内容:/var/log/mysql/*.log {
daily # 每天轮转
missingok # 忽略缺失的日志文件
rotate 7 # 保留7个旧日志
compress # 压缩旧日志(如.gz格式)
notifempty # 空日志不轮转
create 640 mysql adm # 创建新日志文件(权限640,属主mysql,属组adm)
}
sudo logrotate -vf /etc/logrotate.d/mysql
logrotate通常由系统cron任务(/etc/cron.daily/logrotate)每日自动运行,无需手动干预。若MariaDB通过systemd管理(默认方式),可使用journalctl查看其日志:
sudo journalctl -u mariadb # 查看所有MariaDB日志
sudo journalctl -u mariadb -f # 实时监控
sudo journalctl -u mariadb --since "2025-10-20" --until "2025-10-22" # 指定时间范围
快速查找特定错误或SQL语句(如“error”“timeout”):
grep 'error' /var/log/mysql/error.log # 查找错误日志中的“error”
grep 'SELECT' /var/log/mysql/query.log # 查找查询日志中的SELECT语句
使用awk、wc等工具统计日志条目(如某天的错误数量):
awk '/Oct 20/ {count++} END {print count}' /var/log/mysql/error.log # 统计2025-10-20的错误数量
wc -l /var/log/mysql/slow-query.log # 统计慢查询日志的总行数
直接删除旧日志文件(谨慎操作,避免影响正在运行的数据库):
sudo rm /var/log/mysql/*.log # 删除所有.log文件
sudo systemctl restart mariadb # 重启MariaDB以创建新日志文件
通过上述logrotate配置,旧日志会自动删除(保留7天),无需手动干预。
/var/log/mysql)的属主为mysql,权限为640(避免其他用户修改日志):sudo chown -R mysql:adm /var/log/mysql
sudo chmod -R 640 /var/log/mysql/*.log
sudo systemctl restart mariadb
通过以上操作,可有效管理MariaDB在Linux环境下的日志,确保数据库运行的稳定性与可维护性。