簡體   English   中英

如何將查詢記錄到 MySQL 上的標准輸出?

[英]How to log queries to stdout on MySQL?

MySQL 5.6.26

嘗試將查詢記錄到標准輸出在下面不起作用,

$ mysqld --general_log=1 --general_log_file=/dev/stdout

我很驚訝在 MySQL 和 PostgreSQL 中做到這一點是多么困難。

以下是允許我將所有 MySQL 日志發送到 Docker 容器的標准輸出的配置。

docker-compose.yml的內容:

---
version: "3.9"
services:
  your_db:
    image: mysql:5.7-debian
    command:
      - /usr/local/bin/mysqld.sh
    environment:
      MYSQL_DATABASE: "$your_db"
      MYSQL_PASSWORD: "$your_pass"
      MYSQL_ROOT_PASSWORD: "$root_pass"
      MYSQL_USER: "$your_user"
    volumes:
      - ./my.cnf:/etc/mysql/conf.d/my.cnf:ro
      - ./mysqld.sh:/usr/local/bin/mysqld.sh:ro
    networks:
      - your_net

my.cnf的內容:

[mysqld]
# Log General
general_log = 1
general_log_file = /var/log/mysql_general.log

# Log Error
log_error = /var/log/mysql_error.log

# Log Slow
slow_query_log = 1
slow_query_log_file = /var/log/mysql_slow_query.log
long_query_time = 0  # 0 has the effect of logging all queries
log_queries_not_using_indexes = 1

mysqld.sh的內容:

#!/usr/bin/env bash
set -euo pipefail

##
# This script exists to work-around the fact that
# mysql does not support logging to stdout
#
# This will tail the file logs configured in ./my.cnf
##

LOG_PATHS=(
  '/var/log/mysql_general.log'
  '/var/log/mysql_error.log'
  '/var/log/mysql_slow_query.log'
)
for LOG_PATH in "${LOG_PATHS[@]}"; do
  # https://serverfault.com/a/599209
  ( umask 0 && truncate -s0 "$LOG_PATH" )
  tail --pid $$ -n0 -F "$LOG_PATH" &
done

docker-entrypoint.sh mysqld

你不能,不能直接。 查詢日志僅轉到文件,表或任何地方 他們似乎沒有去/dev/stdout也沒有遵守-慣例 別擔心,有一個更好的方法。

如果你想要做的就是查看日志中的查詢日志,你可以使用各種Unix實用程序來傳輸日志文件。 tail -f是一種選擇。

tail -f /path/to/query.log

我更喜歡用less打開日志,並使用F命令在文件添加時繼續讀取。 它就像tail -f但你也可以滾動並搜索文件。

$ less /path/to/query.log
~
~
/opt/local/lib/mysql56/bin/mysqld, Version: 5.6.27-log (Source distribution). started with:
Tcp port: 0  Unix socket: (null)
Time                 Id Command    Argument
151004 16:10:51     1 Connect   schwern@localhost as  on 
                    1 Query     select @@version_comment limit 1
151004 16:10:53     1 Query     select 1
151004 16:10:54     1 Quit      
Waiting for data... (interrupt to abort)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM