原文 MySQL8.0.15在Win10上的折騰記,CSDN同步發佈。
轉載請註明出處,謝謝!
安裝和配置MySQL
我在Windows 10上面使用 MySQL Instller
安裝的MySQL8.0.15,安裝完成後,啓動MySQL遇到了不少問題,特此記錄踩坑記。
只要你的網絡穩定,按照默認安裝整個安裝過程還算比較順利。安裝過程中需要設置密碼,我設置的賬號和密碼都是 root
,所以下面的操作都是基於這個賬號和密碼進行的。
安裝完成後,將mysql server
的 bin目錄
加入到系統的path
變量中去,如圖:
系統環境變量path
中加入%MySQL_Home%\bin
即可。
加入成功之後,就可以使用mysql
命令了。
題外話,我們在命令行使用的mysql
命令其實是對應MySQL Server 8.0\bin\mysql.exe
,可以使用where
命令看一下其可執行文件的位置,如下:
$ where mysql
C:\Program Files\MySQL\MySQL Server 8.0\bin\mysql.exe
同理, mysqld
命令對應的是mysqld.exe
可執行文件。
查看安裝的mysql-server
版本,可以執行下面的命令:
mysql --version
可以得到下面的輸出,可以看出當前版本是 8.0.15
:
C:\Program Files\MySQL\MySQL Server 8.0\bin\mysql.exe Ver 8.0.15 for Win64 on x86_64 (MySQL Community Server - GPL)
我用的命令行終端工具是Git bash
(安裝Git客戶端就自帶該工具,個人覺得挺好用的,[嘿哈])。
用管理員身份運行,執行如下命令:
mysqld --install
如果不用管理員身份運行終端的話,會報類似下面的錯誤:
Install/Remove of the Service Denied!
運行成功的話,可以看到如下提示:
Service successfully installed.
再次啓動 mysql80(一定要用管理員身份啓動終端,否則會報 發生系統錯誤
這樣的錯誤),執行:
net start mysql80
注意:這裏使用的是mysql80
,這個是服務的名稱 (安裝時候我設置的服務名稱) ,不是mysql
,下面會講解爲什麼這樣做,如果你沒有這個mysql80
服務只需要啓動mysql
服務即可。
如果出現類似 “MYSQL 服務無法啓動” 的提示,可以在Windows的任務管理器中找找是否已經啓動了mysqld
服務,可以手動關閉後再來啓動。
如果始終啓動失敗,可以執行下面的命令:
mysqld --initialize
啓動成功後,顯示如下:
MySQL80 服務正在啓動 .
MySQL80 服務已經啓動成功。
可以使用下面命令查看是否成功啓動mysql80服務,如下:
netstat -aon|findstr "3306"
看到如下提示表示啓動成功,如下:
TCP 0.0.0.0:3306 0.0.0.0:0 LISTENING 10344
TCP 0.0.0.0:33060 0.0.0.0:0 LISTENING 10344
TCP [::]:3306 [::]:0 LISTENING 10344
TCP [::]:33060 [::]:0 LISTENING 10344
TCP [::1]:3306 [::1]:56962 TIME_WAIT 0
登錄mysql80服務,執行如下命令:
$ mysql -uroot -proot
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
很不幸的是,登錄失敗(ERROR 1045)。
那我們就來解決這個問題,這個版本的MySQL和之前的8.0.x版本解決方案不同,網上找過很多解決方案有修改配置文件的,忙了半天還是沒有搞定,最後在StackOverflow上面找到方案,結合個人實踐總結了一下,還煩請大家務必往下看。
解決MySQL登錄受限
在看下面內容之前,務必完成之前的步驟,否則下面的內容對你來說沒有太大價值。
新版本的MySQL加強了安全方便的考慮,所以使用新版本比較費勁,如果你不想折騰,可以安裝MySQL的5.x版本。
Step-1:停止MySQL80服務
使用快捷鍵 win+R
輸入 services.msc
,打開如下視圖並找到MySQL80服務:
停止MySQL80服務,或者在命令行執行net stop mysql80
命令。
Step-2:另一種方式啓動MySQL80服務
使用管理員身份運行終端1,並執行:
mysqld --console --skip-grant-tables --shared-memory
此時可以成功啓動mysql80服務,但是在Windows的服務中是看不到的,不用理會。繼續。
Step-3:啓動另一個終端2
上述步驟啓動完成後,再用管理員身份運行另一個Windows的終端2(CMD),用系統自帶的或者Git Bash 都可以,但是如果使用 Git Bash 的話,必須在登錄mysql的時候使用 winpty(Git Bash自帶的工具)命令,否則登錄會卡住不動。命令使用如下:
winpty mysql -uroot -proot
Step-4:終端登錄mysql
執行下面命令登錄服務:
mysql -u root -p root
如下圖可以登錄成功,如下截圖:
Step-5:置空密碼
在上述命令行狀態下,執行:
use mysql
update user set authentication_string='' where user='root';
Step-6:退出mysql服務
quit
Step-7:關閉mysqld啓動的mysql80服務
需要關閉以 -console --skip-grant-tables --shared-memory
啓動的mysql80服務,直接在終端1中ctrl+c
即可。
Step-8:啓動mysql80服務
使用Step-1步驟中的方式打開Windows的服務啓動或者在終端1中執行net start mysql80
啓動mysql80服務。
Step-9: 無密碼登錄mysql
在步驟Step-5中已將密碼置空,現在可以無密碼狀態登錄mysql服務,輸入登錄命令:
mysql -u root -p
登錄成功後,修改密碼(永遠不過期的密碼)執行:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpwd123' PASSWORD EXPIRE NEVER;
我把原來的密碼修改爲newpwd123
,你可以根據自己的愛好設置爲其他的密碼。
如果在此步驟出現類似下面的錯誤:
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
請執行下面的SQL語句,如下命令:
flush privileges;
Step-10:退出mysql,重新登錄
退出mysql,然後重新使用修改過的密碼登錄mysql,完事。
MySQL配置文件?
這也是個神奇的問題,最後在MySQL的官方手冊裏找到了Answer。
在Windows系統中C盤有個隱藏的文件夾,我們來揭開它的神祕面紗。
打開C盤文件,按照下面1、2、3順序就可以看到ProgramData
文件夾,如下:
進入該文件夾,就可以看到MySQL的配置文件,如下:
上面我們已經說過,啓動mysql80服務就默認使用的是該配置文件,可以在Windows服務中點擊MySQL80查看其屬性,可以看到下面的描述:
可執行文件的路徑:
C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld.exe" --defaults-file="C:\ProgramData\MySQL\MySQL Server 8.0\my.ini" MySQL80
其中,--defaults-file="C:\ProgramData\MySQL\MySQL Server 8.0\my.ini"
就是指定配置文件路徑的。
而在Windows服務中點擊MySQL,看到的屬性是這樣的:
可執行文件的路徑:
"C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld.exe" MySQL
並沒有指定配置文件,這也是爲什麼讓大家啓動的時候執行 net start mysql80
的原因。
順便修改一下配置文件,把默認編碼改爲utf-8
,如下配置(記得是在[client]和[mysql]標籤下):
[client]
# pipe=
# socket=MYSQL
# 設置mysql客戶端連接服務端時默認使用的端口
port=3306
default-character-set=utf8
[mysql]
no-beep
# 設置默認編碼
default-character-set=utf8
還有奇葩的錯誤
會持續記錄各種奇葩錯誤。
1、ERROR 2003 (HY000): Can’t connect to MySQL server on ‘localhost’ (10061)
登錄mysql服務,報上面的錯誤,說明沒有啓動成功mysql80服務,最大的可能是你修改了配置文件要麼是格式錯了要麼是配置的東西mysql不認。
只能把配置文件修改正確才能啓動服務。
我們要學會做自己精神領域內的君王,不要成爲別人情緒世界裏面的奴隸。