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

执行命令如下:
复制代码
背景说明:
成功启动第一个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。

<center><font color='red'>如图 1</font></center>

<center><font color='red'>如图 2</font></center>
我的错误原因
:如图 2 报错纯粹是 docker 启动 2 个 mysql 实例时指向了相同的数据卷,正常应该是启动一个实例指定唯一一个数据卷。问题:那么为什么会出现这个常识错误呢?
因为当时在我觉得“数据卷”
只是宿主机为了持久化存储数据的一种方式,所以我会觉得多个 mysql 实例指向相同的保存路径这个思路没问题呀,但是却忽略的数据库 InnoDB 是有锁机制的,当一个进程跑第 1 个 mysql 实例的时候就已经针对数据卷进行了加锁操作,这样当启动第 2 个 mysql 实例的时候,发现怎么都获取不到数据卷文件,因为被第一个实例加锁占用呢,所以就会报如图 2 的错误。
现实场景中使用应该是不同数据库实例指向不同的数据卷,且不同数据库实例要启动在不同的 服务器上,因为一台服务器跑公司所有项目的多个 mysql 实例,万一服务器有问题所有 mysql 都用不了,达不到高性能、高可用的效果。
评论