簡體   English   中英

mysql從批處理文件安裝

[英]mysql install from batch file

我正在嘗試使用它從命令行安裝mysql

cls
echo off

SET ProgFiles86Root="%ProgramFiles(x86)%"

IF NOT %ProgFiles86Root%=="" ( SET ProgFiles86Root=%ProgramFiles% )

echo Starting MySQL install
msiexec /i "mysql-5.5.11-win32.msi" /qn

echo MySQL installed successfully

echo Configurating MySQL Server...

"%ProgFiles86Root%\MySQL\MySQL Server 5.5\bin\mysqlinstanceconfig.exe" -i -q ServiceName=MySQL RootPassword=mysql ServerType=DEVELOPER 

DatabaseType=MIXED Port=3306 Charset=utf8

echo MySQL has been installed successfully

setx PATH "%%ProgFiles86Root%\MySQL\MySQL Server 5.5\bin%;"

cd /
c:

mysql --user=root --password=mysql -e "CREATE USER 'myuser'@'localhost' IDENTIFIED BY '123456';"


mysql --user=root --password=mysql -e "GRANT ALL ON mydatabase.* TO 'myuser'@'192.168.0.%' IDENTIFIED BY '123abc' WITH GRANT OPTION; FLUSH 

PRIVILEGES;

但是我得到了錯誤

Starting MySQL install
MySQL installed successfully
Configurating MySQL Server...
The system cannot find the path specified.
MySQL has been installed successfully

SUCCESS: Specified value was saved.
'mysql' is not recognized as an internal or external command,
operable program or batch file.
'mysql' is not recognized as an internal or external command,
operable program or batch file.

命令行說Mysql已安裝,但沒有,因為我無法在控制面板的“卸載”部分中對其進行罰款

錯誤1:將帶有和不帶有雙引號的程序文件文件夾路徑分配給ProgFiles86Root

這條線

SET ProgFiles86Root="%ProgramFiles(x86)%"

將帶有雙引號以及所有可能存在的尾隨空格和制表符的字符串"%ProgramFiles(x86)%"分配給環境變量ProgFiles86Root

中頻條件符合

IF NOT %ProgFiles86Root%=="" ( SET ProgFiles86Root=%ProgramFiles% )

之所以起作用,是因為環境變量ProgFiles86Root值帶有雙引號。 還可以通過命令IF比較雙引號,而不僅僅是雙引號引起來的字符串。

但是,如果由於在32位Windows上運行批處理文件而使該IF條件成立,則將環境變量ProgramFiles值分配給環境變量ProgFiles86Root不帶雙引號。

有關如何為環境變量正確分配字符串的更多詳細信息,請參見有關如何使用空格設置環境變量的答案 以及在那里鏈接的答案。

接下來讓我們看一下:

"%ProgFiles86Root%\MySQL\MySQL Server 5.5\bin\mysqlinstanceconfig.exe"

例如,這可以在64位Windows上擴展為

""C:\Program Files (x86)"\MySQL\MySQL Server 5.5\bin\mysqlinstanceconfig.exe"

用雙引號引起來的文件名中帶有雙引號的路徑當然不是很好,例如在32位Windows上

"C:\Program Files\MySQL\MySQL Server 5.5\bin\mysqlinstanceconfig.exe"

這將是可執行文件的正確規范。

錯誤2:批處理文件中的命令行無效

下一個錯誤在線上:

DatabaseType=MIXED Port=3306 Charset=utf8

該行不包含要為Windows命令解釋器執行的命令,因此必須導致錯誤消息。

我非常確定此行包含mysqlinstanceconfig.exe命令行的選項。 在有問題的批處理代碼的最后一行使用字符串PRIVILEGES;犯同樣的錯誤PRIVILEGES; 應該在上面命令行的末尾。

錯誤3:嘗試使用自定義文件夾路徑替換 用戶 PATH

該命令setx替代 用戶 (如這里所做的),或者系統 PATH(僅與選項/m ,當然這需要管理員權限),並沒有對當前正在運行的命令程序解釋在批處理文件中的命令本地路徑的任何影響。

盡管默認情況下未定義用戶 PATH,但是用setx命令行上指定的字符串替換 用戶 PATH當然是一個非常糟糕的主意。 如果此嘗試替換用戶路徑的操作成功,則該計算機可能無法按預期開始工作。

看來您只想將MySQL Server 5.5目錄bin的路徑附加到本地 PATH,以運行沒有路徑的可執行mysql 但是為什么不使用完整路徑運行mysql.exe

錯誤4:設置其他當前目錄錯誤

cd /
c:

第一行不執行任何操作。 要將當前目錄設置為當前驅動器的根目錄,必須運行cd \\因為反斜杠字符是Windows上的目錄分隔符,而正斜杠用於選項。 命令CD將斜杠解釋為選項的開頭,因此將其忽略,因為在正斜杠之后未指定任何選項。 在命令提示符窗口中運行cd /? 在此命令上尋求幫助。

第二行在驅動器C上創建當前目錄:當前正在運行的命令進程的當前目錄。 該代碼未定義哪個目錄是驅動器C:上的當前目錄。

錯誤5:嘗試在沒有路徑和文件擴展名的情況下運行mysql.exe

希望所有用戶的命令setx失敗,盡管這種可能性很小。 但是,即使setx成功,當前解釋批處理文件的命令進程也已經具有在啟動批處理文件時創建的父進程的所有環境變量的本地副本 因此,運行沒有文件擴展名和路徑的mysql必須失敗,除非在批處理文件處理開始之前已經安裝了MySQL並且已經將其目錄bin添加到系統用戶 PATH中。

解:

使用此批處理代碼:

@echo off
cls

if "%ProgramFiles(x86)%" == "" (
    set "MySQLServerPath=%ProgramFiles%\MySQL\MySQL Server 5.5\bin"
) else (
    set "MySQLServerPath=%ProgramFiles(x86)%\MySQL\MySQL Server 5.5\bin"
)

echo Starting MySQL install ...
%SystemRoot%\System32\msiexec.exe /i "mysql-5.5.11-win32.msi" /qn
echo MySQL installed successfully.

echo Configurating MySQL Server ...
"%MySQLServerPath%\mysqlinstanceconfig.exe" -i -q ServiceName=MySQL RootPassword=mysql ServerType=DEVELOPER DatabaseType=MIXED Port=3306 Charset=utf8
echo MySQL has been configured successfully.

cd /D C:\

rem if not "%PATH:~-1%" == ";" set "PATH=%PATH%;"
rem set "PATH=%PATH%%MySQLServerPath%"

"MySQLServerPath\mysql.exe" --user=root --password=mysql -e "CREATE USER 'myuser'@'localhost' IDENTIFIED BY '123456';"
"MySQLServerPath\mysql.exe" --user=root --password=mysql -e "GRANT ALL ON mydatabase.* TO 'myuser'@'192.168.0.%' IDENTIFIED BY '123abc' WITH GRANT OPTION; FLUSH PRIVILEGES;"

如果未在MySQL的安裝或配置上完成,則此批處理代碼不會將MySQL二進制文件的目錄路徑添加到系統 PATH中。 如果由於某種未知的原因, 本地 PATH必須擴展到MySQL Binaries目錄的路徑,請通過從兩行中刪除REM命令,取消注釋上述批處理文件末尾的兩行。

但是,如果您真的想將MySQL二進制文件目錄添加到用戶系統 PATH(我確實不建議這樣做),請非常仔細地閱讀有關的注釋和答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM