今天打算学习一下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,服务器将禁用导入和导出操作。
官网还说了,这个值在DEB
, RPM
, SVR4
三个软件包管理系统中默认是/var/lib/mysql-files目录。所以docker运行的mysql中才会有上述错误日志。DEB
, RPM
, SVR4
我也了解了一下,将含义列出来。
DEB、RPM 和 SVR4 是不同类型的软件包管理系统所使用的文件格式,它们分别代表:
- DEB (Debian): DEB 是 Debian Linux 发行版及其衍生版本(如 Ubuntu)使用的软件包格式。Debian 软件包管理器(dpkg)用于安装、升级和管理 .deb 文件格式的软件包。
- RPM (Red Hat Package Manager): RPM 是 Red Hat、Fedora、CentOS 和其他基于 Red Hat 的 Linux 发行版使用的软件包格式。RPM 包管理器(rpm)用于处理 .rpm 文件格式的软件包。
- 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,再次进行初始化,输入用户名密码,登录,成功!