xxxx

发布时间 2023-04-04 12:19:26作者: 鹏程万里猪

以下是使用docker-compose方式部署MySQL 5.7并实现持久化登录和操作日志,并对操作日志进行日期切割的示例:

  1. 创建一个目录,例如mysql-data,用于存储MySQL数据和配置文件。
  2. 在该目录下创建一个docker-compose.yml文件,并添加以下内容:
version: '3.7'
services:
  db:
    image: mysql:5.7
    container_name: mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: your_mysql_root_password
    volumes:
      - ./data:/var/lib/mysql
      - ./conf:/etc/mysql/conf.d
      - ./log:/var/log/mysql
    ports:
      - "3306:3306"
  1. 保存docker-compose.yml文件后,在该目录下创建三个子目录:dataconflog,用于分别存储MySQL的数据、配置文件和日志文件。
  2. conf目录下创建一个my.cnf文件,并添加以下内容:
[mysqld]
general_log = 1
general_log_file = /var/log/mysql/mysql.log
log_error = /var/log/mysql/error.log
[mysql.server]
log-error=/var/log/mysql/error.log
[mysqld_safe]
log-error=/var/log/mysql/error.log

这将启用MySQL的操作日志,并将其保存到/var/log/mysql/mysql.log文件中,同时也将错误日志保存到/var/log/mysql/error.log文件中。
5. 在log目录下创建一个rotate-mysql-log.sh脚本,并添加以下内容:

#!/bin/bash
LOG_DIR=/var/log/mysql
DATE=`date +%Y%m%d`
OLD_LOG=${LOG_DIR}/mysql.log
NEW_LOG=${LOG_DIR}/mysql_${DATE}.log
if [ -f ${OLD_LOG} ]; then
    mv ${OLD_LOG} ${NEW_LOG}
    gzip ${NEW_LOG}
    mysqladmin -uroot -p${MYSQL_ROOT_PASSWORD} flush-logs
fi

这个脚本将重命名旧的操作日志文件为mysql_YYYYMMDD.log并压缩它,然后使用mysqladmin flush-logs命令强制MySQL重新打开一个新的日志文件。注意要将MYSQL_ROOT_PASSWORD替换为您实际使用的MySQL root密码。
6. 在log目录下创建一个cron文件,并添加以下内容:

0 0 * * * /bin/bash /var/log/mysql/rotate-mysql-log.sh

这将在每天午夜(0点0分)时执行rotate-mysql-log.sh脚本,对操作日志进行日期切割。
7. 启动MySQL容器:

docker-compose up -d
  1. 现在可以通过以下命令查看MySQL的登录日志和操作日志:
  • 登录日志:
docker exec -it mysql cat /var/log/mysql/error.log
  • 操作日志:
docker exec -it mysql cat /var/log/mysql/mysql.log

注意,如果未看到日志文件,请先登录MySQL容器并手动创建这些日志文件:

docker exec -it mysql bash
touch /var/log/mysql/mysql.log
touch /var/log/mysql/error.log
chmod 644 /var/log/mysql/mysql.log /var/log/mysql/error.log

以上步骤可以将MySQL的数据、配置文件和日志文件持久化到本地目录中,即使容器被删除,数据也不会丢失。操作日志也会根据日期进行切割,避免过大的日志文件影响系统性能。