因系统现场部署人员反馈,系统各子系统数据库安装步骤繁琐,容易因安装问题引发系统使用异常。因此,想通过windows下批处理方式自动完成MySQL数据库初始化、用户权限密码设置,并在最终以静默方式导入SQL文件。
相关资源及版本说明
1.MySQL为官网下载 mysql-8.4.3-winx64.zip 自解压版本
2.SQL为导出 的若依项目ry数据库,包含表及数据
3.MySQL安装文件放置于D盘根目录
4.因为指令执行提示,异常将 MySQL 根目录下lib目录复制到了bin目录下
文件目录结构
MySQLbin目录结构
所用到的批处理文件如下:
@echo off
setlocal
rem 设置MySQL目录、端口和服务名称
set MYSQL_HOME=D:\mysql-8.4.3
set MYSQL_PORT=3307
set MYSQL_SERVICE_NAME=MySQL3307
set MYSQL_SERVICE_DESC=MySQL服务 端口%MYSQL_PORT%.
set SQL_FILE_PATH=%MYSQL_HOME%\scripts\init.sql
rem 生成my.ini文件
set MY_INI_FILE=%MYSQL_HOME%\my.ini
if not exist "%MY_INI_FILE%" (
echo 正在创建my.ini文件...
(
echo [mysqld]
echo port=%MYSQL_PORT%
echo basedir=%MYSQL_HOME%\
echo datadir=%MYSQL_HOME%\data
echo character-set-server=utf8mb4
echo default-storage-engine=INNODB
) > "%MY_INI_FILE%"
echo my.ini文件创建完成。
) else (
echo my.ini文件已存在,跳过创建。
)
rem 检查服务是否已经存在
echo 检查服务 %MYSQL_SERVICE_NAME% 是否存在...
sc query %MYSQL_SERVICE_NAME%
if %errorlevel% equ 0 (
echo 服务 %MYSQL_SERVICE_NAME% 已存在,跳过初始化和后续操作。
goto start
) else (
echo 服务 %MYSQL_SERVICE_NAME% 不存在,继续初始化和设置。
)
rem 初始化MySQL数据库
echo 正在初始化数据库...
%MYSQL_HOME%\bin\mysqld --initialize-insecure --basedir=%MYSQL_HOME% --datadir=%MYSQL_HOME%\data
if %errorlevel% neq 0 (
echo 数据库初始化失败,错误代码:%errorlevel%
goto end
)
rem 注册MySQL服务
echo 注册MySQL服务...
%MYSQL_HOME%\bin\mysqld --install %MYSQL_SERVICE_NAME%
if %errorlevel% neq 0 (
echo 服务注册失败,错误代码:%errorlevel%
goto end
)
:start
rem 启动MySQL服务
echo 正在启动MySQL服务...
net start %MYSQL_SERVICE_NAME%
if %errorlevel% neq 0 (
echo 服务启动失败,错误代码:%errorlevel%
goto end
)
rem 等待MySQL服务启动
timeout /t 5
rem 检查并更新用户
echo 检查用户是否已存在...
%MYSQL_HOME%\bin\mysql -u root -P %MYSQL_PORT% --skip-password -e "SELECT user, host FROM mysql.user WHERE user='root' AND host='localhost';"
if %errorlevel% equ 0 (
echo 用户 'root'@'localhost' 已存在,更新密码...
%MYSQL_HOME%\bin\mysql -u root -P %MYSQL_PORT% --skip-password -e "ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';"
) else (
echo 创建数据库用户和权限...
%MYSQL_HOME%\bin\mysql -u root -P %MYSQL_PORT% --skip-password -e "CREATE USER 'root'@'localhost' IDENTIFIED BY '123456';"
%MYSQL_HOME%\bin\mysql -u root -P %MYSQL_PORT% --skip-password -e "GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;"
%MYSQL_HOME%\bin\mysql -u root -P %MYSQL_PORT% --skip-password -e "FLUSH PRIVILEGES;"
)
rem 执行SQL脚本
if exist "%SQL_FILE_PATH%" (
echo 执行SQL脚本...
%MYSQL_HOME%\bin\mysql -u root -p123456 -P %MYSQL_PORT% < "%SQL_FILE_PATH%"
echo SQL脚本执行完成
) else (
echo SQL文件 %SQL_FILE_PATH% 不存在,跳过执行。
)
echo MySQL安装及初始化完成!
:end
endlocal
pause
批处理运行须以管理员权限运行,否则部分指令因权限问题会执行失败
安装执行过程
安装后如果想卸载可以使用相关命令进行卸载
D:\mysql-8.4.3\bin>mysqld -remove mysql3307
Service successfully removed.