MySQL 的 ZIP 版本 24 步安裝過程

語言: CN / TW / HK

持續創作,加速成長!這是我參與「掘金日新計劃 · 10 月更文挑戰」的第10天,點擊查看活動詳情

MySQL 是在軟件開發過程中不可或缺的一個部分,但是對於初學者來説搭建環境總是會遇到各種各樣的問題,或者是未授權,或者是密碼修改未成功,或者是服務無法安裝,無法刪除等等一系列問題,總要在學習初期遇到各種各樣的坑。

為了解決這個問題,筆者總結了 ZIP 版本 MySQL(MySQL 8.0.18 1045 28000)的 24 步安裝過程。

  • MySQL 的安裝
  • MySQL 的刪除
  • MySQL 的密碼修改
  • MySQL 中的 Flush Privileges 的使用
  • MySQL 對 Host 的修改
  • 其他常見異常

其中對於 Flush Privileges 在 MySQL Ref-Manual 中的闡述的描述是相對來説比較提倡的一種學習方法。

下面分別從上述幾個方面進行具體描述。

MySQL的安裝 24 步

1. 配置系統環境變量,對於這一步驟,可以配置系統環境變量,也可以配置用户環境變量,至於兩者的區別,再這就不做贅述了。

在這裏插入圖片描述

在這裏插入圖片描述

對於這一步驟有些用户操作的時候可能會出現如下問題:

在這裏插入圖片描述

環境變量配置完成後,仍然提示“'mysql' 不是內部或外部命令”。這種情況下,不需要重啟電腦,重新打開命令提示符窗口即可。

2. 直接在系統路徑下進入 MySQL 報錯,如下:

在這裏插入圖片描述

ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)

3. 嘗試啟動 MySQL,提示:

發生系統錯誤 2。 系統找不到指定的文件。

在這裏插入圖片描述

4. 切換到 MySQL 解壓文件夾 bin 文件夾所在路徑:

在這裏插入圖片描述

5. 執行 mysqld install 命令安裝 MySQL 服務net start mysql 啟動服務。

在這裏插入圖片描述

6. 拒絕訪問

ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (using password: NO)

在這裏插入圖片描述

7. 無密碼訪問

mysqld --console --skip-grant-tables --shared-memory

在這裏插入圖片描述

提示:

2020-01-06T05:49:30.805343Z 0 [System] [MY-010116] [Server] D:\software\mysql-8. 0.18-winx64\bin\mysqld.exe (mysqld 8.0.18) starting as process 3980 2020-01-06T05:49:31.078781Z 1 [ERROR] [MY-012271] [InnoDB] The innodb_system dat a file 'ibdata1' must be writable 2020-01-06T05:49:31.107101Z 1 [ERROR] [MY-012278] [InnoDB] The innodb_system dat a file 'ibdata1' must be writable 2020-01-06T05:49:31.207687Z 1 [ERROR] [MY-010334] [Server] Failed to initialize DD Storage Engine 2020-01-06T05:49:31.259445Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initi alization failed. 2020-01-06T05:49:31.285812Z 0 [ERROR] [MY-010119] [Server] Aborting 2020-01-06T05:49:31.428390Z 0 [System] [MY-010910] [Server] D:\software\mysql-8. 0.18-winx64\bin\mysqld.exe: Shutdown complete (mysqld 8.0.18) MySQL Community S erver - GPL.

針對這個問題,有提供了一種解決方案,刪除 data 文件夾下的,ib_logfile0、ib_logfile1 兩個日誌文件。

在這裏插入圖片描述

但是,由於沒有對緣由進行説明,所以放棄這種方案。另外,對於這種不明確緣由直接刪除相關文件情況下,實際上也是在為後續工作埋雷,及時當前配置經過折騰正常啟動後,依然會導致運行過程中存在不確定因素。

上述這個過程看上去沒什麼問題,實際上是不對的,在安裝過程中環境變量配置完成後直接安裝並啟動服務,但是缺少一個“初始化”的步驟,所以導致無法正常啟動。所以在配置過程中應該,環境變量配置完成後,首先初始化,初始化過程中會生成響應的data文件夾下的文件和配置一些屬性。

另一種方案

8. 刪除方案一中已經安裝的服務mysqld -remove

在這裏插入圖片描述

  1. 去下載 ZIP 版本的MYSQL

http://dev.mysql.com/downloads/mysql/

並解壓,第一次解壓後會發現目錄中並沒有 data 文件夾。

在這裏插入圖片描述

在這裏插入圖片描述

10. 在解壓的目標路徑下,創建data文件夾。

11. 在解壓目錄路徑下創建 my.ini 文件,注意右下角,保存 ini 文件的時候,選擇 ANSI 編碼方式。

在這裏插入圖片描述

12. 初始化 mysqld --initialize --console(注:是先初始化,再安裝啟動,而不是先安裝服務啟動,再初始化,先安裝啟動的情況下,會在啟動時提示,無法啟動),可是報編碼有歧義。

在這裏插入圖片描述

這個在步驟 3 中已經標註完成了,由原來的 UTF-8,修改為 UTF8MB4。

13. 再次初始化,有些情況下,由於在刪除服務後沒有刪除 data 文件夾,所以文件夾下會有文件,再次初始化的時候,提示 data 文件已經存在了,刪除即可。

在這裏插入圖片描述

  1. 再初執行 mysqld --initialize --console,可以看到初始化完成,並且生成了臨時密碼。

在這裏插入圖片描述

密碼:

i%lsDLpT?6J+(這個密碼是可以直接複製的)

  1. mysqld install 安裝 MySQL 服務:

在這裏插入圖片描述

  1. net start mysql 啟動 MySQL 服務:

在這裏插入圖片描述

17. 使用剛才的密碼登錄 MySQL(注意:這個密碼是可以複製粘貼的),進入 MySQL。

在這裏插入圖片描述

  1. 由於剛才的密碼不便於記憶,或者由於別的原因,通常需要修改密碼,使用如下語句:

mysql>ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123'; mysql>FLUSH PRIVILEGES;

在這裏插入圖片描述

19. 修改完成後 Ctrl+Z,退出 MySQL。

20. 測試新密碼成功連接:

在這裏插入圖片描述

21. 有些情況下,需要查看 MySQL 佔用的端口:

show global variables like 'port';

需要注意的是,命令號要用分號結尾。

在這裏插入圖片描述

當然,也可以通過之前添加的配置文件中查看使用的端口。

22. 使用客户端連接,報錯:

錯誤號碼1130,host ' ' is not allowed to connect to this mysql server

在這裏插入圖片描述

如果使用 navicat 連接的情況下,也有可能報錯誤:

protocol mismatch; server version=10 client version=11

解決辦法:

在這裏插入圖片描述

在這裏插入圖片描述

語句:

use mysql; select host,user from user; update user set host='%' where user='root'; flush privileges;

23. 連接成功。

24. 在提示密碼過期的情況下,即使重置也沒有用,必須在原來的密碼輸入以後,修改密碼,設置不過期才可以,經過測試,在密碼過期之後重新初始化 MySQL,生成臨時密碼後,輸入臨時密碼,依然無效,需要使用過期的舊密碼,輸入後,進入 MySQL,修改密碼,過程如下:

-- 修改密碼以能夠在客户端登陸: set password for [email protected] = password('123'); -- 修改root密碼永不過期: ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;

到此經過 24 步驟的嘗試,基本上對 MySQL 8.0.19 的 ZIP 版本的安裝算是完成。

MySQL 的刪除

mysqld -remove

MySQL 密碼修改

步驟 11 中用到的如下語句:

mysql>ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123';

在密碼修改過後使用 Flush Privileges 進行緩存的清除,對權限進行刷新。

MySQL 中的 Flush Privileges 的使用

mysql>FLUSH PRIVILEGES;

Flush Privileges,顧名思義,對權限進行刷新,很多人不明白這究竟是個什麼東西,看一下官方的解釋(來自 MySQL 的 refman-5.7-en.pdf)就明白了:

在這裏插入圖片描述

重新從 MySQL 的系統數據庫中加載授權表中的權限,Flush Privileges 能夠使運行時的權限及時生效。這和其中提及到的 --skip-grant-tables 的參數有關係,也就是説如果在啟動的時候禁用了權限系統,使用 Flush Privileges 就能夠釋放緩存,重新使修改的內容生效。這就從根本上了解了,--skip-grant-tables,Flush Privileges的作用,而不用每次使用的時候都懵懵懂懂。

通過上面 Flush Privileges 的機制在 Ref-Manual 中的闡述,對於用法的深入瞭解,實際上是一種很值得提倡的學習方法。

我們會發現,尤其對於初學者,在知識點的學習和查找過程中,對於很多博客無法正確解決心中的疑慮,總是多多少少的令人感到不解。

這種情況下追根溯源,找到它的出處,看最原始的解釋,就能很直白,簡單的理解問題的癥結所在。

通過上面這種方式,我們查看在上文中提到的 ib_logfile0 和 ib_logfile1 是什麼?

在這裏插入圖片描述

innodb_log_group_home_dir= /dr3/ibblogs

通過原文的描述知道,放置 InnoDB 的 log files 在不同的物理存儲位置,避免發生資源的讀寫衝突。就是在上述描述的方案中出現的錯誤提示。在 Ref-Manual 中很明確的提到,只要對路徑指向別處,便可以避免權限導致的讀寫錯誤,而不是直接選擇刪除。

通過這種方式,在 MySQL 安裝過程中遇到的所有問題,便可以迎刃而解,而不是翻閲各種重複的,不夠深入理解的博客方案,導致的各種問題無法正確理解。通過這種方式,一勞永逸,舉一反三的解決。

當然不僅僅侷限於官方手冊,雖然官方手冊是比較優秀的選擇,但是對於有些同學來説,存在一定難度,那麼可以選擇比較系統的相關書籍,結合博客深入,全面理解。

提供一個基本的 ini 配置如下:

``` [mysqld]

設置3306端口

port=3306

設置mysql的安裝目錄

basedir=E:***\MySQL\mysql-8.0.19-winx64

設置mysql數據庫的數據的存放目錄

datadir=E:***\MySQL\mysql-8.0.19-winx64\data

允許最大連接數

max_connections=200

允許連接失敗的次數。這是為了防止有人從該主機試圖攻擊數據庫系統

max_connect_errors=10

服務端使用的字符集默認為UTF8

character-set-server=UTF8MB4

創建新表時將使用的默認存儲引擎

default-storage-engine=INNODB

默認使用“mysql_native_password”插件認證

default_authentication_plugin=mysql_native_password

[mysql]

設置mysql客户端默認字符集

default-character-set=UTF8MB4

[client]

設置mysql客户端連接服務端時默認使用的端口

port=3306 default-character-set=UTF8MB4 ```

MySQL 對 Host 的修改

使用上面提供的具體方法, 再次愉快的從《refman-5.7-en》的第 996 頁中找到答案。如下:

在這裏插入圖片描述

表中展示了,用户名稱,主機值,以及允許鏈接的備註信息,從表中可以看出通配符百分號,以及 IP 地址所對應的含義。具體內容,可以去手冊上查找,如果不明確的話,可以留言。

其他常見異常

  1. 錯誤輸入命令,使用 mysqld -u root -p 會出現如下錯誤。修改 mysqld 為 mysql 即可。

mysqld: Can not perform keyring migration : Invalid --keyring-migration-source option. 2020-01-20T08:17:51.407930Z 0 [System] [MY-010116] [Server] E:\Tool\MySQL\mysql-8.0.19-winx64\bin\mysqld.exe (mysqld 8.0.19) starting as process 25932 2020-01-20T08:17:51.413918Z 0 [ERROR] [MY-011084] [Server] Keyring migration failed. 2020-01-20T08:17:51.424474Z 0 [ERROR] [MY-010119] [Server] Aborting 2020-01-20T08:17:51.424758Z 0 [System] [MY-010910] [Server] E:\Tool\MySQL\mysql-8.0.19-winx64\bin\mysqld.exe: Shutdown complete (mysqld 8.0.19) MySQL Community Server - GPL.

  1. 無法連接 MySQL 服務,原因是沒有啟動服務導致的:

ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)

  1. 發生系統錯誤 2,系統找不到系統文件:

在這裏插入圖片描述

在這裏插入圖片描述

切換到 bin 所在路徑安裝,才能可執行文件路徑才不是默認的系統路徑,如下圖:

在這裏插入圖片描述

再啟動才能夠正常啟動服務:

在這裏插入圖片描述