Windows上使用bat批处理一键给用户安装mysql和redis服务

起因

因为开发了一个Vue+SpringBoot+Mysql+Redis的应用,需要交付给用户。用户的平台是Windows,且要求存在应用离线的要求,所以必须将所有环境部署到用户的电脑。起初想用docker进行迁移,但是后台有用JNA调用dll的解密库(必须windows环境),而docker容器基于linux内核(虽然有基于windows内核的docker-windows,但是不清楚配置难度,且仍然需要给用户下载和配置docker)。加之需要配置的环境就四个,于是我选择直接将对应版本的nodejs,jdk,mysql和redis各自实现bat批处理进行安装。

一、Mysql 安装的bat处理

1. 免安装mysql包

首先从网上或者官网下载你想要的对应版本的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。
在这里插入图片描述

2. bat命令一键mysql环境部署

(1)准备的内容

  • mysql的 my.ini 文件(这个解压包可能没有)
  • 你的sql文件(使用Navicat等工具从你想建的表或数据库中导出来就行)
  • 创建mysql-setup.bat文件:实现mysql初始化,部署,数据库创建,服务自启动
  • 创建uninstall.bat文件:实现一键注销服务,清楚数据库文件

(2) 首先我们在mysql安装目录(就是bin文件夹的父目录)创建一个 my.ini文件(就是和bin文件夹同层),可以先创建一个my.txt, 后续更改后缀即可。
在这里插入图片描述

我的配置如下(可以通用,如有特需要求,自行修改),主要解释两个参数:

  • basedir: 这个是要指定mysql的安装目录,即bin文件夹上面的那层目录就是安装目录。指定的原因是因为后续mysql要根据这个确定自己的位置。不要随意指定位置。但是因为用户可能把mysql解压到不同的位置,所以不能固定死basedir,这个我们在后续的bat中会根据当前目录进行更新。
  • datadir: 这是你数据库和数据库表实际在硬盘存储的位置,一般指定在安装目录下的data文件夹。后续同样在bat中根据实际安装位置进行更新。
[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,注释中详细解释命令。
注意你要修改的部分在最后的倒数部分,如下:

  • 你的初始root密码指定,我这里指定的是 88888888
  • 你的sql文件的名字和位置

在这里插入图片描述

:: @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文件:点击鼠标右键,以管理员身份运行,因为里面涉及到创建服务等权限。执行完成后,我的如下:
在这里插入图片描述

3. 移除服务和数据的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重新初始化部署。

4.重新变成压缩包

点击 uninstall.bat,停止服务,删除data文件。然后打包成新的压缩包。就可以放到其他电脑上部署。

二、Redis 安装的bat处理

1. 免安装Redis包

首先从网上或者官网下载你想要的对应版本的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。
在这里插入图片描述

2. bat命令一键mysql环境部署

(1)准备的内容

  • 创建redis-setup.bat文件:实现redisl服务自启动
  • 创建uninstall-redis.bat文件:实现redis服务的注销

(2)这里redis用的配置文件是安装目录下的 redis-windows.conf。我没有修改,也没有设置密码等等。有需求可以自己修改。

(3)redis-setup.bat 配置文件,创建于根目录。管理员权限启动。

我的配置如下(可以通用,如有特需要求,自行修改),存在修改的地方:

  • redis-server --service-install redis-windows.conf --service-name redis --loglevel verbose,这个命令里使用的是 redis-windows.conf, 请修改为你使用的配置文件名字。
@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,停止服务。然后打包成新的压缩包。就可以放到其他电脑上部署。

四、排查问题

1. 查看服务

注意:比如reids(mysql一样), 部署脚本会成功部署为自启动的redis服务,而移除脚本就是对该服务进行移除。如果出现问题,请查看是否服务没有正确运行。查看服务的方法为:

  1. windows + R: 输入cmd, 打开命令行
  2. 输入 services.msc,打开服务列表
    在这里插入图片描述
  3. 右键服务,点击属性,查看这三个地方是否无误:
  • 执行文件的路径
  • 启动类型
  • 服务状态
    在这里插入图片描述

2. 查看端口与进程

因为如果用户的电脑已经有运行的mysql和redis,可能存在无法启动端口的问题。以3306端口为例
(1)首先查询端口:netstat -aon|findstr “3306” ###3306为想查看的端口号(出现的列表最后一列为该端口对应的PID)
在这里插入图片描述

(2)再查询这个端口是属于哪个程序的进程:tasklist|findstr “28316” ###28316为占用该端口所对应的应用程序的PID
在这里插入图片描述
(3)然后根据这个可以参考上面的去找服务名称,然后确定这个执行文件的位置。

  • 29
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值