mysql 绿色运行

下载 mysql 压缩包,解压缩,然后在根目录下创建下面 2 个文件,然后运行 startConsole.bat 即可

  • 默认无密码,需要密码的话修改初始化参数为 --initialize
  • 修改 my.ini 中的路径为绝对路径

startConsole.bat

可以修改启动参数将路径值,传入,可以见 ps1 脚本 ,有空再改


@echo off

REM 设置 局部环境变量 ,set 的变量仅脚本内有效,脚本退出恢复原值
setlocal

REM %0 当前脚本路径, %~dp0 从当前路径中取 driver+path, /d 为允许切至不同盘符
cd /d "%~dp0"

REM 检查配置文件是否存在, 
REM 如果文件不存在,exit /b 1 不关闭窗口,并设置错误代码为 1
if not exist "my.ini" (
    echo ERROR: my.ini not found!
    pause
    exit /b 1
)

REM 如果 data 目录不存在,则初始化
REM 如果再次初始化, 则删除当前目录下的 data 子目录
REM --initialize-insecure 指定本地开发模式,root 无密码 ,  也可使用 --initialize 生成随机密码(密码在日志文件中查看)
REM --user=mysql 运行程序的账号,win 下忽略
REM if errorlevel 1 当 errorlevel >= 1 时,退出
if not exist "data" (
    echo [INFO] Initializing MySQL data directory...
    bin\mysqld --defaults-file=my.ini --initialize-insecure --user=mysql
    if errorlevel 1 (
        echo [ERROR] Initialization failed!
        pause
        exit /b 1
    )
    echo [INFO] Initialization completed.
)

REM 启动 MySQL(必须指定 --defaults-file)
REM --console 日志输出至当前控制台,而不是后台
echo [INFO] Starting MySQL server on port 3307...
bin\mysqld --defaults-file=my.ini --console

pause

startConsole.ps1

# 启动开发使用的 mysql 服务
# 需要在当前目录下有 my.ini 配置文件
# 不需要修改 my.ini 中的 basedir 和 datadir 路径,脚本会自动覆盖
# 调用 pwsh start.ps1
# mysqld 启用时  --defaults-file="$config" 参数要放在第一位,否则会报错

$root = $PSScriptRoot
write-Host "MySQL 服务根目录: $root" -ForegroundColor Cyan

$config = Join-Path $root -ChildPath 'my.ini'

if(-not (Test-Path $config)){

    Write-Host "配置文件 my.ini 不存在,请检查 $config 路径是否正确。" -ForegroundColor Red
    exit 1
}

$basedir = $root
$datadir = Join-Path $root -ChildPath 'data'
$logpath = Join-Path $datadir -ChildPath 'mysqld.log'

# 修改 my.ini 中的 basedir 和 datadir 路径
# (Get-Content $config) | ForEach-Object {
#     $_ -replace '^(basedir\s*=\s*).+$', "`$1$basedir" `
#       -replace '^(datadir\s*=\s*).+$', "`$1$datadir"
# } | Set-Content $config

$mysqldApp = Join-Path $basedir -ChildPath 'bin\mysqld'
if(-not (Test-Path $mysqldApp)){
    Write-Host "mysqld 不存在,请检查 $mysqldApp 路径是否正确。" -ForegroundColor Red
    exit 1
}

# 判断 data 目录是否存在, 如果不存在则初始化 mysql
if(-not (Test-Path $datadir)){
    Write-Host "数据目录不存在,正在初始化 MySQL 数据目录..." -ForegroundColor Yellow
    & $mysqldApp --defaults-file="$config" --initialize-insecure --basedir="$basedir" --datadir="$datadir" --log-error="$logpath"
    if($LASTEXITCODE -ne 0){
        Write-Host "MySQL 数据目录初始化失败,请检查错误信息。" -ForegroundColor Red
        exit 1
    }
    Write-Host "MySQL 数据目录初始化完成。" -ForegroundColor Green
}

# 启动 mysql 服务
Write-Host "启动 MySQL 服务..." -ForegroundColor Yellow
& $mysqldApp --defaults-file="$config" --basedir="$basedir" --datadir="$datadir" --log-error="$logpath" --console
if($LASTEXITCODE -ne 0){
    Write-Host "MySQL 服务启动失败,请检查错误信息。" -ForegroundColor Red
    exit 1
}

my.ini

# 连接字符串, allowPublicKeyRetrieval 为未开启 SSL 时接受服务端的公钥,开发时使用
# jdbc:mysql://localhost:3307/?user=root&password=&useSSL=false&allowPublicKeyRetrieval=true

[mysqld]
# 核心:指定当前实例的完整路径(使用正斜杠)
basedir = D:/Apps/mysql/
datadir = D:/Apps/mysql/data

# 日志(必须指定,避免默认路径权限问题)
log-error = D:/Apps/mysql/data/mysqld.log

# 端口
port = 3307

# 字符集(统一用 utf8mb4)
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

# 存储引擎
default-storage-engine = INNODB

# 最大连接数
max_connections = 1000

# 屏蔽前最大允许出错次数, FLUSH HOSTS; 清空
max_connect_errors = 10

# 因为仅进行开发,所以这里禁用日志功能
skip-log-bin

ubuntu

ubuntu 下与 windows 一样处理,但是可能会提示错误缺少 libaio.so.1

因为高版本的 libaio 库已经更名

# 是否安装 libaio.so.* 
ldconfig -p | grep libaio

# 进行安装,
sudo apt-get install libaio*

# 找到已经安装的版本
sudo updatedb
locate libaio.so

# 列出已经安装的库,发现最后指向新版本 `libaio.so.1t64.0.2 `
ls -l  /usr/lib/x86_64-linux-gnu/libaio*

# 为 `libaio.so.1` 创建一个软链接
sudo ln -s /usr/lib/x86_64-linux-gnu/libaio.so.1t64.0.2 /usr/lib/x86_64-linux-gnu/libaio.so.1

# 再次执行 mysqld 
上一篇
下一篇