这段时间在 http://video.jessetalk.cn/ 学习提升,其中涉及到docker在Windows上部署mysql的问题,让我很头疼,经过我的努力,算是半解决了这个问题,为什么是半呢,看过就知道了
mysql挂载 /etc/my.cnf 的时候没有什么问题,主要是在 /var/lib/mysql 的时候会出现
我已开始以为是 Windows下路径的问题,我试过了
e:/docker/mymysql/data
/e/docker/mymysql/data
//e/docker/mymysql/data
都不行,然后看到说可以先在要使用的文件夹的位置上创建一个 volume, 再使用创建的 volume 挂载到容器上去,我进入 e:/docker/mymysql/data
文件夹
docker create --name mymysql-data
挂载到mysql之后,我的data文件夹里面什么都没有。难道不能直接这么创建?
我试了 https://docs.docker.com/engine/reference/commandline/volume_create/
docker create -d e:/docker/mymysql/data --name mymysql-data
多种参数,都没有创建成功,这个方法失败了。
这个方法可能再别的电脑上是可以的,可是在我这确实是行不通的,如果是我创建的有问题欢迎大家提出来。
重新看提示的问题,就是因为 /var/lib/mysql/mysql.sock
,(在data文件夹中不存在,即使是我手动创建一个,也会被删除并提示这个问题)
这个文件既然不能放在外面那么放进去呢?
在my.cnf中添加了
socket=/var/lib/mysql.sock
还是不行,
然后我在看mysql生成的my.cnf文件的时候发现了一个有意思的配置
[mysqld]
skip-host-cache
skip-name-resolve
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
secure-file-priv=/var/lib/mysql-files
user=mysql
#log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
#以下是手动添加的其他配置
character-set-server=utf8
default_authentication_plugin=mysql_native_password
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
原来数据库的位置是可以配置的,挂载mysql文件夹不就是想要数据库文件放在容器外面的么
既然mysql.sock不能换位置,那么就把 datadir=/var/lib/mysql/data
http://www.fwhyy.com/2018/05/docker-installs-mysql-to-mount-external-data-and-configuration/
然后我的docker 命令:
docker run -p 3306:3306
--privileged=true
--restart always
--name mymysql
-e MYSQL_USER=fanqinglin
-e MYSQL_PASSWORD=123456
-e MYSQL_ROOT_PASSWORD=123456
--mount type=bind,source=e:/docker/mymysql/config/my.cnf,target=/etc/my.cnf
--mount type=bind,source=e:/docker/mymysql/data,target=/var/lib/mysql/data
--mount type=bind,source=e:/docker/mymysql/scripts/,target=/docker-entrypoint-initdb.d/
-d mysql/mysql-server
嘿嘿嘿,到这里docker里面的mysql终于运行起来了