mysql - 在 docker mysql 容器中启用日志记录

标签 mysql logging docker

我正在尝试熟悉 docker 生态系统并尝试设置一个 mysql 数据库容器。使用 docker-compose 这看起来像:

version: '2'
services:
  db:
    image: mysql:5.6.33@sha256:31ad2efd094a1336ef1f8efaf40b88a5019778e7d9b8a8579a4f95a6be88eaba
    volumes:
      - "./db/data:/var/lib/mysql"
      - "./db/log:/var/log/mysql"
      - "./db/conf:/etc/mysql/conf.d"
    restart: "yes"
    environment:
      MYSQL_ROOT_PASSWORD: rootpw
      MYSQL_DATABASE: db
      MYSQL_USER: db
      MYSQL_PASSWORD: dbpw

我的 conf 目录包含一个文件:

[mysqld]
log_error       =/var/log/mysql/mysql_error.log
general_log_file=/var/log/mysql/mysql.log
general_log     =1
slow_query_log  =1
slow_query_log_file=/var/log/mysql/mysql_slow.log
long_query_time =2
log_queries_not_using_indexes = 1

不幸的是,我没有以这种方式获得任何日志文件。设置本身是正确的,并且使用了 cnf 文件。连接到容器并创建 3 个文件后,将它们 chownmysql 并重新启动容器,日志记录按预期工作。

我很确定这是一种常见的情况,而我目前的运行方式似乎非常愚蠢。 正确的做法是什么?

我可以通过在 Dockerfile 中移动所有这些东西来改进我的方法,但这对我来说仍然很奇怪。

最佳答案

我一直在寻找完全相同的东西,现在,有更好的方法来做到这一点。

docker mysql写道:

Many configuration options can be passed as flags to mysqld. This will give you the flexibility to customize the container without needing a cnf file. For example, if you want to change the default encoding and collation for all tables to use UTF-8 (utf8mb4) just run the following:

$ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

docker-compose 中世界,人们可以通过 "command" 传递这些论点。服务部分:

command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

在我的用例中,我只想打开日志并指定日志文件的路径:

 command: mysqld --general-log=1 --general-log-file=/var/lib/mysql/general-log.log

有了足够的卷(例如 - ./logs/mysql.log:/var/lib/mysql/general-log.log),就可以轻松访问它们。

这很简单,避免处理本地配置。它适用于任何 MySQL Docker images并将保持 my.cnf 与图像一起发送。

编辑:将路径从 /var/log/mysql/ 更改为 /var/lib/mysql/ 以确保 MySQL 可写文件夹。

关于mysql - 在 docker mysql 容器中启用日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39708213/

相关文章:

mysql - mysql其他表中有重复字段

java - 忽略子线程生成的日志

java - 我可以向 SLF4J 添加自定义级别吗?

Docker 友好的你好应用程序执行 : "docker-proxy" and port binding errors

docker - 在 GCP 的 Cloud Build 上构建 Docker 镜像,从存储桶中提取工件

mysql - 带前导零和可选小数点的数字 (sql)

php - 为每个用户 ID 在 mysql 中获取最新的日期时间

MySQL查询-复杂计数条件

logging - 防止 Rails 3.1(webrick?)记录资源渲染

docker - 如何将连接器安装到 apache kafka connect 的 docker 镜像