MySQL - Windows silent install/uninstall

本文提供了一个批处理脚本示例,用于MySQL 5.1.58的静默安装与卸载过程,并确保返回正确的代码。脚本详细记录了安装配置步骤,包括创建用户、授予权限等。

source:http://blog.qxconsultant.com/2011/07/mysql-windows-silent-installuninstall.html


This batch script example is for a silent install/uninstall mysql-essential-5.1.58-winx64.msi with proper return code:



#############################
# MySQL silent installation
#############################

@echo off


set TEMP_DIR=C:\TMP
set MYSQL_MSI=mysql-essential-5.1.58-winx64.msi


REM Timestamp Generator
set cur_yyyy=%date:~10,4%
set cur_mm=%date:~4,2%
set cur_dd=%date:~7,2%
set cur_hh=%time:~0,2%
if %cur_hh% lss 10 (set cur_hh=0%time:~1,1%)
set cur_nn=%time:~3,2%
set cur_ss=%time:~6,2%
set TIMESTAMP=%cur_yyyy%-%cur_mm%-%cur_dd%_%cur_hh%_%cur_nn%_%cur_ss%


set INSTALLDIR=C:\Program Files\MySQL\MySQL Server 5.1
set MYSQL_DATA=C:\Program Files\MySQL\
set MYSQL_INSTALL_LOG=MySQL_5_1_InstallLog.txt


set MYSQL_CONFIG_EXE=MySQLInstanceConfig.exe
set MYSQL_SERVICE_NAME=MySQL
set MYSQL_PORT=3306
set TEMPLATE_INI=my-template.ini
set MYSQL_INI=mysql.ini
set MYSQL_CONFIG_LOG=MySQL_5_1_ConfigLog.txt


REM make sure a clean install
IF EXIST "%INSTALLDIR%\data" (
   MOVE /Y "%INSTALLDIR%\data" "%INSTALLDIR%\data_%TIMESTAMP%"
)


REM install MySQL
msiexec -i %TEMP_DIR%\%MYSQL_MSI% /quiet /l*v "%TEMP_DIR%\%MYSQL_INSTALL_LOG%" INSTALLDIR="%INSTALLDIR%" MYSQL_DATA="%MYSQL_DATA%"
set RETURN_CODE=%ERRORLEVEL%
IF %RETURN_CODE% EQU 0 GOTO CONFIG_MYSQL
echo %RETURN_CODE%: Install MySQL failed
GOTO END


REM config MySQL instance
:CONFIG_MYSQL
"%INSTALLDIR%\bin\%MYSQL_CONFIG_EXE%" -i -q "-l%TEMP_DIR%\%MYSQL_CONFIG_LOG%" "-t%INSTALLDIR%\%TEMPLATE_INI%" "-c%INSTALLDIR%\%MYSQL_INI%" "AddBinToPath=yes" "-n%PRODUCTNAME%" "Port=%MYSQL_PORT%" "ServiceName=%MYSQL_SERVICE_NAME%"
set RETURN_CODE=%ERRORLEVEL%
IF %RETURN_CODE% EQU 0 GOTO CREATE_USER
echo %RETURN_CODE%: Configure MySQL failed
GOTO END


REM create MySQL user
:CREATE_USER
"%INSTALLDIR%\bin\mysql" -u root -e "CREATE USER 'mysql_user'@'localhost' IDENTIFIED BY 'mysql_pw';"
set RETURN_CODE=%ERRORLEVEL%
IF %RETURN_CODE% EQU 0 GOTO GRANT_USER
echo %RETURN_CODE%: Create MySQL user failed
GOTO END


REM grant MySQL user privileges
:GRANT_USER
"%INSTALLDIR%\bin\mysql" -u root -e "GRANT ALL PRIVILEGES ON *.* TO 'mysql_user'@'localhost' IDENTIFIED BY 'mysql_pw';"
set RETURN_CODE=%ERRORLEVEL%
IF %RETURN_CODE% EQU 0 GOTO FLUSH_PRIVILEGES
echo %RETURN_CODE%: Grant MySQL user failed
GOTO END


REM flush privileges
:FLUSH_PRIVILEGES
"%INSTALLDIR%\bin\mysql" -u root -e "FLUSH PRIVILEGES;"
set RETURN_CODE=%ERRORLEVEL%
IF %RETURN_CODE% EQU 0 GOTO VERIFY_USER_ACCESS
echo %RETURN_CODE%: Flush privileges failed
GOTO END


REM verify MS access rights
:VERIFY_USER_ACCESS
"%INSTALLDIR%\bin\mysql" -D mysql -u mysql_user -h localhost -pmysql_pw -e "SELECT create_priv FROM user WHERE user='mysql_user' AND host='localhost'"
set RETURN_CODE=%ERRORLEVEL%
IF %RETURN_CODE% EQU 0 echo %RETURN_CODE%
IF %RETURN_CODE% NEQ 0 echo %RETURN_CODE%: Verfiy MySQL user failed
GOTO END


:END


#############################

# MySQL silent uninstallation
#############################
@echo off

msiexec.exe /I{7346AA6F-CC49-406D-AA97-93FBE3C25E79} /qn
echo %ERRORLEVEL%
#These are properties serialized from an IA installer for use with an IA uninstaller. #Fri Jul 25 16:39:02 CST 2025 CHOSEN_INSTALL_FEATURE_2=INTERFACE CHOSEN_INSTALL_SET=Full CHOSEN_INSTALL_FEATURE_1=SERVER IA_UPGRADE_BASE_VERSION= DB_USER=system IA_RESPONSEFILE_PATH= CHOSEN_INSTALL_BUNDLE_LIST=SERVER,INTERFACE,DEPLOY,KSTUDIO,KDTS ENCODING="GBK" HAS_PERMISSION=true CHOSEN_INSTALL_BUNDLE_5=KDTS CHOSEN_INSTALL_BUNDLE_4=KSTUDIO CHOSEN_INSTALL_BUNDLE_3=DEPLOY CHOSEN_INSTALL_BUNDLE_2=INTERFACE CHOSEN_INSTALL_BUNDLE_1=SERVER DEPENDENCY_STATUS=success -fileOverwrite_E\\\:\\\\KingBase\\\\KESRealPro\\\\V009R001C002B0014\\\\install\\\\LICENSE_EN=\u662F DEPENDENCY_REPORT= IS_EMPTY=true EMPTY_STRING= EXTRACTOR_DIR=F\:\\ AM_scram-sha-256=1 CACLS_EXECUTE_STDERR= MAC_CHEWABLE= WIN_START_MENU=C\:\\Users\\Administrator\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu CACLS_EXECUTE_EXITCODE=0 WIN_WINDOWS=C\:\\Windows MACX_USER_APPLICATIONS= SKIP_UNINSTALL=false CASE-SENSITIVE=0 IA_UPGRADE_BASE_LOCATION= -fileOverwrite_E\\\:\\\\KingBase\\\\KESRealPro\\\\V009R001C002B0014\\\\Uninstall\\\\Uninstaller.lax=\u662F INSTALLER_JDK_HOME= INITDB_STDOUT=\nC\:\\Users\\Administrator\\AppData\\Local\\Temp\\I1753431910\\Windows>set dir\=E\:\\KingBase\\KESRealPro\\V009R001C002B0014 \n\nC\:\\Users\\Administrator\\AppData\\Local\\Temp\\I1753431910\\Windows>set user\=system \n\nC\:\\Users\\Administrator\\AppData\\Local\\Temp\\I1753431910\\Windows>set pass\=KingBaseSuncere2025 \n\nC\:\\Users\\Administrator\\AppData\\Local\\Temp\\I1753431910\\Windows>set data\=E\:\\KingBase\\data \n\nC\:\\Users\\Administrator\\AppData\\Local\\Temp\\I1753431910\\Windows>set encoding\="GBK" \n\nC\:\\Users\\Administrator\\AppData\\Local\\Temp\\I1753431910\\Windows>set port\=54321 \n\nC\:\\Users\\Administrator\\AppData\\Local\\Temp\\I1753431910\\Windows>set mode\="oracle" \n\nC\:\\Users\\Administrator\\AppData\\Local\\Temp\\I1753431910\\Windows>set block_size\="8" \n\nC\:\\Users\\Administrator\\AppData\\Local\\Temp\\I1753431910\\Windows>set case-insensitive\="yes" \n\nC\:\\Users\\Administrator\\AppData\\Local\\Temp\\I1753431910\\Windows>set authenticate\="scram-sha-256" \n\nC\:\\Users\\Administrator\\AppData\\Local\\Temp\\I1753431910\\Windows>set custom\= \n\nC\:\\Users\\Administrator\\AppData\\Local\\Temp\\I1753431910\\Windows>call "E\:\\KingBase\\KESRealPro\\V009R001C002B0014"\\install\\script\\initdb.bat system KingBaseSuncere2025 "E\:\\KingBase\\KESRealPro\\V009R001C002B0014" "E\:\\KingBase\\data" 54321 "GBK" "8" "oracle" "yes" "scram-sha-256" "" 1>>"E\:\\KingBase\\KESRealPro\\V009R001C002B0014"\\install\\Logs\\init.log 2>&1 \n AM_sm4=0 AM_sm3=0 ENCODING_EXECUTE_STDERR= SYSTEM_DRIVE_ROOT=C\:\\ PROGRAMS_DIR_32=C\:\\Program Files (x86) USER_INPUT_BLOCK16_RESULT=0 IS_EMPTY_VARIABLE_NAME=IS_EMPTY IS_CONTAIN_BLANK=CONTAIN_BLANK SYSTEM_32=C\:\\Windows\\SysWOW64 VARIABLE_NAME=AuthenticateMethod -fileOverwrite_E\\\:\\\\KingBase\\\\KESRealPro\\\\V009R001C002B0014\\\\install\\\\script\\\\vcredist_x64.exe=\u662F CHOSEN_INSTALL_FEATURE_NUM=5 CASE-INSENSITIVE=1 INSTALL_SUCCESS=SUCCESS CONTAIN_BLANK=false INSTALL_DRIVE_ROOT=E\:\\ MVLICENSE_STDOUT=\u5220\u9664\u6587\u4EF6 - E\:\\KingBase\\KESRealPro\\V009R001C002B0014\\Server\\bin\\license.dat\n1\n NULL= CASEINSENSITIVE_EXECUTE_EXITCODE=0 DEPENDENCY_FAILURES= UNIX_USR_LOCAL_BIN= CREAT_FOLDER_STDERR= CASEINSENSITIVE="yes" FREE_DISK_SPACE_MEGABYTES=55226 INSTALLER_JAVA_EXECUTABLE=E\:\\KingBase\\KESRealPro\\V009R001C002B0014\\install\\jre\\bin\\java.exe FREEDISK_SPACE=55226 ENCRYPT_VARIABLE_NAME2=DB_PASS2 ENCRYPT_VARIABLE_NAME1=DB_PASS WIN_PROGRAMS_MENU=C\:\\Users\\Administrator\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs -fileOverwrite_E\\\:\\\\KingBase\\\\KESRealPro\\\\V009R001C002B0014\\\\Uninstall\\\\resource\\\\iawin32.dll=\u662F SPACE_EXITCODE=0 FREE_DISK_SPACE_BYTES=57909161984 ia.mac.invoked.user= KB_LICENSE_PATH=$USER_MAGIC_FOLDER_3$$/$Server$/$bin$/$license.dat STARTUP=C\:\\Users\\Administrator\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup DATABASE_MODE_MYSQL=0 FREE_DISK_SPACE_KILOBYTES=56551916 ENCRYPT_MODE=ENCODE -fileOverwrite_E\\\:\\\\KingBase\\\\KESRealPro\\\\V009R001C002B0014\\\\install\\\\LICENSE_ZH=\u662F DEFAULT_CONSOLE_CUSTOM=\ WIN_QUICK_LAUNCH_BAR=C\:\\Users\\Administrator\\AppData\\Roaming\\Microsoft\\Internet Explorer\\Quick Launch\\ DISK_VAR=FREEDISK_SPACE EXECUTE_STDOUT_2=20250725 AM_scram-sm3=0 PRODUCT_NAME=KingbaseES V9 USER_HOME=C\:\\Users\\Administrator EXECUTE_FILE_TARGET=E\:\\KingBase\\KESRealPro\\V009R001C002B0014\\install\\script\\sysctl.bat -fileOverwrite_E\\\:\\\\KingBase\\\\KESRealPro\\\\V009R001C002B0014\\\\Uninstall\\\\resource\\\\remove.exe=\u662F -fileOverwrite_E\\\:\\\\KingBase\\\\KESRealPro\\\\V009R001C002B0014\\\\install\\\\script\\\\initdb.bat=\u662F OUTPUT_VARIABLE=EXECUTE_STDOUT_2 KSPATH_STDOUT=\n\u6210\u529F\: \u6307\u5B9A\u7684\u503C\u5DF2\u5F97\u5230\u4FDD\u5B58\u3002\n\u5220\u9664\u6587\u4EF6 - C\:\\Users\\Administrator\\AppData\\Local\\Temp\\I1753431910\\Windows\\temp.txt\n\u5220\u9664\u6587\u4EF6 - C\:\\Users\\Administrator\\AppData\\Local\\Temp\\I1753431910\\Windows\\tmp.txt\n\u5220\u9664\u6587\u4EF6 - C\:\\Users\\Administrator\\AppData\\Local\\Temp\\I1753431910\\Windows\\tmp1.txt\n SPACE_STDERR= INSTALLER_TITLE=KingbaseES V9 \u5B89\u88C5\u7A0B\u5E8F DEVELOPER_DISK_SPACE_ADDITIONAL= KSPATH_EXECUTE_EXITCODE=0 CHOSEN_INSTALL_FEATURE_LIST=SERVER,INTERFACE,DEPLOY,KSTUDIO,KDTS UNIX_OPT= VCREDIST_NAME=Microsoft Visual C++ 2013 Redistributable (x64) - 12.0.40664 -fileOverwrite_E\\\:\\\\KingBase\\\\KESRealPro\\\\V009R001C002B0014\\\\install\\\\script\\\\unregister.bat=\u662F UNIX_USR_BIN= INITDB_STDERR= USER_MAGIC_FOLDER_25= BLOCK_SIZE="8" USER_MAGIC_FOLDER_24= USER_MAGIC_FOLDER_23= USER_MAGIC_FOLDER_22= USER_MAGIC_FOLDER_21= USER_MAGIC_FOLDER_20= ENCODING_EXECUTE_EXITCODE=0 SYSCTL_EXITCODE=0 -fileOverwrite_E\\\:\\\\KingBase\\\\KESRealPro\\\\V009R001C002B0014\\\\Uninstall\\\\resource\\\\invoker.exe=\u662F USER_SELECTED_DATA_FOLDER=E\:\\KingBase\\data WIN_COMMON_START_MENU=C\:\\ProgramData\\Microsoft\\Windows\\Start Menu DB_ENCODING_GB2312=0 -fileOverwrite_E\\\:\\\\KingBase\\\\KESRealPro\\\\V009R001C002B0014\\\\Uninstall\\\\resource\\\\win64_32_x64.exe=\u662F BLOCKSIZE_EXECUTE_EXITCODE=0 USER_INPUT_BLOCK8_RESULT=1 USER_MAGIC_FOLDER_19= CURRENT_DATE=202507250430 WIN_COMMON_STARTUP=C\:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\StartUp USER_MAGIC_FOLDER_18= ENOUGH_SPACE_VARIABLE_NAME=HAS_ENOUGHSPACE CHOSEN_INSTALL_FEATURE_LIST_LONG=\u6570\u636E\u5E93\u670D\u52A1\u5668,\u63A5\u53E3,\u6570\u636E\u5E93\u90E8\u7F72\u5DE5\u5177,\u6570\u636E\u5E93\u5F00\u53D1\u7BA1\u7406\u5DE5\u5177,\u6570\u636E\u5E93\u8FC1\u79FB\u5DE5\u5177 PROGRAMS_DIR=C\:\\Program Files USER_MAGIC_FOLDER_17= USER_MAGIC_FOLDER_16= KSPATH_EXECUTE_STDERR= USER_MAGIC_FOLDER_15= USER_MAGIC_FOLDER_14= FREE_DISK_SPACE_GIGABYTES=53 USER_MAGIC_FOLDER_13= USER_MAGIC_FOLDER_12=C\:\\Users\\Administrator\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\KingbaseES V9 USER_MAGIC_FOLDER_11=C\:\\Users\\Administrator\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\KingbaseES V9\\Client Tools DO_NOT_INSTALL=Do Not Install USER_MAGIC_FOLDER_10= MVLICENSE_STDERR= DOLLAR=$ WIN_COMMON_PROGRAMS_MENU=C\:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs USER_SHORTCUTS=C\:\\Users\\Administrator\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\KingbaseES V9 CONTAIN_SPACE_CHAR_VARIABLE_NAME=CONTAIN_SPACECHAR MVLICENSE_EXITCODE=0 PRODUCT_ID=42935a12-1f08-11b2-8349-8bb7aaf645eb COMMA=, INSTALLER_MERGE_MODULE= REQUIRE_SPACE=5581 SYSCTL_STDERR$='system' \u4E0D\u662F\u5185\u90E8\u6216\u5916\u90E8\u547D\u4EE4\uFF0C\u4E5F\u4E0D\u662F\u53EF\u8FD0\u884C\u7684\u7A0B\u5E8F\n\u6216\u6279\u5904\u7406\u6587\u4EF6\u3002\n DEPENDENCY_SUCCESSES= DEFAULT_CONSOLE_CUSTOM_NAME=DEFAULT_CONSOLE_CUSTOM FONTS=C\:\\Windows\\Fonts USER_INPUT_BLOCK32_RESULT=0 INITCUSTOM= REGISTER_STDERR$='system' \u4E0D\u662F\u5185\u90E8\u6216\u5916\u90E8\u547D\u4EE4\uFF0C\u4E5F\u4E0D\u662F\u53EF\u8FD0\u884C\u7684\u7A0B\u5E8F\n\u6216\u6279\u5904\u7406\u6587\u4EF6\u3002\n REQUIRED_DISK_SPACE_MEGABYTES=3282 IS_VCREDIST_EXISTS=true INSTALLER_JAVA_DOT_HOME=E\:\\KingBase\\KESRealPro\\V009R001C002B0014\\install\\jre MODE_EXECUTE_STDERR= DESKTOP=C\:\\Users\\Administrator\\Desktop JAVA_HOME=E\:\\KingBase\\KESRealPro\\V009R001C002B0014\\install\\jre IA_8DOT3_FILENAMECREATION_STATE=False SYSTEM=C\:\\Windows\\system32 BLOCKSIZE_EXECUTE_STDERR= -fileOverwrite_E\\\:\\\\KingBase\\\\KESRealPro\\\\V009R001C002B0014\\\\install\\\\script\\\\sysctl.bat=\u662F AuthenticateMethod_EXECUTE_EXITCODE=0 -fileOverwrite_E\\\:\\\\KingBase\\\\KESRealPro\\\\V009R001C002B0014\\\\install\\\\script\\\\clearPath.bat=\u662F -fileOverwrite_E\\\:\\\\KingBase\\\\KESRealPro\\\\V009R001C002B0014\\\\install\\\\script\\\\register.bat=\u662F HAS_ENOUGHSPACE=true MAC_APPLE_MENU= REQUIRED_DISK_SPACE_KILOBYTES=3360850 DB_ENCODING_DEFAULT=0 REGISTER_STDOUT=The beginning of Register Kingbase ES.\nRunning register.bat...\nRegister Kingbase ES Finish.\n \\=$prop.file.separator$ CACLS_EXECUTE_STDOUT= MAC_CONTROL_PANELS= MODE="oracle" DATABASE_MODE_PG=0 CONTAIN_SPACECHAR=false REQUIRED_DISK_SPACE_BYTES=3441510982 OS_ENCODING_GBK=true USER_MAGIC_FOLDER_9= CHOSEN_INSTALL_BUNDLE_NUM=5 USER_MAGIC_FOLDER_8= DB_ENCODING_UTF8=0 USER_MAGIC_FOLDER_7= DB_ENCODING_GBK=1 USER_MAGIC_FOLDER_6= USER_MAGIC_FOLDER_5= USER_MAGIC_FOLDER_4=E\:\\KingBase\\KESRealPro\\V009R001C002B0014\\install IA_CUSTOM_CODE_ZIP_SIZE=0 USER_MAGIC_FOLDER_3=E\:\\KingBase\\KESRealPro\\V009R001C002B0014 USER_MAGIC_FOLDER_2=E\:\\KingBase\\install USER_MAGIC_FOLDER_1=E\:\\KingBase REGISTER_EXITCODE=0 AuthenticateMethod_EXECUTE_STDERR= -fileOverwrite_E\\\:\\\\KingBase\\\\KESRealPro\\\\V009R001C002B0014\\\\Uninstall\\\\resource\\\\iawin64_x64.dll=\u662F AuthenticateMethod="scram-sha-256" USER_INSTALL_DIR=E\:\\KingBase ;=$prop.path.separator$ CREAT_FOLDER_EXITCODE=0 \:=$prop.path.separator$ DB_ENCODING_GB18030=0 OS400_INSTALL_DIR=/KingbaseES V9 OVERWRITE_IA_CHMOD=false FOLDER=$USER_SELECTED_DATA_FOLDER$ TEMP_DIR=C\:\\Users\\Administrator\\AppData\\Local\\Temp IA_INSTALLER_OPTIONS=true /=$prop.file.separator$ MAC_EXTENSIONS= SYSCTL_STDOUT=The beginning of Start Kingbase ES.\nRunning sysctl.bat...\n\nSERVICE_NAME\: kingbase9_R1_instance \n TYPE \: 10 WIN32_OWN_PROCESS \n STATE \: 2 START_PENDING \n (STOPPABLE, PAUSABLE, ACCEPTS_SHUTDOWN)\n WIN32_EXIT_CODE \: 0 (0x0)\n SERVICE_EXIT_CODE \: 0 (0x0)\n CHECKPOINT \: 0x0\n WAIT_HINT \: 0xea60\n PID \: 16120\n FLAGS \: \nStart Kingbase ES Complete.\n LINK_ROOT_PATH=$USER_MAGIC_FOLDER_3$ DB_PASS2=S2luZ0Jhc2VTdW5jZXJlMjAyNQ\=\= INPUT_VARIABLE=$DB_USER$ FORMAT=yyyyMMdd MAC_PREFERENCES= REQUIRED_SPACE=100 IA_CLASSPATH= DB_PORT=54321 DATABASE_MODE_ORACLE=1 SHORTCUT_NAME=\u5FEB\u6377\u65B9\u5F0F -fileOverwrite_E\\\:\\\\KingBase\\\\KESRealPro\\\\V009R001C002B0014\\\\install\\\\script\\\\setPath.bat=\u662F INITDB_EXITCODE=0 PRODUCT_VERSION_NUMBER=9.1.0.14 HAS_PERMISSION_VARIABLE_NAME=HAS_PERMISSION CASEINSENSITIVE_EXECUTE_STDERR= CHOSEN_INSTALL_BUNDLE_LIST_LONG=\u6570\u636E\u5E93\u670D\u52A1\u5668,\u63A5\u53E3,\u6570\u636E\u5E93\u90E8\u7F72\u5DE5\u5177,\u6570\u636E\u5E93\u5F00\u53D1\u7BA1\u7406\u5DE5\u5177,\u6570\u636E\u5E93\u8FC1\u79FB\u5DE5\u5177 MACX_DOCK= PROGRAMS_DIR_64=C\:\\Program Files REQUIRED_DISK_SPACE_GIGABYTES=3 CREAT_FOLDER_STDOUT= UNIX_USER_HOME=C\:\\Users\\Administrator EXTRACTOR_EXECUTABLE=F\:\\KINGBASE.EXE DB_PASS=S2luZ0Jhc2VTdW5jZXJlMjAyNQ\=\= IA_GLOBAL_REG_LOCATION=C\:\\Program Files\\Zero G Registry\\.com.zerog.registry.xml SYSTEM_64=C\:\\Windows\\system32 WIN_COMMON_DESKTOP=C\:\\Users\\Public\\Desktop CHOSEN_INSTALL_FEATURE_5=KDTS IA_INSTALLER_STATUS=SUCCESS CHOSEN_INSTALL_FEATURE_4=KSTUDIO MODE_EXECUTE_EXITCODE=0 =\ CHOSEN_INSTALL_FEATURE_3=DEPLOY
最新发布
07-26
在脚本原有的思路下,不做多余的解读,优化一下shell脚本: #!/bin/bash Dir=`pwd` echo "mysql-资源包拷贝" cp -r $pwd/mysql /usr/local/ echo "mysql-卸载mariadb" if [ $(rpm -qa | grep mariadb | wc -l) -ge 1 ];then rpm -e --nodeps $(rpm -qa | grep mariadb) else echo "未安装mariadb" fi echo "mysql是否有安装" #若是初次安装msyql需要手动添加mysql组 if [ $(rpm -qa | grep mysql | wc -l) -eq 4 ];then chmod -R 775 /usr/local/mysql/ chown -R mysql:mysql /usr/local/mysql/ else groupadd mysql useradd -r -g mysql mysql chown -R mysql:mysql /usr/local/mysql/ chmod -R 755 /usr/local/mysql/ fi #初始化 echo "mysql-初始化" /usr/local/mysql/bin/mysqld --defaults-file=/usr/local/mysql/my.cnf --user=mysql --initialize #启动mysql echo "mysql 启动" /usr/local/mysql/support-files/mysql.server start echo "mysql 修改登录密码及设置远程访问权限" password=$(grep 'A temporary password' /usr/local/mysql/mysqld.log | awk -F"root@localhost: " '{ print $2}') /usr/bin/mysql -uroot -p$password$i -S /usr/local/mysql/data/mysql.sock --connect-expired-password <<EOF alter user 'root'@'localhost' identified by 'iflytek'; flush privileges; use mysql; update user set user.Host='%' where user.User='root'; flush privileges; ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'iflytek'; flush privileges; EOF echo "mysql-重启" /usr/local/mysql/support-files/mysql.server restart echo "mysql_8.0.30登录方式:mysql -uroot -p -S /usr/local/mysql/data/mysql.sock"
06-15
### 优化后的Shell脚本 以下是对现有脚本的优化版本,旨在提高代码质量和执行效率,同时保留原有逻辑。 ```bash #!/bin/bash # 定义全局变量 CURRENT_DIR=$(pwd) MYSQL_SOURCE="${CURRENT_DIR}/mysql" INSTALL_PATH="/usr/local/mysql" # 检查并卸载MariaDB if rpm -qa | grep -q mariadb; then log_message "Uninstalling MariaDB..." rpm -e --nodeps $(rpm -qa | grep mariadb) && log_message "MariaDB uninstalled successfully." || handle_error "Failed to uninstall MariaDB."[^2] else log_message "MariaDB is not installed." fi # 检查MySQL安装状态并配置用户和权限 if rpm -qa | grep -q mysql && [ $(rpm -qa | grep mysql | wc -l) -eq 4 ]; then chmod -R 775 "${INSTALL_PATH}" && chown -R mysql:mysql "${INSTALL_PATH}" || handle_error "Failed to set permissions or ownership for MySQL directory."[^3] else groupadd mysql && useradd -r -g mysql mysql && chown -R mysql:mysql "${INSTALL_PATH}" && chmod -R 755 "${INSTALL_PATH}" || handle_error "Failed to configure MySQL user and permissions." fi # 初始化MySQL log_message "Initializing MySQL..." "${INSTALL_PATH}/bin/mysqld" --defaults-file="${INSTALL_PATH}/my.cnf" --user=mysql --initialize && log_message "MySQL initialized successfully." || handle_error "Failed to initialize MySQL."[^2] # 启动MySQL服务 log_message "Starting MySQL service..." "${INSTALL_PATH}/support-files/mysql.server" start && log_message "MySQL started successfully." || handle_error "Failed to start MySQL service."[^2] # 配置root用户密码及远程访问权限 TEMP_PASSWORD=$(grep 'A temporary password' "${INSTALL_PATH}/data/mysqld.log" | awk -F"root@localhost: " '{ print $2}') if [ -z "$TEMP_PASSWORD" ]; then handle_error "Temporary password not found in mysqld.log."[^2] fi log_message "Configuring MySQL root user..." MYSQL_CMD="${INSTALL_PATH}/bin/mysql -uroot -p${TEMP_PASSWORD} -S ${INSTALL_PATH}/data/mysql.sock --connect-expired-password" $MYSQL_CMD <<EOF && log_message "MySQL root user configured successfully." || handle_error "Failed to configure MySQL root user." ALTER USER 'root'@'localhost' IDENTIFIED BY 'iflytek'; FLUSH PRIVILEGES; USE mysql; UPDATE user SET Host='%' WHERE User='root'; FLUSH PRIVILEGES; ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'iflytek'; FLUSH PRIVILEGES; EOF # 重启MySQL服务 log_message "Restarting MySQL service..." "${INSTALL_PATH}/support-files/mysql.server" restart && log_message "MySQL restarted successfully." || handle_error "Failed to restart MySQL service." ``` --- ### 优化点说明 1. **模块化与复用** 将重复的逻辑提取为独立函数或命令组合,减少冗余代码。例如,使用`log_message`记录日志,确保信息一致性[^3]。 2. **错误处理机制** 在关键步骤中引入`handle_error`函数,捕获可能的失败场景并输出详细错误信息,提升脚本健壮性。 3. **变量定义与复用** 使用全局变量(如`CURRENT_DIR`、`MYSQL_SOURCE`等)替代硬编码路径,增强脚本可维护性[^3]。 4. **逻辑简化与增强可读性** 利用`&&`和`||`操作符简化条件判断和命令执行流程,使代码更加简洁高效。 5. **日志记录** 添加了详细的日志记录功能,便于排查问题和跟踪脚本执行过程[^3]。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值