从docker容器记录mysql查询

voase2hg  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(324)

我是新来 Docker ,我仍然在弄清楚它是如何工作的。我已经通过docker建立了一个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在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文件。

dly7yett

dly7yett1#

我解决问题的方法是使用以下方法:

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容器中的内容与myfolderlogs/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中,我可以直接访问它。
还有一件事,执行您可能想要使用的shell脚本

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

其中initlogs.sh是shell脚本的名称。
我真的希望它能帮助别人!

相关问题