繁体   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