MySQL關於日志配置安全整改及處理方法


【環境介紹】

  系統環境:Linux + mysql 5.7.18 + 主從復制架構

  

【背景描述】

需求:MySQL數據庫都有每年的集團安全整改,常常要求弱口令掃描,基線掃描,漏洞掃描等等。對於MySQL的基線配置檢查中的日志方面也是有好幾個要求,建議開啟MySQL的各種日志配置,記錄數據庫的各種類型活動,便於處理數據庫故障和性能優化都有很大的幫助。開啟這配置提供了幫助的同時也同時產生一定的性能消耗和存儲方面的消耗。

 

【MySQL日志配置大致介紹】

類型

介紹

作用

參數

錯誤日志

記錄對數據庫的啟動、運行、關閉過程進行記錄信息

記錄告警或正確信息

log_error

二進制日志

記錄對數據庫執行更改的所有操作,不包含select和show類型操作信息

用於恢復,復制,審計

log_bin

慢查詢日志

記錄對數據庫執行長的SQL操作信息

定位存在問題的SQL,從SQL語句層面上進行優化

slow_query_log

 

通用查詢日志

記錄對數據庫請求的所有操作信息

用於恢復,審計

general_log

更新日志

記錄從主服務器接收的從服務器的更新是否應該記錄到從設備自己的二進制日志

用於復制

log_slave_updates

 

【MySQL日志配置配置】

錯誤日志:默認開啟,初始化時指定錯誤日志路徑。/etc/my.cnf 參數文件設置:log_error = /home/mysql/logs/mysql.err

二進制日志:可關閉,可開啟,全局靜態參數。log_bin = /home/mysql/logs/binlog

慢查詢日志:可開啟可關閉,全局動態參數。

set GLOBAL slow_query_log_file = '/home/mysql/logs/slow.log'; set GLOBAL slow_query_log = ON;

通用查詢日志:可開啟可關閉,全局動態參數。

set GLOBAL general_log_file = '/home/mysql/data/oracle.log'; set GLOBAL general_log =ON;

更新日志:可關閉,可開啟,全局靜態參數。/etc/my.cnf 參數文件設置:log_slave_updates = ON

 

安全檢查建議開啟全部的日志配置。在整改的過程中,開啟這些日志消耗性能是一定的,其中,通用查詢日志的消耗最明顯,產生的日志量的問題也是很常見。咨詢業務側,該數據庫的業務比較繁忙,那么通用查詢日志的問題就比較顯著,進行對通用日志處理。

 

【通用日志處理】

於是對通用日志產生的日志量的問題進行處理。

需求:開啟通用日志,每周日定時清理日志,保存3份有效日志記錄備份,記錄清理日志。

測試最終效果如下:

 

 

主要實現功能的腳本如下:

cat > mysql_generlog_clean.sh

######################################################################

# mysql_generlog_clean.sh

# This script is clean mysql generlog

# Author CZT

######################################################################

#!/bin/sh

mysqladmin=`which mysqladmin`              ---定義mysql命令環境變量

mysql=`which mysql`

user="root"                                             ---注意進行操作的用戶權限

passwd="xxx"

time=`date +%Y%m%d%H%M`

general_log=`mysql -u${user} -p${passwd} -Ne "show variables like 'general_log_file';" 2>/dev/null |grep general_log_file|awk '{print $2}'`           ---取當前設置通用日志的日志路徑

mv ${general_log} ${general_log}_bak.${time}

mysqladmin -u$user -p$passwd flush-logs general 2>/dev/null

gzip ${general_log}_bak.${time}                 ---對歷史通用日志進行壓縮

 

var_count=`ls -lrt ${general_log}_bak*|wc -l`

if [ $var_count -gt 3 ]

then

echo "gt 3"

var_del_count=`expr $var_count - 3`          ---判斷保留3份歷史日志

ls -lrt ${general_log}_bak* |awk '{print $9}'|head -$var_del_count> del_bakfile_list.txt

while read LINE

do

echo $LINE

rm -f $LINE                                             ---刪除舊日志備份文件

 

done<del_bakfile_list.txt                            ---記錄刪除歷史日志記錄

else

echo "lt 3"

fi

 

【問題思考】

1,  對於產生的空間大小一定要經過測試,不同的業務產生的影響也有所不同,系統空間問題由於權限限制,不能限制空間,只能手動制定策略;

2, 因為備份中有切換日志操作,對日志備份清理的時間點避免業務高峰期間,防止期間造成告警報錯,時間點的選擇也是非常重要的環節;

3, 對於參數調整,必須了解該參數屬性,是否可以實時開啟關閉,對應急處理有非常大的幫助。

 

【總結】:

1,  對於安全整改配置時,一定要評估好風險,防止產生問題;

2,  對於日志量的問題,腳本可以舉一反三處理;

3,  對於安全整改配置時,必須全面了解參數屬性,便於應急的處理。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM