从docker hub上可以找到mysql外挂配置和数据目录的一些文档说明

https://hub.docker.com/_/mysql

从该文档中可以了解到,mysql的默认配置为/etc/mysql/my.cnf,该文件中包含了一个额外的数据目录/etc/mysql/conf.d 或者/etc/mysql/mysql.conf.d

先启动一个不带任何挂载的mysql容器

docker run -d -p : -e MYSQL_ROOT_PASSWORD= --name mysql_test2 mysql:5.7.

进入容器

docker exec -it mysql_test2 bash

根据上述docker hub上描述,可以发现/etc/mysql/conf.d/中存在三个文件,分别为docker.cnf,mysql.cnf和mysqldump.cnf,/etc/mysql/mysql.conf.d/下只存在一个文件mysqld.cnf

第一种启动方式

docker run -d -p : -v /etc/mysql/my.cnf:/etc/mysql/conf.d/mysql.cnf -v /data/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD= --name mysql_test mysql:5.7.

这样启动的容器中,/etc/mysql/conf.d/mysql.cnf中的内容将被/etc/mysql.my.cnf中文件内容覆盖

第二种启动方式

docker run -d -p : -v /etc/mysql/:/etc/mysql/conf.d/ -v /data/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD= --name mysql_test mysql:5.7.

这种方式将会把/etc/mysql/conf.d/下面的三个文件替换为外部挂载的my.cnf文件,也就是说,这种方式挂载了目录,容器中的目录与外部文件目录内容一致

第三种启动方式

docker run -d -p : -v /etc/mysql/my.cnf:/etc/mysql/conf.d/mysqld.cnf -v /data/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD= --name mysql_test mysql:5.7.

登录都容器中,可以发现/etc/mysql/conf.d/中的文件多了一个mysqld.cnf,且该文件即是我们外挂的my.cnf,而/etc/mysql/mysql.conf.d/mysqld.cnf中的内容依然是之前的

以上三种方式都可以实现外挂配置和数据目录,但首先配置中的文件路径在容器中需要存在,否则mysql容器将无法正常启动。个人觉得第二种看着顺眼点。:)

MYSQL8

mysql8中,/etc/mysql/my.cnf只依赖了/etc/mysql/conf.d/目录,所以上述的第三种方式就行不通了,另外如果配置文件中设置有socket,则client和mysqld设置的socket应该一致,如果去掉,就全部去掉,其他再有错误,根据mysql中错误日志查找下原因,一般都是因为配置

docker run -d -p : -v /etc/mysql/my.cnf:/etc/mysql/conf.d/mysqld.cnf -v /data/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD= --name mysql_test mysql

如果使用虚拟机,内存比较小时,注意max_connections和innodb_buffer_pool_size不要设置太大,否则启动会非常慢,本例中分别配置了2000和1200M,但当前虚拟机才给分配了1G内存,故启动的时候非常慢,一般前者调整为512 ~1000,后者为物理内存的60%~70%,但本虚拟机不止mysql,还有其他程序,故将两个参数分别改为200和100M,启动速度比之前快了好多倍

最新文章

  1. PHP-- 获取http请求头信息
  2. BZOJ2584 : [Wc2012]memory
  3. 归档 Archive、解档Unchive、 XML(一)
  4. 网站注册(css)
  5. JavaScript学习——内置属性
  6. JavaScript中===与==的区别
  7. HTTP分段下载
  8. Override ListView getAdapter造成的后果
  9. A Practical Guide to Distributed Scrum - 分布式Scrum的实用指南 - 读书笔记
  10. [Java] Map / HashMap - 源代码学习笔记
  11. Coursera获取中文字幕(如果有的话)
  12. Sublime 学习记录(二) package control 组件
  13. hdu1044
  14. Linux背背背(6)
  15. java应用,直接请求没问题,通过nginx跳转状态吗400
  16. 无线渗透wpa加密路由器
  17. 使用Fiddler查看APP的请求接口、接口参数和返回值的方法
  18. JS 点击元素发ajax请求 打开一个新窗口
  19. JS高级程序设计 表单部分
  20. spring boot 2.0 源码分析(三)

热门文章

  1. swoole| swoole 协程初体验 转
  2. Cannot determine value type from string 'xxxxxx'
  3. linux cenos开放端口
  4. 深度学习_1_Tensorflow_2_数据_文件读取
  5. idou老师教你学Istio06: 如何用istio实现流量迁移
  6. Kinect for Windows SDK开发入门(二):基础知识 上
  7. PHP中将二维数组 转换成字符串
  8. 使用Tampermonkey,实现Gitlab禁用自我Merge的功能
  9. nginx中ngx_http_access_module模块
  10. Lua 学习之基础篇六<Lua IO 库>