数据库开发标题-mysql基础
2022/9/4大约 6 分钟
Windows 安装 MySQL
提示
安装 MySQL 过程中可能提示缺少.dll 依赖,他是 Microsoft Visual C++ 中的一部分。可在Microsoft 官方下载页面下载安装
配置环境变量
- 新增系统变量名
MYSQL_HOME,变量值C:\Program Files\MySQL\MySQL Server 8.2; - 在系统变量中找到 Path 变量,在其中新建
%MYSQL_HOME%\bin;
提示
手动配置环境变量?不可能的,能不动手的千万不要动手,下面贴心的提供一套 .bat 脚本,写入【用户】变量、无需管理员权限,且幂等可反复执行:
一键设置环境变量@echo off setlocal enabledelayedexpansion REM 本文件必须以 ANSI(GBK)编码保存(记事本「另存为」时编码选 ANSI),否则中文会乱码 REM 这是个设置用户环境变量的脚本,特点:相同就跳过、不同才更新、没有才新增,反复运行都安全 !!!! REM 适用于 Windows 中任何添加用户环境变量的操作,唯一需要改的就是下面的配置区 REM ===================== 配置区 ===================== REM 安装目录,换版本/换目录只改这一行,下面的配置全部从它推导 set "INSTALL_PATH=C:\Program Files\MySQL\MySQL Server 8.2" REM 格式:set "MAP[变量名]=变量值" —— 像 map 一样,键在[]里,值在=右边 REM 新增变量:照着下面再加一行即可,无需改动其它任何地方 set "MAP[MYSQL_HOME]=%INSTALL_PATH%" REM 追加到 Path 末尾的条目,分号分隔(%INSTALL_PATH% 由上面的 set 展开,写入的仍是全路径) set "PATH_ENTRY=%INSTALL_PATH%\bin" REM =============================================================== echo 正在写入【用户】环境变量(不影响系统变量和其它已有变量)... echo. REM 遍历所有 MAP[...] 变量:%%K 取到 "MAP[键]",%%L 取到值 for /f "tokens=1,* delims==" %%K in ('set MAP[ 2^>nul') do ( set "KEY=%%K" set "VALUE=%%L" REM 从 "MAP[键]" 中剥掉前缀 MAP[ 和后缀 ] ,得到纯键名 set "KEY=!KEY:MAP[=!" set "KEY=!KEY:]=!" call :SetUserEnv "!KEY!" "!VALUE!" ) call :AppendUserPath "%PATH_ENTRY%" REM 全部写入后广播一次变更通知,让新开终端立即可用(无需注销) call :NotifyEnvChange echo. echo 完成!请关闭并重新打开终端后才会生效。 pause exit /b REM ---------- 子程序:设置单个用户环境变量(幂等,不会重复添加)---------- :SetUserEnv set "NAME=%~1" set "VALUE=%~2" set "CURRENT=" REM 读取注册表里该变量当前的值,不存在则 CURRENT 为空 for /f "tokens=2,* delims= " %%a in ('reg query "HKCU\Environment" /v "%NAME%" 2^>nul ^| findstr /i "%NAME%"') do set "CURRENT=%%b" if "!CURRENT!"=="%VALUE%" ( echo [跳过] %NAME% 已存在且值相同。 ) else ( REM setx 不带 /M = 只写入【用户】变量,且只覆盖这一个变量 setx "%NAME%" "%VALUE%" >nul if "!CURRENT!"=="" ( echo [新增] %NAME% = %VALUE% ) else ( echo [更新] %NAME% : !CURRENT! -^> %VALUE% ) ) exit /b REM ---------- 子程序:向用户 Path 幂等追加条目 ---------- :AppendUserPath set "ENTRY=%~1" set "CURRENT=" for /f "tokens=2,* delims= " %%a in ('reg query "HKCU\Environment" /v Path 2^>nul ^| findstr /i /c:"Path"') do set "CURRENT=%%b" echo !CURRENT! | findstr /i /c:"%ENTRY%" >nul if not errorlevel 1 ( echo [跳过] Path 已包含 %ENTRY% exit /b ) REM 末尾若已带分号,先去掉,避免拼接出 ;; if "!CURRENT:~-1!"==";" set "CURRENT=!CURRENT:~0,-1!" REM 用 reg add 保持 Path 的 REG_EXPAND_SZ 类型(setx 会改成 REG_SZ,导致 %变量% 不展开) if "!CURRENT!"=="" ( reg add "HKCU\Environment" /v Path /t REG_EXPAND_SZ /d "%ENTRY%" /f >nul ) else ( reg add "HKCU\Environment" /v Path /t REG_EXPAND_SZ /d "!CURRENT!;%ENTRY%" /f >nul ) echo [追加] Path += %ENTRY% exit /b REM ---------- 子程序:广播环境变量变更通知 ---------- REM setx 写入时自带广播,但 reg add / reg delete 不会;资源管理器收到广播才会重读注册表, REM 之后由它启动的新终端才能拿到最新变量,否则要注销/重启才生效 :NotifyEnvChange powershell -NoProfile -Command "$s='[DllImport(\"user32.dll\",CharSet=CharSet.Auto)]public static extern IntPtr SendMessageTimeout(IntPtr hWnd,uint Msg,UIntPtr wParam,string lParam,uint fuFlags,uint uTimeout,out UIntPtr lpdwResult);';$t=Add-Type -MemberDefinition $s -Name NM -Namespace Win32 -PassThru;$r=[UIntPtr]::Zero;[void]($t::SendMessageTimeout([IntPtr]0xFFFF,0x1A,[UIntPtr]::Zero,'Environment',2,5000,[ref]$r))" exit /b一键清除环境变量@echo off setlocal enabledelayedexpansion REM 本文件必须以 ANSI(GBK)编码保存(记事本「另存为」时编码选 ANSI),否则中文会乱码 REM ===================== 配置区(与设置脚本保持一致)===================== REM 安装目录,与设置脚本保持同一份 set "INSTALL_PATH=C:\Program Files\MySQL\MySQL Server 8.2" REM 要移除的变量名,空格分隔 set "KEYS=MYSQL_HOME" REM 要从 Path 中移除的条目 set "PATH_ENTRY=%INSTALL_PATH%\bin" REM =============================================================== echo 正在从【用户】环境变量中移除... echo. for %%K in (%KEYS%) do call :DelUserEnv "%%K" call :RemoveUserPath "%PATH_ENTRY%" REM 全部移除后广播一次变更通知,让新开终端立即感知 call :NotifyEnvChange echo. echo 完成!请关闭并重新打开终端后才会生效。 pause exit /b REM ---------- 子程序:删除单个用户环境变量(不存在则跳过)---------- :DelUserEnv set "NAME=%~1" reg query "HKCU\Environment" /v "%NAME%" >nul 2>nul if errorlevel 1 ( echo [跳过] %NAME% 本来就不存在。 ) else ( reg delete "HKCU\Environment" /v "%NAME%" /f >nul echo [删除] %NAME% 已移除。 ) exit /b REM ---------- 子程序:从用户 Path 中移除条目(没有则跳过)---------- :RemoveUserPath set "ENTRY=%~1" set "CURRENT=" for /f "tokens=2,* delims= " %%a in ('reg query "HKCU\Environment" /v Path 2^>nul ^| findstr /i /c:"Path"') do set "CURRENT=%%b" if "!CURRENT!"=="" ( echo [跳过] Path 本来就不存在。 exit /b ) echo !CURRENT! | findstr /i /c:"%ENTRY%" >nul if errorlevel 1 ( echo [跳过] Path 中没有 %ENTRY% ) else ( REM 先删中间出现(;条目),再删开头出现(条目;)的情况 set "NEW=!CURRENT:;%ENTRY%=!" set "NEW=!NEW:%ENTRY%;=!" set "NEW=!NEW:%ENTRY%=!" reg add "HKCU\Environment" /v Path /t REG_EXPAND_SZ /d "!NEW!" /f >nul echo [移除] Path -= %ENTRY% ) exit /b REM ---------- 子程序:广播环境变量变更通知 ---------- REM setx 写入时自带广播,但 reg add / reg delete 不会;资源管理器收到广播才会重读注册表, REM 之后由它启动的新终端才能拿到最新变量,否则要注销/重启才生效 :NotifyEnvChange powershell -NoProfile -Command "$s='[DllImport(\"user32.dll\",CharSet=CharSet.Auto)]public static extern IntPtr SendMessageTimeout(IntPtr hWnd,uint Msg,UIntPtr wParam,string lParam,uint fuFlags,uint uTimeout,out UIntPtr lpdwResult);';$t=Add-Type -MemberDefinition $s -Name NM -Namespace Win32 -PassThru;$r=[UIntPtr]::Zero;[void]($t::SendMessageTimeout([IntPtr]0xFFFF,0x1A,[UIntPtr]::Zero,'Environment',2,5000,[ref]$r))" exit /b- 新增系统变量名
允许远程登录
更新用户的访问主机
mysql 5.7 以下
指定用户、ip 远程访问# '%' 表示允许从任何主机远程登录,特定 IP 地址远程登录,可以将 '%' 替换为相应的 IP 地址 # 因为 root 拥有数据库中的最高权限,建议新建一个普通用户进行远程连接; CREATE USER '远程用户'@'%' IDENTIFIED BY '你的密码'; GRANT ALL PRIVILEGES ON *.* TO '远程用户'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES;root 远程访问GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '你的密码' WITH GRANT OPTION; FLUSH PRIVILEGES;mysql 8.0+ 允许 root 远程访问
ALTER USER 'root'@'localhost' IDENTIFIED WITH 'mysql_native_password' BY 'your_password'; CREATE USER 'root'@'%' IDENTIFIED WITH 'mysql_native_password' BY 'your_password'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES;修改 MySQL 配置文件
打开 MySQL 配置文件,通常是 my.cnf 或 my.ini。
找到 bind-address 选项并将其值更改为 MySQL 服务器的 IP 地址或 0.0.0.0,以便允许来自任何 IP 地址的连接my.cnf 或 my.ini 可能在:
C:\ProgramData\MySQL\MySQL Server 8.0\my.ini,mysql 8.2+ 貌似已经没有这个文件了。重启 MySQL 服务
# 对于 systemd 系统 sudo systemctl restart mysql # 对于其他系统 sudo service mysql restart

