为什么要使用一键脚本来注册、启动和停止MySQL?

本篇文章将详细介绍如何使用一键脚本来注册、启动和停止MySQL服务,解决因权限问题和复杂配置导致的困扰。本文将提供具体的操作步骤和脚本解读,帮助你轻松管理MySQL服务。


管理MySQL服务可能是一个繁琐的过程,特别是对于那些刚刚接触MySQL的人来说。通常情况下,你可能会遇到各种权限问题、复杂的配置文件设置以及无法启动或停止服务的情况。本文将通过一键脚本的方式,帮助你简化这一过程。

为什么使用一键脚本?

使用一键脚本有以下几个好处:

  1. 简化操作:一键脚本可以自动化繁琐的操作步骤,减少人为错误。
  2. 提高效率:快速注册、启动和停止MySQL服务,提高工作效率。
  3. 方便迁移:一键脚本可以轻松实现MySQL服务的迁移和重新注册。

脚本简介

以下脚本需要确保MySQL的解压路径为纯英文,并且使用管理员权限运行:

脚本 说明 关键词
_svcname MySQL服务名称,被所有脚本读取 服务名称
01_register.bat MySQL服务注册脚本,用于初始化或迁移位置 初始化,迁移
my.tpl.ini MySQL配置文件模板,配合服务注册脚本使用 配置模板
02_start.bat MySQL服务启动脚本 启动
03_stop.bat MySQL服务停止脚本 停止
04_unregister.bat MySQL服务反注册脚本,用于迁移位置 迁移

使用方式

安装

  1. 从MySQL官网下载zip压缩包,解压到纯英文路径。
  2. win目录下所有文件复制到MySQL的解压后的根目录。
  3. 执行01_register.bat脚本初始化,过程中有两次交互:
    • 选择数据库编码:UTF-8(默认),GBK(简中),BIG5(繁中),latin1(英文)
    • 设置root用户密码
  4. 完成后会生成:
    • my.ini配置文件
    • data数据存储目录

启停

  • 启动脚本:02_start.bat
  • 停止脚本:03_stop.bat

迁移

如果要迁移MySQL到别的位置,依次执行:

  1. 停止并反注册服务:04_unregister.bat
  2. 移动整个MySQL到新位置
  3. 执行01_register.bat脚本重新注册:
    • 此时因为检测到data目录已存在,并不会重新初始化
    • 但是会自动备份my.ini配置文件,然后根据新位置重新生成一个

卸载

如果要完全卸载MySQL服务,执行04_unregister.bat即可。此脚本只是停止服务和反注册,不会删除data目录,数据不会丢失。

注册脚本解读

核心注册脚本01_register.bat的逻辑如下:

  1. 检查MySQL服务是否已注册,若已注册则不执行任何动作。
  2. 检查data目录是否为空,若不为空则仅重新注册;若为空则进入初始化流程。
  3. 用户交互:要求选择【数据库编码】。
  4. 自动备份旧的my.ini配置文件
  5. 生成新的my.ini配置文件:根据【脚本所在位置】和【数据库编码】,利用my.tpl.ini配置模板生成新的my.ini配置。
  6. 初始化data目录:执行mysqld --initialize-insecure命令以无密码方式初始化data目录。
  7. 注册MySQL服务:执行mysqld --install命令注册MySQL服务。
  8. 启动MySQL服务:执行net start mysql命令启动MySQL服务。
  9. 设置root用户密码:用户交互,要求输入root用户【密码】,并执行mysqladmin -u root password ${密码}设置root密码。
@echo off
setlocal

REM 检查服务是否已注册
sc query "%_svcname%" >nul 2>&1
if not errorlevel 1060 (
    echo MySQL 服务已注册,跳过注册步骤
    exit /b
)

REM 检查 data 目录
if exist "data\*" (
    echo data 目录不为空,仅重新注册服务
    goto :REGISTER
)

REM 用户交互选择数据库编码
set /p CHARSET=请选择数据库编码(UTF-8、GBK、BIG5、latin1): 

REM 自动备份旧的 my.ini 配置文件
if exist "my.ini" (
    move my.ini my.ini.bak
)

REM 生成新的 my.ini 配置文件
copy my.tpl.ini my.ini
echo basedir=%cd%>>my.ini
echo datadir=%cd%\data>>my.ini
echo character-set-server=%CHARSET%>>my.ini

REM 初始化 data 目录
mysqld --initialize-insecure

:REGISTER
REM 注册 MySQL 服务
mysqld --install

REM 启动 MySQL 服务
net start mysql

REM 设置 root 密码
set /p ROOT_PASSWORD=请输入 root 用户密码: 
mysqladmin -u root password %ROOT_PASSWORD%

echo MySQL 服务已成功注册并启动

其他过程记录

初始化没有打印root密码

假如不使用无密码方式mysqld --initialize-insecure初始化数据库,而是使用mysqld --initialize初始化,会为root用户生成一个随机密码。但如果在初始化时没有使用--console参数输出到控制台,可以在data/{主机名}.err日志文件中查找关键字A temporary password得到初始密码。

初始化后本地连接无法通过权限检查

如果在初始化后无法登录,可能是因为配置文件中的以下选项:

skip-host-cache     ; 禁用主机 DNS 缓存,解决某些 DNS 解析问题
skip-name-resolve   ; 禁用 DNS 解析,只使用 IP 地址进行权限检查

删除这两个配置项可以解决问题。

一键脚本无法获取服务名

某些Windows系统无法通过set /p SVC_NAME=<_svcname命令获取服务名,可以批量把01~04四个bat脚本中的这条命令替换成set "SVC_NAME=MysqlSvc_By_EXP"

总结

通过使用一键脚本,你可以轻松注册、启动和停止MySQL服务,解决因权限问题和复杂配置导致的困扰。希望本文能帮助你更好地管理MySQL服务。

声明:本站所有文章,如无特殊说明或标注,均为本站(王大神)原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

给TA打赏
共{{data.count}}人
人已打赏
指数词

为什么RO客户端启动时会遇到d3d异常问题?如何解决?

2024-6-26 16:34:31

指数词

为什么选择Mac版ChatGPT?详解功能与使用技巧

2024-6-27 14:36:47

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索