【Docker实战】Docker安装mysql最新版(不仅如此)

今天打算学习一下Gin-Vue-Admin,前后端依赖按照网上教程安装好,启动前后端服务。这时,会自动打开默认浏览器访问http://localhost:8080/#/login,显示界面如下:

输入用户名密码验证码,登陆不进去,需要先进行初始化。点击“前往初始化”按钮,在随后的页面点击“我已确认”

会出现下图,要求我们提供一个数据库。因为mysql使用比较多,因此打算先用Docker安装一个mysql的最新版,用以存储Gin-Vue-Admin的数据。

在前面我讲解了docker run的用法,这里就需要用到了。

参考了网上搜索靠前的设置方法,配置如下:

docker run --name mysqltest -d -p 3306:3306 -v E:/MyTestProjects/mysqldata/log:/var/log/mysql -v E:/MyTestProjects/mysqldata/data:/var/lib/mysql -v E:/MyTestProjects/mysqldata/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root mysql
命令&选项注释
docker固定关键字,使用docker命令必须以docker开头
run从一个镜像创建并运行一个新容器
–name mysqltest指定新容器的名字为mysqltest
-d以后台模式运行容器
-p 3306:3306将宿主机端口号3306映射到容器端口号3306,3306是mysql默认端口号
-v E:/MyTestProjects/mysqldata/log:/var/log/mysql将宿主机的 E:\MyTestProjects\mysqldata\log目录映射到容器的 /var/log/mysql 目录,用于持久化配置文件。
-v E:/MyTestProjects/mysqldata/data:/var/lib/mysql将宿主机的 E:\MyTestProjects\mysqldata\data目录映射到容器的 /var/lib/mysql 目录,用于持久化配置文件。
-v E:/MyTestProjects/mysqldata/conf:/etc/mysql将宿主机的 E:\MyTestProjects\mysqldata\conf目录映射到容器的 /etc/mysql 目录,用于持久化配置文件。
-e MYSQL_ROOT_PASSWORD=root将环境变量MYSQL_ROOT_PASSWORD设置为root并传给新的mysql容器
mysql以mysql为镜像生成新容器,没指名标签说明mysql等于mysql:latest


本以为很简单就能配置好,却发现,mysql怎么也启动不起来。如下图所示:

点击容器名mysqltest,查看日志。发现如下报错。

这说明安装mysql最新版的容器,还需要一个mysql-files文件夹。realpath()是用来获取指定路径名的绝对路径的一个函数,它因为找不到指定的目录而返回了错误。后面一段日志又说明,mysql找不到–secure-file-priv指定的文件夹。

我喜欢究根问底,那么这个–secure-file-priv是做什么用的呢?

官网是这么解释的:MySQL :: MySQL 8.0 Reference Manual :: 7.1.8 Server System Variables

这个变量用于限制数据导入和导出操作的影响,例如那些由 LOAD DATA 和 SELECT … INTO OUTFILE 语句以及 LOAD_FILE() 函数执行的操作。这些操作只允许具有 FILE 特权的用户执行。

secure_file_priv 可以按以下方式设置:

  • 如果为空(空字符串),该变量没有效果。这不是一个安全设置。
  • 如果设置为一个目录的名称,服务器将限制导入和导出操作只处理该目录中的文件。目录必须存在;服务器不会创建它。
  • 如果设置为 NULL,服务器将禁用导入和导出操作。

官网还说了,这个值在DEBRPMSVR4三个软件包管理系统中默认是/var/lib/mysql-files目录。所以docker运行的mysql中才会有上述错误日志。DEBRPMSVR4我也了解了一下,将含义列出来。

DEB、RPM 和 SVR4 是不同类型的软件包管理系统所使用的文件格式,它们分别代表:

  1. DEB (Debian): DEB 是 Debian Linux 发行版及其衍生版本(如 Ubuntu)使用的软件包格式。Debian 软件包管理器(dpkg)用于安装、升级和管理 .deb 文件格式的软件包。
  2. RPM (Red Hat Package Manager): RPM 是 Red Hat、Fedora、CentOS 和其他基于 Red Hat 的 Linux 发行版使用的软件包格式。RPM 包管理器(rpm)用于处理 .rpm 文件格式的软件包。
  3. SVR4 (System V Release 4): SVR4 是 System V Release 4 的缩写,它是指 System V 操作系统的第四个版本。SVR4 是一个软件包格式,主要用于 Solaris 和其他 System V 风格的 Unix 系统中。SVR4 软件包通常以 .pkg 结尾。

这些软件包格式都提供了软件的打包、分发、安装和管理的机制,但它们是为不同的 Linux 发行版或 Unix 系统设计的。每种格式都有自己的一套工具和命令来处理软件包的安装、升级、查询和验证等操作。

最后,我重新组织了一下docker run这个命令,将/var/lib/mysql-files也做了映射,如下所示:

docker run -d -p 3306:3306 -v E:\MyTestProjects\mysqldata\conf:/etc/mysql -v  E:\MyTestProjects\mysqldata\logs:/var/log/mysql -v  E:\MyTestProjects\mysqldata\data:/var/lib/mysql -v  E:\MyTestProjects\mysqldata\mysql-files:/var/lib/mysql-files -e MYSQL_ROOT_PASSWORD=root --name mysqltest mysql

见证奇迹的时刻就是现在!!!

oh!no!mysql依然没启动成功。这次报错如下:

这次是没在容器环境下找到conf.d文件夹,对应容器的/etc/mysql目录,我的宿主机路径为E:\MyTestProjects\mysqldata\conf。于是我在这里创建一个conf.d文件夹。

这回重新启动mysql,mysql正常启动。

于是启动Gin-Vue-Admin,再次进行初始化,输入用户名密码,登录,成功!

  • 13
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值