docker安装mysql挂载外部配置和数据⽬录
从docker hub上可以到mysql外挂配置和数据⽬录的⼀些⽂档说明
从该⽂档中可以了解到,mysql的默认配置为/etc/mysql/myf,该⽂件中包含了⼀个额外的数据⽬录/etc/mysql/conf.d或者/etc/f.d
先启动⼀个不带任何挂载的mysql容器
docker run -d -p 3307:3307 -e MYSQL_ROOT_PASSWORD=12345 --name mysql_test2 mysql:5.7.23
进⼊容器
docker exec -it mysql_test2 bash
根据上述docker hub上描述,可以发现/etc/mysql/conf.d/中存在三个⽂件,分别为dockerf,mysqlf和mysqldumpf,/etc/f.d/下只存在⼀个⽂件mysqldf
第⼀种启动⽅式
docker run -d -p 3306:3306 -v /etc/mysql/myf:/etc/mysql/conf.d/mysqlf -v /data/mysql/data:/var/lib/
mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql_test mysql:5.7.23这样启动的容器中,/etc/mysql/conf.d/mysqlf中的内容将被/f中⽂件内容覆盖
第⼆种启动⽅式
docker run -d -p 3306:3306 -v /etc/mysql/:/etc/mysql/conf.d/ -v /data/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql_test mysql:5.7.23
这种⽅式将会把/etc/mysql/conf.d/下⾯的三个⽂件替换为外部挂载的myf⽂件,也就是说,这种⽅式挂载了⽬录,容器中的⽬录与外部⽂件⽬录内容⼀致
第三种启动⽅式
docker run -d -p 3306:3306 -v /etc/mysql/myf:/etc/mysql/conf.d/mysqldf -v /data/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=12345 --name mysql_test mysql:5.7.23
mysql下载配置登录都容器中,可以发现/etc/mysql/conf.d/中的⽂件多了⼀个mysqldf,且该⽂件即是我们外挂的myf,⽽/etc/f.d/mysqldf中的内容依然是之前的
以上三种⽅式都可以实现外挂配置和数据⽬录,但⾸先配置中的⽂件路径在容器中需要存在,否则mysql容器将⽆法正常启动。个⼈觉得第⼆种看着顺眼点。:)
MYSQL8
mysql8中,/etc/mysql/myf只依赖了/etc/mysql/conf.d/⽬录,所以上述的第三种⽅式就⾏不通了,另外如果配置⽂件中设置有socket,则client和mysqld 设置的socket应该⼀致,如果去掉,就全部去掉,其他再有错误,根据mysql中错误⽇志查下原因,⼀般都是因为配置
docker run -d -p 3306:3306 -v /etc/mysql/myf:/etc/mysql/conf.d/mysqldf -v /data/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=12345 --name mysql_test mysql
如果使⽤虚拟机,内存⽐较⼩时,注意max_connections和innodb_buffer_pool_size不要设置太⼤,否则启动会⾮常慢,本例中分别配置了2000和
1200M,但当前虚拟机才给分配了1G内存,故启动的时候⾮常慢,⼀般前者调整为512 ~1000,后者为物理内存的60%~70%,但本虚拟机不⽌mysql,还有其他程序,故将两个参数分别改为200和100M,启动速度⽐之前快了好多倍
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论