Docker启动mysql容器时找不到 mysqlx.sock 和 mysqld.sock

复制代码
2025-04-26 12:18:50+08:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.41-1.el9 started.
chown: changing ownership of '/var/run/mysqld/mysqld.sock': No such file or directory
chown: changing ownership of '/var/run/mysqld/mysqlx.sock': No such file or directory
2025-04-26 12:18:51+08:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.41-1.el9 started.
chown: changing ownership of '/var/run/mysqld/mysqld.sock': No such file or directory
chown: changing ownership of '/var/run/mysqld/mysqlx.sock': No such file or directory
2025-04-26 12:18:53+08:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.41-1.el9 started.
chown: changing ownership of '/var/run/mysqld/mysqld.sock': No such file or directory
chown: changing ownership of '/var/run/mysqld/mysqlx.sock': No such file or directory
2025-04-26 12:18:57+08:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.41-1.el9 started.
chown: changing ownership of '/var/run/mysqld/mysqld.sock': No such file or directory
chown: changing ownership of '/var/run/mysqld/mysqlx.sock': No such file or directory

事情的经过是这样的,docker容器里面安装的mysql服务,当docker容器不正当关闭时或者强制关掉容器时当再次启动容器在运行里面的mysql服务时就回报找不到mysqlx.sock 无法启动容器,但是在我们挂载的目录里面又能看到mysql.sock文件夹,就是启动不了,经过一番探索给出下面几种解决方式:

下面是docker容器与我本地之间的挂载目录,容器名称为mysql

docker run \

-p 3306:3306 \

--name mysql \

--privileged=true \

--restart unless-stopped \

-v /Users/hayden/mysql:/etc/mysql \

-v /Users/hayden/mysql/logs:/logs \

-v /Users/hayden/mysql/data:/var/lib/mysql \

-v /etc/localtime:/etc/localtime \

-e MYSQL_ROOT_PASSWORD=root1234\

-d mysql:8.0

第一种:删除mysql.sock文件,以我上面挂载目录为例

当我们如果本地挂载目录里面/Users/hayden/mysql/data有 mysql.sock文件的话我们可以删掉他然后在重启一下mysql容器,因为mysql容器启动时会自动创建 mysql.sock,删掉以前最好是先备份一下,然后重启一下试一下看看行不行。

第二种:挂载文件夹里面mysql.sock 不存在

当然这种情况也是有的,就是我们挂载目录里面/Users/hayden/mysql/data本来就没有mysql.sock 这个文件,所以启动的时候说找不到mysql.sock 也是正常的,这种情况的话我们可以先停止容器,然后重新启动一个mysql容器挂载到其他的目录,然后等启动成功以后我们去其他容器里面将mysql.sock 复制一份到/Users/hayden/mysql/data 里面,然后新的容器,在重新启动一下原来的容器看看是否能启动成功。

首先在我们/Users/hayden/ 目录里面新建了一个文件夹mysql01

复制代码
# 先创建目录并设置权限
mkdir -p /Users/hayden/mysql01/{data,conf,logs}
chmod -R 777 /Users/hayden/mysql01

然后在启动下面的容器mysqltest,启动成功以后去 /Users/hayden/mysql01/data 里面复制mysql.sock文件到/Users/hayden/mysql/data 里面,然后停止mysqltest 容器,然后删除 mysqltest

docker run \

-p 3306:3306 \

--name mysqltest \

--privileged=true \

--restart unless-stopped \

-v /Users/hayden/mysql01:/etc/mysql \

-v /Users/hayden/mysql01/logs:/logs \

-v /Users/hayden/mysql01/data:/var/lib/mysql \

-v /etc/localtime:/etc/localtime \

-e MYSQL_ROOT_PASSWORD=root1234\

-d mysql:8.0

复制代码
#停止容器
docker stop mysqltest
#删除容器
​​​​​​​docker rm mysqltest
#最后在启动一下原来的mysql容器看看是否能启动成功
docker start mysql
如果上面都不行的话,那就试一下最后一种办法
复制代码
#先停止容器
docker stop mysql

#在mysql文件夹下面创建文件sockets
mkdir -p /Users/hayden/mysql/sockets

#或者 同时创建data,conf,sockets 3个文件夹
mkdir -p /Users/hayden/mysql/{data,conf,sockets}

#创建成功以后给权限
chmod -R 777 /Users/hayden/mysql

#删掉容器mysql
docker rm mysql

最后使用下面的方式重新创建容器即可,因为容器里面的SQL数据是指向我们/Users/hayden/mysql/data的,所以mysql数据这些都不会丢失。使用下面重新创建容器以后咱们的mysql就能正常启动了。

复制代码
docker run -d \
  --name mysql \  
  -p 3306:3306 \
  -v /Users/hayden/mysql/data:/var/lib/mysql \
  -v /Users/hayden/mysql/conf:/etc/mysql/conf.d \
  -v /Users/hayden/mysql/sockets:/var/run/mysqld \
  -e MYSQL_ROOT_PASSWORD=root123 \
  -e TZ=Asia/Shanghai \
  mysql:8.0 \
  --socket=/var/run/mysqld/mysqld.sock
相关推荐
Cloud云卷云舒4 小时前
云卷云舒:从Oracle/MySQL迁移到HaishanDB:迁移评估工具核心技术拆解
mysql·oracle·ai-native·haishandb·信创数据库替换
生活爱好者!7 小时前
我把NAS当作下载机,docker一键部署qb
运维·docker·容器
用户71333585156247 小时前
MySQL - 事务、redo/undo 日志与 MVCC
mysql
java_logo8 小时前
Docker Compose 部署 ClickHouse:快速搭建高性能列式数据库
数据库·clickhouse·docker·列式数据库·轩辕镜像·高性能数据库·clickhouse部署教程
MC皮蛋侠客8 小时前
uv 系列(七):CI/CD、Docker 与私有索引——生产级交付
python·ci/cd·docker·uv
用户71333585156248 小时前
MySQL - InnoDB 的 Buffer Pool
mysql
Hui Baby9 小时前
K8S使用CRD和控制器简单应用
云原生·容器·kubernetes
欲速不达88209 小时前
Mysql并发DML锁等待的优化
数据库·mysql
L16247610 小时前
MySQL 全环境生产快速安装 + 完整配置手册(整合国产银河麒麟适配 + 主从补充版)
数据库·mysql
用户2333768521811 小时前
Docker 端口"时通时不通"的排查实战
docker