docker启动mysql多实例连接报错Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’

执行命令如下:

docker run -d -p 3306:3306 --name mysql3306 --restart=always --privileged=true -v /myvolume/mysql-master/log:/var/log/mysql -v /myvolume/mysql-master/data:/var/lib/mysql -v /myvolume/mysql-master/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
    
docker run -d -p 3307:3306 --name mysql3307 --restart=always --privileged=true -v /myvolume/mysql-master/log:/var/log/mysql -v /myvolume/mysql-master/data:/var/lib/mysql -v /myvolume/mysql-master/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

背景说明:

成功启动第一个mysql实例,进入容器内然后执行登录命令:mysql -uroot -p 是可以成功访问连接mysql的,当启动第二个mysql实例的时候,进入容器报错如图1,显示Can’t connect to local MySQL server through socket ‘/var/run ,然后执行命令查看日志:docker logs --tail 50 --floow --timestamps mysql3307 报错如图2。
在这里插入图片描述

如图1

在这里插入图片描述

如图2

我的错误原因
如图2报错纯粹是docker启动2个mysql实例时指向了相同的数据卷,正常应该是启动一个实例指定唯一一个数据卷。
问题:那么为什么会出现这个常识错误呢?
因为当时在我觉得“数据卷”只是宿主机为了持久化存储数据的一种方式,所以我会觉得多个mysql实例指向相同的保存路径这个思路没问题呀,但是却忽略的数据库InnoDB是有锁机制的,当一个进程跑第1个mysql实例的时候就已经针对数据卷进行了加锁操作,这样当启动第2个mysql实例的时候,发现怎么都获取不到数据卷文件,因为被第一个实例加锁占用呢,所以就会报如图2的错误。

现实场景中使用应该是不同数据库实例指向不同的数据卷,且不同数据库实例要启动在不同的 服务器上,因为一台服务器跑公司所有项目的多个mysql实例,万一服务器有问题所有mysql都用不了,达不到高性能、高可用的效果。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
docker中,当MySQL报错Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)时,可能是由于以下几个原因导致的。 首先,可能是在启动MySQL容器时,没有正确设置volume挂载或者路径设置错误。引用中的示例命令中,使用了"-v /data:/data"来设置volume挂载,将宿主机的"/data"目录挂载到容器的"/data"目录。而引用中的示例命令中,将宿主机的"/myvolume/mysql-master"目录挂载到容器的"/var/log/mysql"、"/var/lib/mysql"和"/etc/mysql"目录。请确保volume挂载的路径设置正确。 其次,可能是启动容器时没有正确设置MySQL的配置文件。引用中的示例命令通过"-v /myvolume/mysql-master/conf:/etc/mysql"将宿主机的配置文件挂载到容器中。请确保配置文件的路径设置正确,并且MySQL的配置文件中正确设置了socket路径。 最后,可能是因为MySQL服务没有正确启动。可以通过查看容器的日志来获取更多信息。引用中的示例命令"docker logs --tail 50 --follow --timestamps mysql3307"可以查看容器日志。请确保MySQL服务已经成功启动,并且没有其他错误信息。 总结起来,当在docker中遇到MySQL报错"Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)"时,需要检查以下几个方面:volume挂载设置是否正确,配置文件路径是否正确,以及MySQL服务是否成功启动。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

刘大猫.

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

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

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

打赏作者

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

抵扣说明:

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

余额充值