一、查看mysql日志
1、mysql开启通用日志(记录所有客户端连接、和执行的sql语句);
SHOW VARIABLES LIKE 'general_log%'; -- 检查是否开启日志 OFF/ON
SET GLOBAL general_log = 'ON'; -- 开启日志
SELECT * FROM mysql.general_log; -- 查看日志内容
*默认输出的日志文件(如:/var/log/mysql.log),可通过log_output参数切换表形式
2、临时开启慢查询日志
SHOW VARIABLES LIKE 'slow_query_log%'; -- 是否开启慢查询日志OFF/ON
SET GLOBAL slow_query_log = 'ON';
SHOW VARIABLES LIKE 'long_query_time'; -- 查看阀值(默认10秒)
SET GLOBAL log_output = 'file'; -- 日志输出到文件
(windows:my.ini;linux:my.cnf 慢查询日志配置文件路径参数:slow_query_file)
通过SHOW VARIABLES LIKE '%query%';查询当前配置
3、永久修改
slow_query_log = 1; -- 开启
slow_query_log_file = /var/lib/mysql/slow-query.log
long_query_time = 1; -- 1秒
log_queries_not_using_indexes = 1
*重启systemctl restart mysqld
3、记录服务器作物和警告,默认位于数据目录的hostname.err文件(也可查询日志错误路径)
SHOW VARIABLES LIKE 'log_error'; -- 查看MySQL错误日志的存储路径和配置信息
二、检查攻击日志分析要点
1、异常登录尝试(在错误日志中会频繁出现访问拒绝:Access denied,或在通用日志中非常归时间段的连接请求)
2、可疑sql语句(1、通用日志中大量非常规查询,如:DROP TABLE,GRANT ALL等权限操作2、慢查询日志执行时间异常无索引的查询为抛暴力破解)
3、网络流量异常(结合系统日志,如:/var/log/auth.log,同一ip的多次连接失败,或二进制日志中的异常的数据库修改操作)
三、安全建议
定期审计:定期检查日志文件,关注高频错误或敏感操作。
限制访问:通过GRANT语句最小化用户权限,
日志轮转:配置logrotate防止防止日志文件过大,同时保留历史,
使用logrotate实现自动化轮转
安装logrotate
sudo apt install logrotate # Ubuntu/Debian
sudo yum install logrotate # CentOS/RHEL
配置轮转规则
创建/etc/logrotate.d/mysql文件,内容示例:
conf
/var/log/mysql/*.log {
daily
rotate 7
compress
missingok
notifempty
create 640 mysql mysql
postrotate
/usr/bin/mysqladmin flush-logs || true
endscript
}
daily:每天轮转一次
rotate 7:保留7份历史日志
postrotate:通知MySQL刷新日志文件。
手动触发测试
bash
Copy Code
logrotate -vf /etc/logrotate.d/mysql
三、优化建议
日志存储分离:将日志目录挂载到独立磁盘,避免与数据目录争抢I/O。
定期清理:结合find命令删除过期日志,或设置监控脚本报警。
安全合规:根据等保要求保留日志至少180天,并配置自动备份。
四、异常登录关键词
一、异常登录检测关键词
失败登录尝试
Failed password:SSH或MySQL登录失败记录
Access denied:数据库权限拒绝
Invalid user:无效用户名尝试
高频登录行为
同一IP短时间内多次登录失败(如/var/log/auth.log中统计)
非常规时间段的登录(如凌晨2-5点)
二、SQL注入攻击关键词
SQL语法特征
UNION SELECT:联合查询注入
CONCAT(:字符串拼接注入
information_schema:数据库结构探测
--或#:注释符绕过验证
攻击工具特征
waitfor delay:时间盲注攻击
xp_cmdshell:执行系统命令(SQL Server)
1=1或1=2:布尔逻辑测试
三、日志文件路径
MySQL错误日志:/var/log/mysql/error.log
系统认证日志:/var/log/auth.log(Ubuntu)或/var/log/secure(CentOS)
四、检测命令示例
暴力破解检测
bash
grep "Failed password" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr
SQL注入检测
bash
grep -E "UNION.*SELECT|information_schema" /var/log/nginx/access.log
五、 MySQL日志分析命令清单(一键复制执行)
一、暴力破解检测
提取失败登录IP并排序
bash
MySQL错误日志分析(Ubuntu/CentOS通用)
sudo grep -i "access denied" /var/log/mysql/error.log | awk '{print $NF}' | cut -d ' ' -f1 | sort | uniq -c | sort -nr | head -n 20
系统认证日志分析(SSH/MySQL混合检测)
bash
Ubuntu/Debian系统
sudo grep "Failed password" /var/log/auth.log | awk '{print $(NF-1)}' | sort | uniq -c | sort -nr | head -n 15
CentOS/RHEL系统
sudo grep "Failed password" /var/log/secure | awk '{print $(NF-1)}' | sort | uniq -c | sort -nr | head -n 15
二、SQL注入检测
通用查询日志分析
bash
检测UNION注入和系统表查询
sudo grep -E "UNION.*SELECT|information_schema|mysql.user" /var/log/mysql/mysql.log
检测时间盲注特征
sudo grep -i "waitfor delay" /var/log/mysql/mysql.log
慢查询日志分析(异常长查询)
bash
找出执行时间超过5秒的查询(需先设置long_query_time=5)
sudo awk '$2 > 5 {print}' /var/log/mysql/slow-query.log
三、自动化分析脚本
暴力破解实时监控
bash
监控MySQL错误日志中的暴力破解行为
tail -f /var/log/mysql/error.log | grep -i "access denied" | awk '{print $NF}' | cut -d ' ' -f1 | while read ip; do
echo "[(date)\] IP ip 尝试暴力破解MySQL" | tee -a /var/log/mysql/brute_force.log
done
SQL注入特征扫描
bash
扫描最近1小时的MySQL日志
sudo find /var/log/mysql -name "*.log" -mtime -1 | xargs grep -E "UNION.*SELECT|information_schema|mysql.user"
四、防护建议
立即封禁可疑IP
bash
封禁暴力破解IP(示例)
sudo iptables -A INPUT -s 192.168.1.100 -j DROP
日志加固配置
ini
/etc/mysql/my.cnf 配置示例
mysqld
log_error = /var/log/mysql/error.log
general_log = 1
general_log_file = /var/log/mysql/general.log
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow-query.log
使用说明
将命令粘贴到终端执行,需sudo权限
建议定期执行(如crontab每日任务)
发现攻击后立即检查/var/log/mysql/目录下的原始日志
结合防火墙规则和MySQL权限控制进行深度防护