簡體   English   中英

從docker容器中記錄mysql查詢

[英]logging mysql queries from docker container

我是碼頭工人的新手,我還在弄清楚它是如何工作的。 我已經通過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文件的一部分,所以我也可以在yaml文件所在的位置安裝all.log文件。

我為解決我的問題所做的是使用以下內容:

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腳本的名稱。

我真的希望它會幫助別人!

暫無
暫無

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

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