【问题标题】:logging mysql queries from docker container从 docker 容器记录 mysql 查询
【发布时间】:2018-10-24 12:10:31
【问题描述】:

我是 docker 新手,我仍在弄清楚它是如何工作的。我通过 docker-compose 设置了一个 wordpress 站点,我使用的 yaml 文件如下。

version: '3.3'

services:
   db:
     image: mysql:5.7
     volumes:
       - ./db_data/db/backup.sql:/docker-entrypoint-initdb.d/backup.sql #it loads an already existing database
       #- ./db_data/all.log:/var/log/mysql/all.log # i want here to have the logs of mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: somewordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "8000:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
     volumes:
       - ./db_data/wp-content:/var/www/html/wp-content # loads the files from an existing installation of wordpress
volumes:
    db_data:

如你所见

- ./db_data/all.log:/var/log/mysql/all.log 

我正在尝试以某种方式做到这一点,以便我可以记录所有查询。我已经通过执行以下操作来做到这一点:

1) docker-compose up,同时用 yaml 文件中的 all.log 注释掉该行。

2) 使用 bash 登录到 mysql 的容器并运行以下命令

mysql -u root -psomewordpress -e "SET global log_output = 'FILE'; SET global general_log_file='/var/log/mysql/all.log'; SET global general_log = 1;"

3) 转到 /var/lib/docker/volumes 并创建文件。

我想要实现的是以某种方式将此命令作为 yaml 文件的一部分,这样我也可以将 all.log 文件安装在 yaml 文件所在的位置。

【问题讨论】:

    标签: mysql docker docker-compose


    【解决方案1】:

    我为解决我的问题所做的是使用以下内容:

    version: '3.3'
    
    services:
       db:
         image: mysql:5.7
         volumes:
           - ./db_data/db/backup.sql:/docker-entrypoint-initdb.d/backup.sql #it loads an already existing database
           -./logs/mysql:/var/log/mysql # to get the folder of mysql in my logs/mysql
         restart: always
         environment:
           MYSQL_ROOT_PASSWORD: somewordpress
           MYSQL_DATABASE: wordpress
           MYSQL_USER: wordpress
           MYSQL_PASSWORD: wordpress
    
       wordpress:
         depends_on:
           - db
         image: wordpress:latest
         ports:
           - "8000:80"
         restart: always
         environment:
           WORDPRESS_DB_HOST: db:3306
           WORDPRESS_DB_USER: wordpress
           WORDPRESS_DB_PASSWORD: wordpress
         volumes:
           - ./db_data/wp-content:/var/www/html/wp-content
    

    此代码会将 mysql 的 docker 容器内的内容与我的文件夹 logs/mysql 同步。所以我在里面放了一个小shell脚本。

    #!/bin/bash
    
    if [ ! -f /var/log/mysql/all.log ]; then
        touch /var/log/mysql/all.log
    fi
    
    chmod 777 /var/log/mysql/all.log
    mysql -u root -psomewordpress -e "SET global log_output = 'FILE'; SET global general_log_file='/var/log/mysql/all.log'; SET global general_log = 1;"
    

    它检查 all.log 文件是否存在,如果不存在则创建它然后启动 mysql 日志记录。就是这样,之后所有查询都直接记录到我可以直接访问的 all.log 中。
    还有一件事,要执行你可能想要使用的 shell 脚本

    docker exec 5.7-mysql "./var/log/mysql/initlogs.sh"
    

    其中 initlogs.sh 是 shell 脚本的名称。

    我真的希望它能帮助别人!

    【讨论】:

      猜你喜欢
      • 2016-04-29
      • 2017-08-14
      • 1970-01-01
      • 2017-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-02
      • 2013-01-22
      相关资源
      最近更新 更多