欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 运维知识 > 数据库 >内容正文

数据库

mysql error.log 权限_docker-compose 启动mysql 容器时 error.log 无权限访问怎么办?

发布时间:2025/3/21 数据库 52 豆豆
生活随笔 收集整理的这篇文章主要介绍了 mysql error.log 权限_docker-compose 启动mysql 容器时 error.log 无权限访问怎么办? 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

场景分析

docker-compose 运行mysql 容器的时候一直报下面的错误:

.../var/log/mysql/mysql-error.log' for error logging: Permission denied"

问题分析

出现这个问题,主要是容器中启动MySQL 服务的是 mysql 用户。而我们宿主机中是没有mysql 这个用户存在的,所以产生了 Permission denied 这个错误类型。

解决问题

直接进入到mysql 容器中,查看MySQL 用户的相关信息

root@319ea9cea30b:/var/log# cat /etc/passwd

root:x:0:0:root:/root:/bin/bash

daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin

bin:x:2:2:bin:/bin:/usr/sbin/nologin

sys:x:3:3:sys:/dev:/usr/sbin/nologin

sync:x:4:65534:sync:/bin:/bin/sync

games:x:5:60:games:/usr/games:/usr/sbin/nologin

man:x:6:12:man:/var/cache/man:/usr/sbin/nologin

lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin

mail:x:8:8:mail:/var/mail:/usr/sbin/nologin

news:x:9:9:news:/var/spool/news:/usr/sbin/nologin

uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin

proxy:x:13:13:proxy:/bin:/usr/sbin/nologin

www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin

backup:x:34:34:backup:/var/backups:/usr/sbin/nologin

list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin

irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin

gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin

nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin

_apt:x:100:65534::/nonexistent:/usr/sbin/nologin

mysql:x:999:999::/home/mysql:/bin/sh

root@319ea9cea30b:/var/log#

说明:

/etc/passwd 的文件格式:

用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell

所以,MySQL容器启动MySQL 服务是用的mysql 用户。因此,我们可以在启动容器的时候,直接在容器中去运行一个创建error.log 的命令即可。

成功案例,MySQL

项目目录结构

[root@iZwz93izbw8wks6an5uggxZ mysql]# ls -l

total 16

drwxr-xr-x 2 root root 4096 Aug 17 18:06 conf

drwxr-xr-x 2 polkitd root 4096 Aug 17 20:37 data

-rw-r--r-- 1 root root 464 Aug 17 20:31 docker-compose.yml

drwxr-xr-x 2 root root 4096 Aug 12 23:56 log

[root@iZwz93izbw8wks6an5uggxZ mysql]# tree

.

|-- conf

| `-- my.cnf

|-- data

|-- docker-compose.yml

`-- log

`-- error.log

3 directories, 3 files

[root@iZwz93izbw8wks6an5uggxZ mysql]#

其中 ,data 是一个空的目录, log目录 下有一个error.log 文件, conf目录下有一个 my.cnf 文件。

my.cnf 内容

[mysql]

[mysqld]

pid-file = /var/run/mysqld/mysqld.pid

socket = /var/run/mysqld/mysqld.sock

datadir = /var/lib/mysql

log-error = /var/log/mysql/error.log

symbolic-links=0

skip-host-cache

skip-name-resolve

[mysqldump]

quick

quote-names

max_allowed_packet = 16M

docker-compose.yml 的内容

version: "3"

services:

mysql:

image: mysql:5.7

container_name: mysql

ports:

- 3306:3306

environment:

MYSQL_ROOT_PASSWORD: root

volumes:

- $PWD/conf:/etc/mysql

- $PWD/data:/var/lib/mysql

- $PWD/log/error.log:/var/log/mysql/error.log

command:

- "--default-authentication-plugin=mysql_native_password"

entrypoint: bash -c "chown -R mysql:mysql /var/log/mysql && exec /entrypoint.sh mysqld"

restart: always

说明:

command 用来指定mysql容器启动后默认执行的命令 ,entrypoint 用来启动容器后需要执行的命令

启动容器

利用docker ps 查看正在运行的容器

[root@iZwz93izbw8wks6an5uggxZ mysql]# ls

conf data docker-compose.yml log

[root@iZwz93izbw8wks6an5uggxZ mysql]# docker-compose up -d

[root@iZwz93izbw8wks6an5uggxZ mysql]# docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

87ada830457e mysql:5.7 "bash -c 'chown -R m…" About a minute ago Up About a minute 0.0.0.0:3306->3306/tcp, 33060/tcp mysql

[root@iZwz93izbw8wks6an5uggxZ mysql]#

总结

以上是生活随笔为你收集整理的mysql error.log 权限_docker-compose 启动mysql 容器时 error.log 无权限访问怎么办?的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。