ведение журнала запросов MySQL из контейнера Docker - PullRequest
0 голосов
/ 24 октября 2018

Я новичок в докере, и я все еще выясняю, как это работает.Я настроил через 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, закомментировав строку с all.log из файла yaml.

2) регистрация в контейнере mysql с помощью bash и запуск следующего

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 / volume и получение созданного файла.

То, чего я пытаюсь добиться, - это как-то сделать эту команду частью файла yaml, чтобы у меня также был файл all.log, смонтированный в том месте, где находится файл yaml.

1 Ответ

0 голосов
/ 05 февраля 2019

Чтобы решить мою проблему, я использовал следующее:

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

Этот код синхронизировал бы то, что находится внутри контейнера Docker MySQL, с моей папкой logs / mysql.Поэтому я поместил туда небольшой сценарий оболочки.

#!/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, к которому у меня есть прямой доступ.
Еще одна вещь, для выполнения этого сценария оболочки вы можете использовать

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

где initlogs.sh - это имя сценария оболочки.

Я действительно надеюсь, что это кому-нибудь поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...