這個專欄也可以認為是學習筆記,由於之前的專欄學習的是網絡上的培訓機構教程,學習完成之後發現雖然講到一些有一些深入的東西,但是講的都不是特別深,所以從這一節開始將會從零開始來全盤了解MYSQL,這裡找了一本書《從根上理解Mysql》,個人也十分推薦讀者去看看這邊書,不僅有新特性對接講解,也有很多的乾貨,同時講的也十分好,作為支持個人後面也買了一本實體書(雖然基本都是拿pdf看的)。
思維導圖(持續更新)https://www.mubucm.com/doc/7DDOY0CuMK5
圖片地址:https://gitee.com/lazyTimes/imageReposity/raw/master/img/20211029134243.png
參考資料:英文mysql5.7官方文檔:https://dev.mysql.com/doc/refman/5.7/en/mysqld-safe.html中文對應翻譯網站(機翻):https://www.docs4dev.com/docs/zh/mysql/5.7/reference/preface.html概述了解安裝mysql的注意事項,以及回顧mysql個人簡要介紹關於mysql啟動的常見四個命令以及具體的作用認識客戶端和服務端由於是Mysql的專欄,這裡就不牽扯上面TCP/IP,什麼網絡傳輸協議了,總之我們只需要了解mysql是分為客戶端和服務端的,通常我們訪問頁面或者瀏覽數據就是一次資料庫的訪問過程(當然現在多數東西都靜態化了),所以連接的這一方被稱為客戶端而接受請求的這一方面被稱為服務端
mysql的基本任務通常我們使用MYSQL基本都是幹這些事情:
查詢資料庫的數據,客戶端發送請求給服務端,服務端根據命令找到數據回送給客戶端。mysql實例說完了上面的廢話之後,我們來說下mysql實例,實例也在作業系統的層面叫做進程,而進程可以看做是處理器,內存,IO設備的抽象,我們不需要知道這個進程底層是如何傳輸數據存儲數據的,我們只需要了解他需要一個「埠」,並且每一個實例都有一個 「進程ID」的東西,在資料庫實例運行的時候系統會分配一個進程ID給它並且保證唯一,而每一個進程都有自己的名字,這個名稱是安裝的時候由程式設計師自己設置的,但是如果沒有分配則會使用MYSQL自己默認設置的名稱。
❝我們啟動的 MySQL 「伺服器進程的默認名稱」為 「mysqld」 , 而我們「常用的 MySQL 客戶端進程」的默認名稱為 「mysql」 。
從這個名稱我們也可以推測出為什麼我們啟動一個服務通常會使用Mysqld,而我們連接資料庫通常使用mysql。
❞安裝Mysql的注意事項安裝Mysql其實是一件十分簡單但是實際上如果全手動安裝細節還是比較多的,通常情況下我們自己使用直接用EXE程序或者直接使用BIN包等,但很多時候對於Linux的軟體很多人都會推薦使用 「源碼安裝」,源碼安裝的好處不僅僅是縮小體積,經過不少的實驗證明源碼的安裝方式效率會有所提升,所以正式環境下 「儘可能使用源碼安裝」,最後需要注意的一點是:「Linux下使用RPM包會有單獨的伺服器和客戶端RPM包,需要分別安裝」。
安裝目錄位置的區別下面是具體的Mysql安裝目錄,當然下面這裡只做參考,個人mac電腦使用的是brew install mysql加上m1的的晶片安裝的,適配性未知,所以為了保證筆記的可靠,這裡用回了windows系統來進行實際測試和演練,下面是不同的作業系統在mysql的安裝目錄存儲位置存在細微的不同,「但是一定要十分清楚mysql真實的安裝位置」,這對於自己搗鼓各種命令以及設置參數很重要。
macOS 作業系統上的安裝目錄:
/usr/local/mysql/
Windows 作業系統上的安裝目錄:
C:\Program Files\MySQL\MySQL Server 5.7
Mysql安裝windows安裝過程安裝過程就不演示了,網上的教程一抓一大把,為了穩妥起見這裡個人使用的mysql版本是5.7的版本,同時使用了默認exe程序安裝,如果你使用了「mysql-installxx.exe」安裝,有的時候會出現下面的命令:
'mysql' 不是內部或外部命令,也不是可運行的程序看到這個提示之後,第一反應是進入power shell的管理員模式:
PS C:\Windows\system32> mysql -uroot -p
mysql : 無法將「mysql」項識別為 cmdlet、函數、腳本文件或可運行程序的名稱。請檢查名稱的拼寫,如果包括路徑,請確保路徑正
確,然後再試一次。
所在位置 行:1 字符: 1
+ mysql -uroot -p
+ ~~~~~
+ CategoryInfo : ObjectNotFound: (mysql:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException發現還是報錯,然後我跑去服務看了下mysql是否有啟動,發現mysql又是啟動的,這裡有點奇怪
然後這裡找了下網絡上的解決辦法,其實加個環境變量就行了,然後使用power shell直接安裝即可,最後我們照常輸入命令就可以發現mysql正常安裝完畢了:
PS C:\Windows\system32> mysql -uroot -pxxxxxx
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.35-log MySQL Community Server (GPL)
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
❝關於絕對路徑和相對路逕啟動問題:
絕對路徑:如果你的系統環境變量裡面訪問不到你的應用程式命令,這時候就需要進入到相關的目錄執行命令,比如上面我沒有配置環境變量就需要進入到C:\Program Files\MySQL\MySQL Server 5.7\bin目錄下進行操作,也可以正常使用mysql,但是每次這樣弄很麻煩,所以基本是個正常人都會使用環境變量,如果你不知道環境變量是什麼,額。。。。請自行百度
相對路徑:配置完環境變量之後,我們敲命令會根據系統環境變量配置的 「先後順序」找到我們的命令並且執行,但是這點在mysql有點特別,後續會講到如果多個系統參數配置會默認使用 「最後讀到的配置參數為準」。
❞macos安裝過程
Mac本子個人也是24分期才敢碰的神物,我相信用的人也不多,所以這裡直接放個帖子:
https://www.cnblogs.com/nickchen121/p/11145123.html
Linux安裝過程由於個人使用雲伺服器搭建mysql比較多,這裡提供了一個阿里雲rpm包的安裝方式,版本是centeros7,centeros6同樣可以使用,不過需要修改部分命令。
https://juejin.cn/post/6895255541544255496
Mysql啟動:多數情況我們使用mysql.sever啟動即可,因為它會間接的調用其他的幾個命令,而mysqld_muti這個命令更建議自己實戰的時候進行配置的學習使用,更加事半功倍。
mysqldMysqld:代表的是mysql的伺服器程序,運行就可以啟動一個伺服器的進程,但是「不常用」。
個人在實踐之後使用了mysqld命令之後,發現運行的結果如下,起初比較莫名其妙的問題,但是看日誌不難發現問題,其實就是 「目錄不存在」並且mysql又沒法給你創建目錄,只要使用「everything」找到對應點文件即可(mac為什麼沒有這麼好用的軟體,哎)。
你可以通過找到下面的my.ini文件並且修改裡面關於「datadir」的路徑即可。
通過打開這個文件發現配置路徑裡面有一個/Data,然後發現目錄裡面沒有這路徑:
# Path to the database root
datadir=C:/ProgramData/MySQL/MySQL Server 5.7/Data下面是上面描述的日誌的運行結果,感興趣的可以自己試一試,也可能遇不到我這種問題
PS C:\Windows\system32> mysqld -datadir=D:\soft\mysqltest
mysqld: Can't change dir to 'C:\Program Files\MySQL\MySQL Server 5.7\data\' (Errcode: 2 - No such file or directory)
2021-10-28T14:20:14.063607Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2021-10-28T14:20:14.063669Z 0 [Note] --secure-file-priv is set to NULL. Operations related to importing and exporting data are disabled
2021-10-28T14:20:14.064027Z 0 [Note] C:\Program Files\MySQL\MySQL Server 5.7\bin\mysqld.exe (mysqld 5.7.35) starting as process 3296 ...
2021-10-28T14:20:14.066088Z 0 [Warning] Can't create test file C:\Program Files\MySQL\MySQL Server 5.7\data\DESKTOP-L8AD9HM.lower-test
2021-10-28T14:20:14.066416Z 0 [Warning] Can't create test file C:\Program Files\MySQL\MySQL Server 5.7\data\DESKTOP-L8AD9HM.lower-test
2021-10-28T14:20:14.067090Z 0 [ERROR] failed to set datadir to C:\Program Files\MySQL\MySQL Server 5.7\data\
2021-10-28T14:20:14.067408Z 0 [ERROR] Aborting
2021-10-28T14:20:14.067619Z 0 [Note] Binlog end
2021-10-28T14:20:14.067904Z 0 [Note] C:\Program Files\MySQL\MySQL Server 5.7\bin\mysqld.exe: Shutdown complete最後你可以運行mysqld啟動一個伺服器進程並且在對應的目錄下面構建了對應的文件。
❝答案的靈感來自於下面的部分:
What I did (Windows 10) for a new installation:
Start cmd in admin mode (run as administrator by hitting windows key, typing cmd, right clicking on it and selecting "Run as Administrator"
Change into "MySQL Server X.Y" directory (for me the full path is C:\Program Files\MySQL\MySQL Server 5.7")
using notepad create a my.ini with a mysqld section that points at your data directory
[mysqld]
datadir="X:\Your Directory Path and Name"created the directory identified in my.ini above.
change into bin Directory under server directory and execute: mysqld --initialize
Once complete, started the service and it came up fine.
❞mysqld_safe「mysqld_safe」 是一個啟動腳本,在間接的調用「mysqld」 ,同時「監控進程」,使用 mysqld_safe 啟動伺服器程序時,會通過監控把出錯的內容和出錯的信息重定向到一某個文件裡面產生出錯日誌,這樣可以方便我們找出發生錯誤的原因。
但是個人實踐之後找不到,其實原因是「windows沒有這個命令」的,關於更多mysqld_safe命令的解釋可以看看mysql的官方網站:https://dev.mysql.com/doc/refman/5.7/en/mysqld-safe.html
❝如果閱讀英文有困難,這裡有一個中文的翻譯網站:https://www.docs4dev.com/docs/zh/mysql/5.7/reference/preface.html
❞❝對於一些Linux 平臺,使用 RPM 或 Debian 軟體包安裝的 MySQL 包括對 ManagementMySQL 伺服器啟動和關閉的系統支持。在這些平臺上可能被認為沒有必要所有沒有安裝mysql.server和mysqld_safe。
❞mysql.server這個文件同樣也是一個啟動腳本,也是最常用的腳本,實際上這個命令可以看做是一個連結,也就是一個「快捷方式」,實際指向的路徑為:../support-files/mysql.server,另外這個「命令會間接的調用mysqld_safe」,我們使用下面的命令就可以直接啟動服務:
mysql.server start
❝如果作業系統在安裝之後沒有構建相應的連結文件,可能需要自己手動構建一個連結文件,另外,linux伺服器需要注意權限的問題,因為有時候沒有root權限可能需要對於對應的目錄配置用戶組,下馬是關於官網的介紹
如果從源分發版或使用不自動安裝「mysql.server」的二進位分發版格式安裝 MySQL,則 可以手動安裝腳本。它可以 support-files在 MySQL 安裝目錄下的目錄或 MySQL 原始碼樹中找到。將腳本複製到/etc/init.d名為「mysql」的目錄並使其可執行:
shell> cp mysql.server /etc/init.d/mysql
❞
shell> chmod +x /etc/init.d/mysql最後啟動和關閉mysql可以使用如下的方式(linux系統):
mysql.server start
mysql.server stop如果是windows系統,使用上面的命令會報錯,所以我們使用下面的命令即可:
PS C:\Windows\system32> mysql.server start
mysql.server : 無法將「mysql.server」項識別為 cmdlet、函數、腳本文件或可運行程序的名稱。請檢查名稱的拼寫,如果包括路徑
,請確保路徑正確,然後再試一次。
所在位置 行:1 字符: 1
+ mysql.server start
+ ~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (mysql.server:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
PS C:\Windows\system32> net start mysql
服務名無效。
請鍵入 NET HELPMSG 2185 以獲得更多的幫助。
PS C:\Windows\system32> net start mysql57
請求的服務已經啟動。
mysqld_multi有的時候我們可能會想要在一臺的機器上使用多個伺服器的進程,這個命令的作用是對於每一個伺服器進程進行啟動或者停止監控,但是由於這個命令較為複雜,個人還是建議使用上面的官方穩定連結進行具體的細節了解。
❝如果閱讀英文有困難,這裡有一個中文的翻譯網站:https://www.docs4dev.com/docs/zh/mysql/5.7/reference/preface.html
❞window&服務啟動這個簡單了解一下即可,window端的mysql基本是為了照顧windows的用戶才出現的,真正能施展拳腳的地方還是linux,當然有些公司確實會使用window作為伺服器。。。。。所以還是過一下,下面是安裝一個windows的服務的命令:
"完整的可執行文件路徑" --install [-manual] [服務名]
❝其中的 -manual 可以省略,區別在於加上會關閉 「自動啟動」改為「手動啟動」
❞最後下面是個人的mysqld服務安裝命令,請讀者根據自己的系統環境自行安裝即可。
C:\Program Files\MySQL\MySQL Server 5.7\bin\mysqld --install安裝之後使用net start mysql和net stop mysql命令即可啟動或者關閉。
Mysql連接這裡只有一個需要注意一下的點那就是對於命令格式來說,如果使用-u、-p等參數的時候使用一個短劃線,但是如果使用--username、--password等要使用雙劃線的形式。
總結本節內容非常簡單,介紹了關於mysql的安裝過程的踩坑和四個常見的啟動命令,其實我們重點只需要掌握一個命令即可,同時對於部分命令更加建議自己使用的時候邊學邊記錄可以更好的消化和吸收。
以上就是筆者邊學習邊踩坑的記錄,最後發現最好的教程還是官方文檔,另外遇到問題也不要慌,先在自己腦海中大膽的猜測問題點,進行驗證之後反覆重試,踩坑多了之後自然會熟悉。
寫在最後算是對於專欄的重新編寫,後續會對之前的學習內容做一個復盤和總結。