这段时间在 学习提升,其中涉及到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文件夹里面什么都没有。难道不能直接这么创建?
我试了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-cacheskip-name-resolvedatadir=/var/lib/mysqlsocket=/var/lib/mysql/mysql.socksecure-file-priv=/var/lib/mysql-filesuser=mysql#log-error=/var/log/mysqld.logpid-file=/var/run/mysqld/mysqld.pid#以下是手动添加的其他配置character-set-server=utf8default_authentication_plugin=mysql_native_password[client]default-character-set=utf8[mysql]default-character-set=utf8
原来数据库的位置是可以配置的,挂载mysql文件夹不就是想要数据库文件放在容器外面的么
既然mysql.sock不能换位置,那么就把 datadir=/var/lib/mysql/data
然后我的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终于运行起来了