xxxx
以下是使用docker-compose方式部署MySQL 5.7并实现持久化登录和操作日志,并对操作日志进行日期切割的示例:
- 创建一个目录,例如
mysql-data
,用于存储MySQL数据和配置文件。 - 在该目录下创建一个
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"
- 保存
docker-compose.yml
文件后,在该目录下创建三个子目录:data
、conf
和log
,用于分别存储MySQL的数据、配置文件和日志文件。 - 在
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
- 现在可以通过以下命令查看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的数据、配置文件和日志文件持久化到本地目录中,即使容器被删除,数据也不会丢失。操作日志也会根据日期进行切割,避免过大的日志文件影响系统性能。