目录
一、启用日志
1.1. 错误日志
shell
# /etc/my.cnf.d/mariadb-logs.cnf
[mariadb]
......
# Error Log
log_error=/var/log/mariadb/error.log
log_warnings=3- 日志详细程度:0-9,默认值为 2
1.2. 通用查询日志
通用查询日志是从客户端接收到的每个 SQL 查询以及每个客户端连接和断开连接的日志。由于它是服务器收到的每个查询的记录,因此它可能会很快变大。
但是,如果您只想记录更改数据的查询,那么最好使用二进制日志。一个重要的区别是,二进制日志仅在服务器提交事务时记录查询,而通用查询日志在服务器接收到查询后立即记录查询。
shell
# /etc/my.cnf.d/mariadb-logs.cnf
[mariadb]
......
# General Query Log
general_log
log_output=FILE
general_log_file=/var/log/mariadb/queries.log
log_disabled_statements='slave,sp'1.3. 二进制日志
二进制日志包含对数据库的所有更改(数据和结构)以及每个语句执行所需时间的记录。它由一组二进制日志文件和一个索引组成。
这意味着诸如 CREATE、ALTER、INSERT、UPDATE 和 DELETE 之类的语句将被记录,但对数据没有影响的语句(如 SELECT 和 SHOW )将不会被记录。如果您想记录这些(以性能为代价),请使用通用查询日志。
shell
# /etc/my.cnf.d/mariadb-logs.cnf
[mariadb]
# Binary Log
# datadir/log-basename-bin
log_bin=ON
log_basename=mariadb
binlog_format=mixed
expire_logs_days=90
max_binlog_size=512M
max_binlog_total_size=5G
--binlog-ignore-db=database_name1.4. 清除二进制日志
shell
# 列出所有日志
SHOW BINARY LOGS;
# 查看正在读取的文件
SHOW SLAVE STATUS;
# 删除所有二进制日志文件
RESET MASTER;
# 清除到指定位置
PURGE BINARY LOGS TO 'mariadb-bin.000057';
# 清除指定日期之前的
PURGE BINARY LOGS BEFORE '2019-04-02 22:46:26';
# 清除3天前的日志
#SELECT DATE_SUB(CURRENT_DATE, INTERVAL 3 DAY);
PURGE MASTER LOGS BEFORE DATE_SUB(CURRENT_DATE, INTERVAL 3 DAY);
PURGE BINARY LOGS BEFORE DATE_SUB(CURRENT_DATE, INTERVAL 3 DAY);1.5. 慢查询日志
慢查询日志是执行时间较长的 SQL 查询的记录。
请注意,如果您的查询包含用户的密码,则慢查询日志也可能包含密码。因此,应该对其进行保护。
shell
# /etc/my.cnf.d/mariadb-logs.cnf
[mariadb]
......
## Slow Query Log
log_output=FILE
slow_query_log
slow_query_log_file=/var/log/mariadb/slow.log
long_query_time=5.0
log_queries_not_using_indexes=ON
log_slow_admin_statements=ON
log_slow_rate_limit=10long_query_time定义慢速查询的时间log_queries_not_using_indexes记录不使用索引的查询log_slow_admin_statements记录缓慢的管理语句log_slow_rate_limit限制每10次慢查询才记录一次
二、轮换日志
2.1. Logrotate
2.1.1. 身份验证
使用 MariaDB 进行身份验证的最简单方法是将用户帐户配置 root@localhost 为使用 unix_socket 身份验证。
在MariaDB 10.4及更高版本不许设置
sql
ALTER USER 'root'@'localhost' IDENTIFIED VIA unix_socket;2.1.2. 配置文件
/etc/logrotate.conf/etc/logrotate.d/
shell
$ sudo tee /etc/logrotate.d/mariadb <<EOF
/var/log/mysql/* {
su mysql mysql
missingok
create 660 mysql mysql
notifempty
daily
minsize 1M
maxsize 100M
rotate 30
dateext
dateformat .%Y-%m-%d-%H-%M-%S
compress
delaycompress
sharedscripts
olddir archive/
createolddir 770 mysql mysql # only use with logrotate >= 3.8.9
postrotate
# just if mysqld is really running
if test -x /usr/local/mysql/bin/mysqladmin && \
/usr/local/mysql/bin/mariadb-admin ping &>/dev/null
then
/usr/local/mysql/bin/mariadb-admin --local flush-error-log \
flush-engine-log flush-general-log flush-slow-log
fi
endscript
}
EOF重要参数:
daily:每天轮换每个日志文件一次。minsize 1M:该指令将其配置为在日志轮转期间跳过小于 1 MB 的日志文件。maxsize 100M:此指令将其配置为在日志文件增长超过 100 MB 时比每天更频繁地轮换日志文件。rotate 30:该指令将其配置为保留每个日志文件的 30 个旧副本。dateext:该指令将其配置为使用日期作为扩展名,而不仅仅是数字。olddir archive/:该指令将其配置为将轮换日志文件存档在/var/log/mariadb/archive/.
2.2. Journal
systemd-journal 是一个改进型的日志管理服务。
常见用法如下:
sql
# 查看文件情况
du -h --max-depth=1 /var/log
# 日志总体磁盘占用情况
journalctl --disk-usage
# 硬性指定日志总体体积,删除超出部分
journalctl --vacuum-size=10M
# 只保留近一周的日志
journalctl --vacuum-time=1w
# 直接删除 /var/log/journal/ 目录下的日志文件
rm -rf /var/log/journal/f9d400c5e1e8c3a8209e990d887d4ac1三、启用审计
3.1. 查看当前开启审计
sql
show variables like '%audit%';如果没有,则先查看审计插件目录
sql
SHOW VARIABLES LIKE 'plugin_dir';3.2. 启用审计
具体参数详见官方文档:
MariaDB Audit Plugin Options and System Variables
shell
# /etc/my.cnf.d/server-audit.cnf
[mariadb]
## MariaDB Audit Plugin
server_audit_events=CONNECT,QUERY,TABLE,QUERY_DDL,QUERY_DML,QUERY_DCL,QUERY_DML_NO_SELECT
server_audit_file_path=/var/log/mariadb/server_audit.log
server_audit_file_rotate_size=100M
server_audit_file_rotations=10
server_audit_logging=ON
server_audit_output_type=file
server_audit=FORCE_PLUS_PERMANENT3.3. 重启
shell
sudo systemctl restart mariadb四、密码插件
Password Validation Plugin API
4.1. simple_password_check
shell
# /etc/my.cnf.d/simple_password_check.cnf
[mariadb]
# Password Validation
plugin_load_add = simple_password_check.so
simple_password_check_digits=1
simple_password_check_letters_same_case=1
simple_password_check_minimal_length=8
simple_password_check_other_characters=14.2. cracklib_password_check
Cracklib Password Check Plugin
shell
sudo yum install MariaDB-cracklib-password-check
sudo apt-get install mariadb-plugin-cracklib-password-check安装
shell
[mariadb]
...
plugin_load_add = cracklib_password_check