解决Windows环境下的docker中修改了mysql的配置文件之后启动不了的问题

本文介绍了在Docker容器中安装的MySQL5.7因修改lower_case_table_names配置导致服务无法启动的问题。错误信息显示配置文件中有选项没有正确分组。通过docker inspect找到MySQL配置文件在Docker镜像的路径,并在Windows的WSL环境中定位到该文件,发现并修正错误的配置行,使得MySQL能够正常启动。解决方案是删除错误添加的配置行,或者按照正确格式添加[mysqld]组来包含修改的选项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

**

前情简介:

**
由于在docker中安装的mysql5.7中区分表的大小写,进入到mysql的命令行模式之后就修改配置文件,主要修改

lower_case_table_names=1

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

修改之后就启动再也启动不起来了,说我配置文件改错了

2022-11-25 14:47:54+00:00 [ERROR] [Entrypoint]: mysqld failed while attempting to check config
        command was: mysqld --verbose --help --log-bin-index=/tmp/tmp.saFZWm1Kpy
        mysqld: [ERROR] Found option without preceding group in config file /etc/mysql/my.cnf at line 25!
mysqld: [ERROR] Fatal error in defaults handling. Program aborted!
2022-11-25 14:50:14+00:00 [ERROR] [Entrypoint]: mysqld failed while attempting to check config
        command was: mysqld --verbose --help --log-bin-index=/tmp/tmp.iyJzMo87UW
        mysqld: [ERROR] Found option without preceding group in config file /etc/mysql/my.cnf at line 25!
mysqld: [ERROR] Fatal error in defaults handling. Program aborted!
2022-11-25 15:45:39+00:00 [ERROR] [Entrypoint]: mysqld failed while attempting to check config
        command was: mysqld --verbose --help --log-bin-index=/tmp/tmp.7fGok4zsnQ
        mysqld: [ERROR] Found option without preceding group in config file /etc/mysql/my.cnf at line 25!
mysqld: [ERROR] Fatal error in defaults handling. Program aborted!
2022-11-25 16:49:08+00:00 [ERROR] [Entrypoint]: mysqld failed while attempting to check config
        command was: mysqld --verbose --help --log-bin-index=/tmp/tmp.m1iwv7bEFF
        mysqld: [ERROR] Found option without preceding group in config file /etc/mysql/my.cnf at line 25!
mysqld: [ERROR] Fatal error in defaults handling. Program aborted!
2022-11-25 16:53:49+00:00 [ERROR] [Entrypoint]: mysqld failed while attempting to check config
        command was: mysqld --verbose --help --log-bin-index=/tmp/tmp.WdeF98eP3C
        mysqld: [ERROR] Found option without preceding group in config file /etc/mysql/my.cnf at line 25!
mysqld: [ERROR] Fatal error in defaults handling. Program aborted!

因为当时修改的docker客户端管理软件中mysql窗口修改的就是my.cnf。当我修改完重新启动后mysql就再也启动不起来了,提示我修改文件报错。这个时候container不启动的话,再也进不了命令行模式,也就修改不了那个配置文件了。难道就没有其他办法了么。不,下面就是我的解决办法。

**

解决问题

**

首先我们先找到docker下mysql的配置文件在什么位置,执行如下命令

docker inspect mysql5.7

在这里插入图片描述
如上图所示就是我们需要找的文件,在这个文件路径下去找mysql的配置文件和我们在命令行窗口中的文件大致一样。

"UpperDir": "/var/lib/docker/overlay2/1b11908b2e44ea27138e56e7e2361205af2b570fb1c42ea0a1a9cd4a107f1e64/diff"

但是同样还是会存在一个问题,就是如果直接在Windows下找这个文件路径是找不到的。因为docker在Windows下依赖的wsl的linux环境。
我们需要在资源管理器中输入以下命令,资源管理器也就是我们的文件管理,在地址栏里输入即可

\\wsl$\docker-desktop-data

在这里插入图片描述
如上图所示我们就进入到docker的wsl虚拟环境了,接下来我们就一层一层的往里找就可以了。

\\wsl$\docker-desktop-data\data\docker\overlay2

以上的路径和我们的一开始要找的文件路径稍微有点区别,我们一开始/var/lib/docker下,现在是在/data/docker下。

/var/lib/docker/overlay2/1b11908b2e44ea27138e56e7e2361205af2b570fb1c42ea0a1a9cd4a107f1e64/diff

在这里插入图片描述
我们一层一层向下找,如下图所示。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
到这里我们就找到mysql的配置文件,但是这个配置文件和docker中mysql的命令行模式下的配置稍微不一样,但确实就是这个文件,我们打开看一下这个文件的内容是和my.cnf完全一样。
在这里插入图片描述
正好就是我们添加的哪行,然后我们暂时先把这个配置删除后,就可以正常启动了。
在这里插入图片描述
这里为什么修改配置文件会导致mysql启动不起来,是因为我们修改错了,我按照一下添加俩行就可以正常启动了。

[mysqld] 
lower_case_table_names=1

在这里插入图片描述

### Windows Docker 中安装和配置 MySQL Binlog #### 准备工作 为了确保能够在 Windows 上顺利通过 Docker 安装并配置 MySQL 的 binlog 功能,需先确认已正确安装 Docker Desktop 并启动服务。 #### 下载并运行 MySQL 镜像 使用官方提供的 MySQL 镜像来部署容器实例。对于特定版本的需求,比如 MySQL 5.7 版本,可以指定标签名 `mysql:5.7` 来拉取对应的镜像[^5]。 ```bash docker pull mysql:5.7 ``` 接着以守护进程模式启动该镜像,并设置必要的环境变量以及挂载卷用于持久化存储数据文件、日志文件及配置文件: ```bash docker run --name=mysql5.7 \ -e MYSQL_ROOT_PASSWORD=root_password \ -d -p 3306:3306 \ -v D:\mysql\data:/var/lib/mysql \ -v D:\mysql\conf.d:/etc/mysql/conf.d \ mysql:5.7 ``` 这里假设本地磁盘路径为 `D:`,实际操作时应替换为自己机器上的合适位置;同时注意修改默认密码 `root_password` 成更安全的选择。 #### 修改 MySQL 配置启用 Binlog 日志记录功能 进入正在运行中的 MySQL 容器内部终端会话,以便编辑其配置文件 `/etc/mysql/conf.d/custom.cnf` 或者其他自定义名称的 `.cnf` 文件,在其中添加如下几行参数以激活二进制日志特性[^2][^3]: ```ini [mysqld] server-id=1 log_bin=mysql-bin.log binlog_format=mixed expire_logs_days=7 max_binlog_size=100M ``` 上述指令分别设置了服务器唯一标识符、指定了二进制日志文件前缀名为 `mysql-bin.log`、选择了混合类型的事务处理方式、设定了过期删除策略为七天周期内的旧日志自动清理机制、限定了单个日志的最大体积不超过一百兆字节大小。 完成更改之后保存退出编辑器界面,随后重启 MySQL 实例使新设定生效: ```bash docker restart mysql5.7 ``` 此时便完成了整个过程的关键部分——即成功开启了 MySQL 数据库引擎下的变更事件追踪能力(Binlog),这将有助于后续实施诸如主从同步架构搭建或者增量备份恢复方案等工作场景的应用实践需求。 #### 测试验证 可以通过登录到 MySQL 控制台执行 SQL 查询语句查看当前状态是否正常开启 binlog 功能: ```sql SHOW VARIABLES LIKE 'log_bin'; ``` 如果返回的结果显示 ON,则说明已经成功启用了此选项。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

枣泥馅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值