赞
踩
因为开发了一个Vue+SpringBoot+Mysql+Redis的应用,需要交付给用户。用户的平台是Windows,且要求存在应用离线的要求,所以必须将所有环境部署到用户的电脑。起初想用docker进行迁移,但是后台有用JNA调用dll的解密库(必须windows环境),而docker容器基于linux内核(虽然有基于windows内核的docker-windows,但是不清楚配置难度,且仍然需要给用户下载和配置docker)。加之需要配置的环境就四个,于是我选择直接将对应版本的nodejs,jdk,mysql和redis各自实现bat批处理进行安装。
首先从网上或者官网下载你想要的对应版本的mysql解压包,注意是免安装的,就解压即可的。例如,我使用的是mysql 5.7.26版本的解压包 https://dev.mysql.com/downloads/mysql/5.7.html#downloads
(1)点击上面链接,选择Archives,查看你想要的历史版本。
(2)我这里选择下载 Windows (x86, 64-bit), ZIP Archive
(3)下载到自己指定的文件夹中,我这边是下到了 D:\TemperatureChainSetup 目录下。
(4)解释一下,这个安装包解压后,就和你用安装器安装的mysql基本一模一样。但是区别在于,你用安装器在它一步一步引导下会选择这个解压路径、初始配置、用户密码设置等等。而用这个的话,得你解压后,亲自使用命令行给它初始化配置好才可以使用mysql服务。因此,我们的bat就是进行这个操作,通过集成一系列操作来初始化配置Mysql。
(5)继续,我们解压安装包。解压操作就解压到当前目录,我这边是 D:\TemperatureChainSetup\mysql-5.7.26-winx64,它的下面应该就是bin文件等等了。如果多解压了一层文件夹,直接复制到上一层就行,Ctrl X或者Ctrl C+V。
(1)准备的内容
(2) 首先我们在mysql安装目录(就是bin文件夹的父目录)创建一个 my.ini文件(就是和bin文件夹同层),可以先创建一个my.txt, 后续更改后缀即可。
我的配置如下(可以通用,如有特需要求,自行修改),主要解释两个参数:
[client] # 设置mysql客户端连接服务端时默认使用的端口 port=3306 default-character-set=utf8 [mysql] # 设置mysql客户端默认字符集 default-character-set=utf8 [mysqld] # 设置3306端口 port=3306 # 设置mysql的安装目录(可以不用改,后续bat会自动更新这个路径) basedir=D:\TemperatureChainSetup\mysql-5.7.26-winx64 # 设置mysql数据库的数据的存放目录(可以不用改,后续bat会自动更新这个路径) datadir=D:\TemperatureChainSetup\mysql-5.7.26-winx64\data # 允许最大连接数 max_connections=200 # 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统 max_connect_errors=10 # 服务端使用的字符集默认为UTF8 character-set-server=utf8 # 创建新表时将使用的默认存储引擎 default-storage-engine=INNODB # 默认使用“mysql_native_password”插件认证 default_authentication_plugin=mysql_native_password
(3)你的sql文件,比如我的是 temperature_chain.sql,我放在了根目录下,你也可以自己放置在安装目录下新建的子文件下。这个后续在 bat中改一下对应的位置就行。我的sql是建一个数据库,然后建一些表,部分如下:
CREATE DATABASE IF NOT EXISTS temperature_chain CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
USE temperature_chain;
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for t_buoy
-- ----------------------------
DROP TABLE IF EXISTS `t_buoy`;
CREATE TABLE `t_buoy` (
...
(4)创建bat文件: 创建在安装目录下,为 mysql_setup.bat,注释中详细解释命令。
注意你要修改的部分在最后的倒数部分,如下:
:: @echo off 是用于在批处理文件开始时关闭命令的回显(echo),使得批处理文件的执行输出更加干净,只显示用 echo 命令特别指定的文本输出。(可自行删除) @echo off :: 使命令窗口以utf-8解析 echo的输出,防止中文乱码(可自行删改) chcp 65001 :: 允许在批处理脚本中灵活处理变量,在处理循环、条件语句等情境中非常有用,加上没坏处。且我们bat中有循环。 setlocal enabledelayedexpansion :: 获取当前批处理文件的目录路径,因为该bat在安装目录下,所以实际上获得了安装目录的绝对路径。 set "CURRENT_DIR=%~dp0" :: 去除路径末尾的反斜杠(如果存在) set "CURRENT_DIR=%CURRENT_DIR:~0,-1%" echo 当前目录: %CURRENT_DIR% :: 设置新的basedir和datadir,在这里我们就存一下我们要更新 my.ini的安装目录路径和数据目录路径。 set "NEW_BASEDIR=%CURRENT_DIR%" echo mysql安装目录: %NEW_BASEDIR% set "NEW_DATADIR=%CURRENT_DIR%\data" echo mysql数据目录: %NEW_DATADIR% :: my.ini路径,my.ini在安装目录下。 set "MY_INI_PATH=%CURRENT_DIR%\my.ini" echo 配置文件my.ini位置: %MY_INI_PATH% :: 开始更新my.ini中的basedir和datadir echo 开始更新my.ini的basedir和datadir... :: 首先备份原始的my.ini文件,保存为 my.ini.bak copy "%MY_INI_PATH%" "%MY_INI_PATH%.bak" :: 创建一个临时文件用于存储更新后的配置 set "TMP_FILE=%MY_INI_PATH%.tmp" :: 删除临时文件,如果它已经存在 if exist "%TMP_FILE%" del "%TMP_FILE%" :: 读取原始的my.ini并更新basedir和datadir。这里的循环就是更新了,更新的逻辑是如果看到配置文件中的一行以 basedir= 开头,我们就更新复制这个 basedir; datadir同理 for /f "tokens=*" %%A in ('type "%MY_INI_PATH%"') do ( set "LINE=%%A" if "!LINE:~0,8!"=="basedir=" set "LINE=basedir=%NEW_BASEDIR%" if "!LINE:~0,8!"=="datadir=" set "LINE=datadir=%NEW_DATADIR%" echo !LINE!>>"%TMP_FILE%" ) :: 用更新后的配置替换原始的my.ini文件 move /Y "%TMP_FILE%" "%MY_INI_PATH%" echo my.ini已更新。 pause :: 切换至Mysql的bin目录, 切进bin目录,因为我们要使 mysql的一系列exe工具。 set "MYSQL_BIN_DIR=%CURRENT_DIR%\bin" echo 切换至mysql的bin目录: %MYSQL_BIN_DIR% cd /d %MYSQL_BIN_DIR% :: 初始化mysql,这里的作用是创建 安装目录下的data文件夹(存在数据库和数据表的),还有就是初建一个用户 root,但没有密码(后续命令会设置) echo 开始初始化MySQL... "%cd%\mysqld.exe" --initialize-insecure --user=root --console echo ----- MySQL init succeed ----- pause :: 这里的安装指的不是从新安装一个Mysql服务,而是根据我们的 my.ini来初始化我们的mysql,比如在windows上建一个mysql服务。 echo 开始安装 MySQL service... mysqld install mysql --defaults-file="%MY_INI_PATH%" echo ----- MySQL service install succeed ----- pause :: 后续就是设置mysql的启动 echo 开启 MySQL service... net start mysql echo 设置 MySQL service to 开机自启动... sc config mysql start= auto echo 停止 MySQL service... net stop mysql echo 再次开启 MySQL service ... net start mysql echo -----安装完成----- pause :: 这里设置我们的密码,这个第一次执行bat时,因为我用了-p指令。但我们root没有密码,可以不用输入密码,直接跳过就行。 echo 设置 root password... "%cd%\mysqladmin" -u root -p password 88888888 echo ----- Password changed to 88888888 ----- pause echo 退回上层安装目录... cd .. :: 这里就导入 sql,如果没有sql,直接注释就行。如果有,这里更改为你的sql的名字和位置。 echo 创建数据库和对应的表 temperature_chain.sql... "%cd%\bin\mysql.exe" -uroot -p88888888 < "%cd%\temperature_chain.sql" echo ----- 数据库与表创建成功 ----- pause echo ----- 全部安装已完成 ----- pause endlocal
(5)运行bat文件:点击鼠标右键,以管理员身份运行,因为里面涉及到创建服务等权限。执行完成后,我的如下:
安装目录下新建uninstall.bat, 以管理员权限运行。这里我设置了一个保障,就是输入shanchu才可以实现停掉移除服务,然后删除data目录。
@echo off chcp 65001 setlocal enabledelayedexpansion :: 获取当前批处理文件的目录路径 set "CURRENT_DIR=%~dp0" echo mysql安装路径:%CURRENT_DIR% :: 去除路径末尾的反斜杠(如果存在) set "CURRENT_DIR=%CURRENT_DIR:~0,-1%" :: 设置MySQL的bin目录 set "MYSQL_BIN_DIR=%CURRENT_DIR%\bin" echo 请谨慎操作,此操作将停止MySQL服务,移除服务并删除所有数据。 echo 要继续,请输入密码(密码为"shanchu"): set /p PASSWORD=password: if NOT "%PASSWORD%"=="shanchu" ( echo 密码错误,操作已取消。 goto End ) :: 停止 MySQL service echo 停止 MySQL 服务... net stop mysql :: 移除 MySQL service echo 移除 MySQL 服务... "%MYSQL_BIN_DIR%\mysqld" --remove mysql :: 删除data目录 set "DATA_DIR=%CURRENT_DIR%\data" echo 删除数据目录: %DATA_DIR% rd /s /q "%DATA_DIR%" echo ----- MySQL服务已移除,数据目录已删除 ----- pause endlocal
注意:经我尝试后,是可以多次点击执行 mysql_setup.bat 的,不过因为第一次bat后,mysql创建了data文件,后续的执行只会在 “%cd%\mysqld.exe” --initialize-insecure --user=root --console 命令上报错,但是不会影响后续的执行,也不会影响Mysql的服务,所以不要担心。唯一一点是 “%cd%\mysqladmin” -u root -p password 88888888 这个是更新密码的指令,更新为 88888888。
点击uninstall.bat可以很好的移除mysql服务(但是会删除数据库的所有数据),可以无缝再点击mysql_setup.bat重新初始化部署。
点击 uninstall.bat,停止服务,删除data文件。然后打包成新的压缩包。就可以放到其他电脑上部署。
首先从网上或者官网下载你想要的对应版本的redis解压包,注意是免安装的,就解压即可的。例如,我使用的是 redis 7.0.2 版本的解压包 https://github.com/zkteco-home/redis-windows/tree/d8f83a29207cb2c1b5536c2b81c572b7097e2d9c
(1)我这边是windwos版本的redis,github上下载源码安装包。
(2)下载到自己指定的文件夹中,我这边是下到了 D:\TemperatureChainSetup 目录下。
(3)我们解压安装包。解压操作就解压到当前目录,我这边是 D:\TemperatureChainSetup\redis-windows-7.0.2,它的下面应该就是redis-server.exe文件等等了。如果多解压了一层文件夹,直接复制到上一层就行,Ctrl X或者Ctrl C+V。
(1)准备的内容
(2)这里redis用的配置文件是安装目录下的 redis-windows.conf。我没有修改,也没有设置密码等等。有需求可以自己修改。
(3)redis-setup.bat 配置文件,创建于根目录。管理员权限启动。
我的配置如下(可以通用,如有特需要求,自行修改),存在修改的地方:
@echo off chcp 65001 setlocal enabledelayedexpansion :: 获取当前批处理文件的目录路径 set "CURRENT_DIR=%~dp0" :: 去除路径末尾的反斜杠(如果存在) set "CURRENT_DIR=%CURRENT_DIR:~0,-1%" echo 当前redis安装目录: %CURRENT_DIR% echo 切换至redis 安装目录 cd /d %CURRENT_DIR% echo 注册redis服务 redis-server --service-install redis-windows.conf --service-name redis --loglevel verbose echo 开启 Redis service... net start redis echo 设置 redis服务 开机自启动... sc config redis start= auto echo 停止 redis service... net stop redis echo 再次开启 redis service ... net start redis echo -----Redis安装完成----- pause endlocal
(3) 移除服务和数据的bat
安装目录下新建uninstall-redis.bat, 以管理员权限运行。
@echo off chcp 65001 setlocal enabledelayedexpansion :: 停止Redis服务 echo 停止Redis服务... net stop redis :: 设置Redis服务为手动启动 echo 设置Redis服务为手动启动... sc config redis start= demand :: 移除Redis服务 echo 移除Redis服务... sc delete redis echo Redis服务已被移除。 pause endlocal
(4).重新变成压缩包
点击 uninstall-redis.bat,停止服务。然后打包成新的压缩包。就可以放到其他电脑上部署。
注意:比如reids(mysql一样), 部署脚本会成功部署为自启动的redis服务,而移除脚本就是对该服务进行移除。如果出现问题,请查看是否服务没有正确运行。查看服务的方法为:
- windows + R: 输入cmd, 打开命令行
- 输入 services.msc,打开服务列表
- 右键服务,点击属性,查看这三个地方是否无误:
- 执行文件的路径
- 启动类型
- 服务状态
因为如果用户的电脑已经有运行的mysql和redis,可能存在无法启动端口的问题。以3306端口为例
(1)首先查询端口:netstat -aon|findstr “3306” ###3306为想查看的端口号(出现的列表最后一列为该端口对应的PID)
(2)再查询这个端口是属于哪个程序的进程:tasklist|findstr “28316” ###28316为占用该端口所对应的应用程序的PID
(3)然后根据这个可以参考上面的去找服务名称,然后确定这个执行文件的位置。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。