设置 Nginx、MySQL 日志轮询

1. Nginx 设置日志轮询

机器直接安装的:
/etc/logrotate.d/nginx

复制代码
/var/log/nginx/*.log {
        daily
        missingok
        rotate 30
        compress
        delaycompress
        notifempty
		# 修改成实际的
        create 640 nginx adm
        sharedscripts
        postrotate
                if [ -f /var/run/nginx.pid ]; then
                        kill -USR1 `cat /var/run/nginx.pid`
                fi
        endscript
}

docker 安装的:
/etc/logrotate.d/nginx-docker

复制代码
# 挂载出来的 nginx 日志路径
/path/to/your/nginx/logs/*.log {
    daily
    missingok
    rotate 30
    compress
    delaycompress
    notifempty
    create 640 root root
    sharedscripts
    postrotate
        # Nginx 容器的名称
        CONTAINER_NAME="your_nginx_container_name"
        # 重新加载 Nginx 配置
        docker exec $CONTAINER_NAME /bin/sh -c 'kill -USR1 $(cat /var/run/nginx.pid)'
    endscript
}

2. MySQL 设置日志轮询

机器直接安装的:
/etc/mysqladmin.cnf

复制代码
[client]
user=root
password=your_password

修改属主为 mysql 用户

bash 复制代码
sudo chown mysql:mysql /etc/mysqladmin.cnf
sudo chmod 600 /etc/mysqladmin.cnf

/etc/logrotate.d/mysql

复制代码
/var/log/mysql/*.log {
    daily
    missingok
    rotate 30
    compress
    delaycompress
    notifempty
	# 修改成实际的
    create 640 mysql adm
    sharedscripts
    postrotate
        # 重新打开 MySQL 日志文件
        if test -x /usr/bin/mysqladmin && \
          /usr/bin/mysqladmin --defaults-extra-file=/etc/mysqladmin.cnf ping &>/dev/null; then
          /usr/bin/mysqladmin --defaults-extra-file=/etc/mysqladmin.cnf flush-logs
        fi
    endscript
}

docker 安装的:

比如 data 目录映射成 /path/to/your/mapped/mysql/data
log 目录映射成 /path/to/your/mapped/mysql/log

复制代码
/path/to/your/mapped/mysql/logs/*.log {
    daily
    missingok
    rotate 30
    compress
    delaycompress
    notifempty
	# 用 容器里面 mysql 的 uid 和 gid
    create 640 uid gid
    sharedscripts
    postrotate
        # MySQL 容器的名称
        CONTAINER_NAME="your_mysql_container_name"
        # 重新打开 MySQL 日志文件
        docker exec $CONTAINER_NAME /bin/sh -c 'mysqladmin --defaults-extra-file=/var/lib/mysql/mysqladmin.cnf flush-logs'
    endscript
}

3. 测试

  1. 手动测试 logrotate 配置

使用 -d 选项来调试 logrotate 配置,这个选项会显示 logrotate 将执行的操作,但不会实际执行:

bash 复制代码
logrotate -d /etc/logrotate.d/nginx-docker
  1. 手动执行 logrotate

如果调试通过,可以手动执行 logrotate 以立即轮询日志:

bash 复制代码
logrotate -f /etc/logrotate.d/nginx-docker
  1. 检查日志文件

执行完 logrotate 后,检查日志文件目录,确认日志文件是否被轮询,并且新的日志文件是否被创建。

相关推荐
程序员不想YY啊5 分钟前
MySQL元数据库完全指南:探秘数据背后的数据
数据库·mysql·oracle
柏油2 小时前
MySql InnoDB 事务实现之 undo log 日志
数据库·后端·mysql
jack xu13 小时前
高频面试题:如何保证数据库和es数据一致性
java·大数据·数据库·mysql·elasticsearch
炫彩@之星3 小时前
Mysql之UDF提权
mysql·udf提权
fxshy4 小时前
ai聊天流式响应,阻塞式和流式响应 nginx遇到的坑
运维·javascript·nginx
爱的叹息4 小时前
DeepSeek 大模型 + LlamaIndex + MySQL 数据库 + 知识文档 实现简单 RAG 系统
数据库·人工智能·mysql·langchain
橘猫云计算机设计4 小时前
net+MySQL中小民营企业安全生产管理系统(源码+lw+部署文档+讲解),源码可白嫖!
数据库·后端·爬虫·python·mysql·django·毕业设计
黄嚯嚯4 小时前
Mysql8.0 推出的强大功能 窗口函数(Window Functions)
数据库·mysql
神仙别闹5 小时前
基于Java+MySQL 实现(Web)日程管理系统
java·前端·mysql
苹果酱05675 小时前
2020-06-23 暑期学习日更计划(机器学习入门之路(资源汇总)+概率论)
java·vue.js·spring boot·mysql·课程设计