logging mysql_logging - 如何显示在MySQL上执行的最后查询?

本文介绍了如何使用MySQL脚本来管理和清理`general_log`表,以减少日志大小并保持数据库高效运行。通过添加一个额外的Unix时间戳列,并删除超过一天的日志,这个过程能有效地自动化日志维护。

在阅读了保罗的回答之后,我继续在[https://dev.mysql.com/doc/refman/5.7/en/query-log.html]上挖掘更多信息。

我找到了一个人真正有用的代码。 这是上下文的摘要。

(注意:以下代码不是我的)

此脚本是保持表清洁的示例,它将帮助您减小表的大小。 在一天之后,将会有大约180k的日志查询。 (在文件中,每天30MB)

您需要添加一个额外的列(event_unix)然后您可以使用此脚本来保持日志清洁...它会将时间戳更新为Unix时间戳,删除超过1天的日志,然后将event_time更新为Timestamp 来自event_unix ...听起来有点令人困惑,但它的效果很好。

新列的命令:

SET GLOBAL general_log = 'OFF';

RENAME TABLE general_log TO general_log_temp;

ALTER TABLE `general_log_temp`

ADD COLUMN `event_unix` int(10) NOT NULL AFTER `event_time`;

RENAME TABLE general_log_temp TO general_log;

SET GLOBAL general_log = 'ON';

清理脚本:

SET GLOBAL general_log = 'OFF';

RENAME TABLE general_log TO general_log_temp;

UPDATE general_log_temp SET event_unix = UNIX_TIMESTAMP(event_time);

DELETE FROM `general_log_temp` WHERE `event_unix` < UNIX_TIMESTAMP(NOW()) - 86400;

UPDATE general_log_temp SET event_time = FROM_UNIXTIME(event_unix);

RENAME TABLE general_log_temp TO general_log;

SET GLOBAL general_log = 'ON';

归功于Sebastian Kaiser(代码的原作者)。

希望有人会发现它像我一样有用。

#!/bin/bash # 配置参数 CONTAINER_NAME="ruoyi-container" MYSQL_CONTAINER="ruoyi-mysql" IMAGE_NAME="hard:2.0" MYSQL_IMAGE="mysql:latest" NGINX_PORT=8081 JAVA_PORT=8989 MYSQL_PORT=9907 CONFIG_DIR="/home/archermind/ry/nginx-conf" MYSQL_PASSWORD="root" REDIS_CONTAINER="ruoyi-redis" REDIS_PORT=6379 REDIS_HOST_PORT=9979 REDIS_PASSWORD="123456" # 生成Nginx配置 mkdir -p $CONFIG_DIR cat > $CONFIG_DIR/default.conf <<'EOF' server { listen 8081; server_name 10.20.29.60; root /usr/share/nginx/html; location / { try_files $uri $uri/ /index.html; add_header Cache-Control "no-cache, no-store"; expires 0; } location /prod-api/ { proxy_pass http://10.20.29.60:8989/; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_connect_timeout 60s; proxy_read_timeout 60s; proxy_send_timeout 60s; } location ^~ /test/ { proxy_pass http://10.20.29.60:8989; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; add_header X-Proxy-Pass "http://ruoyi-app:8989$request_uri"; } location ~* \.vue$ { deny all; return 404; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } } EOF LOG_DIR="/home/archermind/ry/logs" mkdir -p $LOG_DIR case "$1" in start) echo "启动 MySQL 服务..." docker run -d \ --name $MYSQL_CONTAINER \ -v mysql-data1:/var/lib/mysql \ -p $MYSQL_PORT:3306 \ -e MYSQL_ROOT_PASSWORD=$MYSQL_PASSWORD \ mysql:5.7 \ --character-set-server=utf8mb4 \ --collation-server=utf8mb4_unicode_ci echo "启动 Redis 服务..." docker run -d \ --name $REDIS_CONTAINER \ -p $REDIS_HOST_PORT:$REDIS_PORT \ -v redis-data:/data \ redis:latest \ redis-server --requirepass $REDIS_PASSWORD --bind 0.0.0.0 echo "启动 RuoYi 应用服务..." docker run -d \ --name $CONTAINER_NAME \ -p $NGINX_PORT:8081 \ -p $JAVA_PORT:8989 \ -e MYSQL_HOST=$MYSQL_CONTAINER \ -e MYSQL_ROOT_PASSWORD=$MYSQL_PASSWORD \ -v /home/archermind/ry/dist:/usr/share/nginx/html \ -v $CONFIG_DIR/default.conf:/etc/nginx/conf.d/default.conf \ -v $(pwd)/ruoyi-admin.jar:/app/ruoyi-admin.jar \ -v $(pwd)/logs:/app/logs \ -e "LOGGING_FILE_NAME=/app/logs/ruoyi.log" \ -v $LOG_DIR:/var/log/nginx \ $IMAGE_NAME ;; stop) echo "停止 RuoYi 服务..." docker stop $CONTAINER_NAME 2>/dev/null || true docker rm $CONTAINER_NAME 2>/dev/null || true docker stop $MYSQL_CONTAINER 2>/dev/null || true docker rm $MYSQL_CONTAINER 2>/dev/null || true docker stop $REDIS_CONTAINER 2>/dev/null || true docker rm $REDIS_CONTAINER 2>/dev/null || true ;; restart) echo "重启 RuoYi 服务..." $0 stop sleep 2 $0 start ;; status) echo "应用容器状态:" docker ps -f name=$CONTAINER_NAME echo -e "\nMySQL容器状态:" docker ps -f name=$MYSQL_CONTAINER echo -e "\nReids容器状态:" docker ps -f name=$REDIS_CONTAINER ;; logs) docker logs -f $CONTAINER_NAME ;; *) echo "用法: $0 {start|stop|restart|status|logs}" exit 1 esac exit 0会生成后端日志
06-19
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值