docker 安装mysql 启动报错 mysql-bin.index not found (Errcode: 13 - Permission denied)

报错信息

类似下面这种情况:

/mysql/bin/mysqld: File './mysql-bin.index' not found (Errcode: 13 - Permission denied)
[ERROR] Aborting
[Note] Binlog end
[Note] /mysql/bin/mysqld: Shutdown complete

触发条件

出现问题的情况:启用mysql的binlog导致的
我这边docker-compose内容如下:

version: '3'
services:
    mysql:
        container_name: mysql
        image: mysql:5.7
        environment:
            - MYSQL_ROOT_PASSWORD=mysql的root密码
        volumes: 
            - ./conf:/etc/mysql
            - ./logs:/var/log/mysql
            - ./data:/var/lib/mysql
        ports: 
            - 30030:3306
        restart: always

为了启用binlog,我的操作是修改配置文件my.cnf,在[mysqld]追加下面文件的最后三行,重启后就报了这个问题

[mysqld]
lower_case_table_names=1

log-bin=/var/lib/mysql/mysql-bin
binlog-format=ROW
server_id=123456

问题分析

看到报错第一行File ‘./mysql-bin.index’ not found (Errcode: 13 - Permission denied),知道是mysql用户对数据库目录内的所有文件不具有写的权限,按照常规的解决办法是
chown mysql:mysql -R /var/lib/mysql
但是现在我是通过docker启动的MySQL,就无法控制这个问题了

解决办法

知道了原因,我想到的办法是在第一次启动时my.cnf不加入那三行,只保留下面的内容

[mysqld]
lower_case_table_names=1

然后docker-compose start mysql启动后执行下面的三步操作

docker exec mysql bash -c "echo 'log-bin=/var/lib/mysql/mysql-bin' >> /etc/mysql/my.cnf"
docker exec mysql bash -c "echo 'binlog-format=ROW' >> /etc/mysql/my.cnf"
docker exec mysql bash -c "echo 'server_id=123456' >> /etc/mysql/my.cnf"

通过这种办法写入后,在执行docker-compose restart mysql就不会再报错,这时候查询show variables like 'log_bin%',binlog已经正常启用
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/huangge1199/article/details/110849489