在Win10上折騰MySQL8.0.15


原文 MySQL8.0.15在Win10上的折騰記,CSDN同步發佈。

轉載請註明出處,謝謝!


安裝和配置MySQL

我在Windows 10上面使用 MySQL Instller 安裝的MySQL8.0.15,安裝完成後,啓動MySQL遇到了不少問題,特此記錄踩坑記。

只要你的網絡穩定,按照默認安裝整個安裝過程還算比較順利。安裝過程中需要設置密碼,我設置的賬號和密碼都是 root,所以下面的操作都是基於這個賬號和密碼進行的。

安裝完成後,將mysql serverbin目錄加入到系統的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不認。

只能把配置文件修改正確才能啓動服務。


我們要學會做自己精神領域內的君王,不要成爲別人情緒世界裏面的奴隸。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章