目錄
前言:學習引入
1、安裝注意事項
2、學習建議
3、MySQL 和 MariaDB
核心概念一:它們是什么?
核心概念二:它們如何工作?(“倉庫”比喻)
核心概念三:為什么它們如此流行?
MySQL 和 MariaDB 如何選擇?
一、首先查看當前云服務器中是否有MySQL或MariaDB服務
詳細解釋如下:
二、此時我們切換為超級用戶
三、然后再停止運行中的MySQL或MariaDB服務
四、檢查系統安裝包(dpkg -l | grep 名稱命令)
1、第一部分:dpkg -l
2、第二部分:| grep 名稱
3、命令組合:dpkg -l | grep 名稱
4、與?rpm -qa?命令的區別
5、簡單總結
6、檢查MySQL或MariaDB的系統安裝包
詳細解釋
總結當前狀態
五、卸載這些默認安裝包
分步講解
1.?dpkg -l
2.?grep mysql
3.?xargs apt -y remove
整個命令鏈的流程可以理解為:
一個簡單的模擬示例
卸載后的操作
六、獲取MySQL官方APT源
1、首先確認系統版本
2、下載MySQL APT配置倉庫包(兩種方式)
3、安裝MySQL APT倉庫配置包
4、安裝MySQL APT源,對比前后APT源
1.?安裝前:查看現有的 APT 源列表
2.?安裝 MySQL APT 配置包
3.?更新 APT 緩存
4.?安裝后:檢查是否添加了 MySQL 的 APT 源
5.?(可選)安裝 MySQL
5、看看能不能正常工作
詳細解釋
七、安裝mysql服務
八、查看配置文件和數據存儲位置
1、查看 MySQL 配置文件位置
2、查看數據文件存儲位置
3、查找 MySQL 相關可執行文件的安裝位置
1.?which mysqld
2.?which mysql
這些信息告訴你:
相關的重要命令位置:
我們可以進一步驗證:
九、啟動和查看 MySQL 服務
1、啟動 MySQL 服務
2、查看 MySQL 服務狀態
3、設置開機自啟
4、查看 MySQL 進程
十、登錄方法
1、登錄方法一【獲取臨時密碼】
1. 查看密碼驗證組件
2. 降低密碼要求(MySQL 5.7)
3. 卸載密碼驗證插件
4. 修改 root 密碼
MySQL 5.7 vs MySQL 8.0+ 的區別:
MySQL 5.7:
MySQL 8.0+:
2、如果找不到臨時密碼,嘗試方法二【直接登錄】(我的這個可以)
3、登錄方法三【使用 skip-grant-tables】
4、相較于Centos,Ubuntu的重要區別
5、完成后記得
十一、設置 MySQL 開機啟動(可以不設置)
1、設置 MySQL 開機啟動
2、重新加載 systemd 配置
3、Ubuntu 與 CentOS 的對比
4、完整的服務管理命令
5、驗證設置結果
6、注意
十二、配置 MySQL 配置文件
1、Ubuntu 中 MySQL 配置文件的路徑
2、配置字符編碼和存儲引擎
編輯配置文件:
3、配置完成后重啟 MySQL
4、驗證配置是否生效
5、重要說明
前言:學習引入
1、安裝注意事項
- 安裝和卸載過程中,請全程使用 root 用戶操作
- 安裝完成后,普通用戶也可以正常使用 MySQL
2、學習建議
- 初期練習階段,建議直接使用 root 賬戶操作 MySQL
- 先集中精力掌握基本的 MySQL 語句
- 待熟悉基礎操作后,再學習用戶管理相關內容
- 后期可根據實際需求創建普通用戶
3、MySQL 和 MariaDB
????????我們可以把它們理解為一個非常流行、高效且可靠的“數據管家”。它們是一種關系型數據庫管理系統(RDBMS),專門負責幫你存儲、管理和獲取結構化的數據。
核心概念一:它們是什么?
-
MySQL: 最初由一家瑞典公司開發,后來被 Sun Microsystems 收購,Sun 又被 Oracle(甲骨文)收購。所以現在 MySQL 歸 Oracle 所有。它是世界上最流行的開源數據庫之一,擁有龐大的用戶社區和豐富的生態系統。
-
MariaDB: 由 MySQL 的原始創始人開發。當年 Oracle 收購 MySQL 后,出于對 MySQL 閉源和控制的擔憂,MySQL 之父 Michael Widenius 帶領團隊創建了 MariaDB。MariaDB 被設計為 MySQL 的一個完全兼容的替代品(就像換了發動機但外殼和操作方式完全一樣的車)。
簡單來說,MariaDB 是 MySQL 的一個分支(Fork),并且目標是保持兼容性,同時加入更多創新和開源承諾。
核心概念二:它們如何工作?(“倉庫”比喻)
想象一個巨大的智能倉庫:
-
數據庫(Database): 就是這個倉庫本身。你可以在里面建立多個貨架區來存放不同類別的貨物。
-
表(Table): 倉庫里的一個貨架區。比如,一個“用戶信息”區,一個“商品列表”區。
-
列(Column): 每個貨架區都有固定的貨架格,規定了存放貨物的屬性。例如,在“用戶信息”貨架區,有“用戶名”、“密碼”、“郵箱”這幾個貨架格。這定義了數據的結構。
-
行(Row): 貨架上的一件具體貨物。比如,在“用戶信息”區的一行,就對應一個真實用戶的全部信息(e.g., 用戶A,密碼123,abc@email.com)。
-
SQL(結構化查詢語言): 你與倉庫管理員(MySQL/MariaDB)溝通的指令。你用這種語言告訴管理員:
-
“幫我存一件新貨物” (
INSERT
) -
“幫我找出所有價格大于100的商品” (
SELECT ... WHERE ...
) -
“把用戶A的電話號碼更新一下” (
UPDATE
) -
“把已經下架的商品都扔掉” (
DELETE
)
-
核心概念三:為什么它們如此流行?
-
開源免費: 社區版可以免費使用和修改,這降低了成本并促進了社區發展。
-
性能卓越: 處理速度很快,尤其適合Web應用,能夠高效處理大量的讀寫請求。
-
簡單易用: 相對于一些大型商業數據庫(如Oracle),它更容易安裝、學習和使用。
-
功能豐富: 支持事務、外鍵約束、存儲過程、觸發器等高級功能,能滿足絕大多數應用的需求。
-
生態強大: 有大量的圖形化管理工具(如 phpMyAdmin, MySQL Workbench)、編程語言接口(PHP, Python, Java等)和開源項目(如 WordPress, Magento)都支持它。
-
社區支持: 擁有非常活躍的社區,遇到問題很容易找到解決方案。
MySQL 和 MariaDB 如何選擇?
對于絕大多數初學者和新項目來說,兩者幾乎沒有區別。它們的語法、命令、接口在基本層面是完全一致的。
-
選擇 MariaDB: 如果你更看重完全的開源精神、由社區主導而非商業公司,或者你使用的Linux發行版(如Debian, CentOS)默認就切換到了MariaDB。
-
選擇 MySQL: 如果你所處的公司或環境歷史悠久,一直使用Oracle旗下的MySQL,或者某些特定商業套件(如Oracle自己的產品線)對其有優化和支持。
好消息是:因為你學會了其中一個,就等同于學會了另一個。你的知識和SQL語句可以無縫遷移。
一、首先查看當前云服務器中是否有MySQL或MariaDB服務
ps axj|grep mysql
ps axj|grep mariadb
????????根據輸入命令的輸出結果,可以看到我這個服務器上沒有運行中的MySQL或MariaDB服務。MySQL 和 MariaDB 的服務目前都沒有啟動。
詳細解釋如下:
1、ps axj|grep mysql
?這個命令用于查找所有名稱中包含 "mysql" 的進程。
-
輸出結果中只有?
grep --color=auto mysql
?這一行,這恰恰是您剛才運行的?grep
?命令本身,而不是一個MySQL服務器進程。 -
這說明系統進程列表中沒有名為?
mysql
?或?mysqld
?的進程在運行。
2、ps axj|grep mariadb
?這個命令用于查找所有名稱中包含 "mariadb" 的進程。
-
同樣,輸出結果中只有?
grep --color=auto mariadb
?這一行,是您剛才運行的?grep
?命令本身。 -
這說明系統進程列表中沒有名為?
mariadb
?的進程在運行。
二、此時我們切換為超級用戶
su -
三、然后再停止運行中的MySQL或MariaDB服務
systemctl stop mysql
systemctl stop mariadb
因為我的云服務器并沒有運行中的MySQL或MariaDB服務,所以使用停止服務命令會輸出以下結果:
如果有運行中的MySQL或MariaDB服務的話,按照輸出提示的步驟走就可以了,停止相關服務后的查看結果如上所示。
四、檢查系統安裝包(dpkg -l | grep 名稱
命令)
? ? dpkg -l | grep 名稱
?這個在 Debian/Ubuntu 等 Linux 發行版中非常常用的命令組合。這個命令的主要作用是:列出所有已安裝的軟件包,并通過關鍵字過濾出你關心的那些。我們可以將這個命令拆解成兩個部分來理解:
1、第一部分:dpkg -l
-
dpkg
: 是 Debian 包管理系統的基礎命令工具,用于安裝、卸載、管理和查詢?.deb
?軟件包的信息。 -
-l
?(小寫 L): 是?--list
?的縮寫。這個選項的作用是列出當前系統上所有已安裝的軟件包。
當我們直接運行?dpkg -l
?時,它會輸出一個很長的列表,包含成千上萬個包。輸出的格式通常是這樣的:
-
第一列 (狀態標志): 最常見的是?
ii
。-
第一個?
i
: 表示期望狀態是“已安裝”。 -
第二個?
i
: 表示當前狀態是“已安裝”。 -
其他狀態如?
un
?(未知/未安裝),?rc
?(已卸載但配置文件還保留) 等。
-
-
第二列 (名稱): 軟件包的名稱。
-
第三列 (版本): 軟件包安裝的版本號。
-
第四列 (架構): 軟件包編譯的架構,如?
amd64
,?arm64
,?all
?等。 -
第五列 (描述): 軟件包的簡短描述。
2、第二部分:| grep 名稱
-
|
?(管道符): 這是 Linux 命令中一個極其重要的概念。它將前一個命令 (dpkg -l
) 的標準輸出,作為后一個命令 (grep 名稱
) 的標準輸入。簡單說,就是把?dpkg -l
?的結果傳遞給?grep
?去處理。 -
grep
: 是一個強大的文本搜索工具,它會在給定的文本中搜索匹配指定模式(字符串或正則表達式)的行。 -
名稱
: 這是你希望搜索的關鍵字。它可以是一個完整的軟件包名,也可以是名字的一部分。
3、命令組合:dpkg -l | grep 名稱
dpkg -l | grep 名稱
將兩者結合起來,這個命令的工作流程就是:
-
dpkg -l
?先執行,生成一個包含所有已安裝軟件包的列表。 -
這個列表通過管道?
|
?被送給?grep
?命令。 -
grep
?命令在這個長長的列表中,逐行搜索包含“名稱”這個關鍵字的行。 -
最終,只有那些包含“名稱”的行才會被顯示在終端上。
這樣做的巨大好處是:你不需要在成千上萬個軟件包中用眼睛去慢慢找,grep
?會幫你瞬間完成篩選。
4、與?rpm -qa
?命令的區別
????????需要注意的是,rpm -qa
?只適用于基于?RPM?包管理系統的發行版(如 Red Hat, CentOS, Fedora)。而dpkg -l
?命令適用于基于?Debian?的發行版(如 Ubuntu, Debian)。
5、簡單總結
命令 | 作用 | 適用系統 |
---|---|---|
rpm -qa | grep 名稱 | 查詢所有已安裝的RPM包,并過濾 | Red Hat, CentOS, Fedora等 |
dpkg -l | grep 名稱 | 列出所有已安裝的DEB包,并過濾 | Ubuntu, Debian等 |
????????所以,在ECS服務器上,我們需要先確定系統是CentOS(用?rpm
)還是Ubuntu(用?dpkg
),然后選擇正確的命令來檢查軟件包是否安裝。
6、檢查MySQL或MariaDB的系統安裝包
dpkg -l | grep mysql
dpkg -l | grep mariadb
詳細解釋
dpkg -l | grep mysql
?這個命令的作用是:
-
dpkg -l
:列出所有通過?apt
?或?dpkg
?方式安裝的軟件包。 -
grep mysql
:在上面的完整列表中,過濾出包含 "mysql"?關鍵詞的行。
沒有任何輸出,意味著:在系統所有已安裝的軟件包中,沒有任何一個軟件包的名稱里包含 "mysql"。因此,MySQL服務器和相關客戶端、庫等都沒有安裝。同理,dpkg -l | grep mariadb
?也沒有輸出,證明MariaDB也完全沒安裝。
總結當前狀態
-
進程:之前用?
ps
?命令查過,沒有運行中的MySQL/MariaDB進程。 -
軟件包:現在用?
dpkg
?命令確認,系統里根本沒有安裝MySQL/MariaDB軟件。
????????所以,這臺服務器是一個“干凈”的環境,需要自行安裝所需的數據庫。如果你的云服務器上運行該命令有相關的安裝包的話,則會列出所有已安裝的軟件包,否則就會像我這樣沒有輸出內容。
五、卸載這些默認安裝包
????????如果你的云服務器上運行該命令有相關的安裝包的話,則我們庫通過以下命令將已安裝的軟件包(卸載顯示出來的mariadb/mysql安裝包)一個一個卸載,不過有點慢:
sudo apt remove mariadb
sudo apt remove mysql
我們可以使用下面命令一次性把相關的安裝包給卸載掉:
dpkg -l | grep mysql | xargs apt -y remove
這是一個命令鏈,其最終目的是:卸載所有名稱中包含 "mysql" 字樣的已安裝軟件包。
????????警告!!!這是一個非常危險的操作(想要使用的話前提得要知道會造成什么樣的后果),請務必理解其后果后再執行!?它會移除所有匹配的包,可能會破壞依賴這些包的服務或應用程序(例如你的網站數據庫)。
分步講解
這個命令由三個部分通過管道 (|
) 連接而成,執行順序是從左到右:
1.?dpkg -l
-
作用:列出系統上所有已安裝的軟件包。
-
輸出:一個長長的列表,包含每個包的狀態、名稱、版本、架構和簡短描述。
2.?grep mysql
-
作用:從上一個命令 (
dpkg -l
) 的輸出中,過濾出所有包含 "mysql" 字符串的行。 -
輸出:所有名稱或描述中包含 "mysql" 的軟件包列表。例如,可能包括:
-
mysql-server-8.0
-
mysql-client-8.0
-
mysql-common
-
libmysqlclient21
-
等等...
-
3.?xargs apt -y remove
這是最關鍵和最危險的一步。
-
xargs
: 這個命令的作用是將上一個命令的輸出(即一系列包名)作為參數傳遞給后面指定的命令(這里是?apt -y remove
)。它相當于把?grep mysql
?得到的包名列表,一個一個地放到?apt remove
?后面。 -
apt -y remove
: 這是執行卸載操作的命令。-
apt
: 高級包管理工具。 -
remove
: 子命令,表示卸載軟件包。 -
-y
?或?--yes
: 自動回答 "yes" 以確認所有提示。這是導致命令自動運行、無需確認的關鍵選項,非常危險。
-
整個命令鏈的流程可以理解為:
-
獲取全部軟件包列表 ->
-
篩選出所有帶"mysql"的 ->
-
把這些包名傳給?
apt
?命令并自動執行卸載。
一個簡單的模擬示例
假設?dpkg -l | grep mysql
?的輸出是:
ii mysql-common-8.0 1:8.0.33-0ubuntu0.22.04.2 amd64 MySQL database common files
ii mysql-server-8.0 1:8.0.33-0ubuntu0.22.04.2 amd64 MySQL database server
xargs
?會獲取這兩行文本,并從中提取出包名(通常是每行的第二個字段),然后構造出這樣的命令并執行:
apt -y remove mysql-common-8.0 mysql-server-8.0
????????同理,mariadb也是一樣的卸載操作,可以一次性的卸載相關的安裝包!!!(后面只講解mysql的使用流程,mariadb也是同理的,具體步驟可以上面查相關操作)
卸載后的操作
ls /etc/mysql/my.cnf
ls /var/lib/mysql
????????第二個命令一般在卸載后使用,會列出一些安裝包的殘留文件,這是正常的。如果我們在卸載前需要這些配置文件的話,我們可以備份出來!!!下面是我的云服務器的情況,因為本來就沒有相關的安裝包,所以也就都是空的,毋容置疑。
六、獲取MySQL官方APT源
1、首先確認系統版本
cat /etc/os-release
2、下載MySQL APT配置倉庫包(兩種方式)
前提注意:最好安裝和自己系統一致的MySQL版本,否則可能會存在軟件兼容性問題
訪問MySQL :: Download MySQL APT Repository選擇適合您Ubuntu/Debian版本的配置包。
或者直接使用wget下載(以下以我的Ubuntu 20.04為例):
wget https://dev.mysql.com/get/mysql-apt-config_0.8.22-1_all.deb
3、安裝MySQL APT倉庫配置包
我以在官網界面中下載到本地電腦的桌面為例(第一種方式),然后上傳到云服務器上:
第一步:創建一個MySQL目錄,然后進到這個目錄中
第二步:rz命令
這里需要下載一下lrzsz軟件包,忘記了該用法的話可以移步到命令章節(我都忘了具體在哪了)
使用rz命令,從本地選中文件上傳到云服務器當前目錄文件夾中
我們可以看到當前目錄中已經出現了下載好的MySQL安裝包:
4、安裝MySQL APT源,對比前后APT源
1.?安裝前:查看現有的 APT 源列表
????????在安裝之前,先查看你當前的 APT 源列表(通常位于?/etc/apt/sources.list.d/
?目錄和?/etc/apt/sources.list
),確認沒有 MySQL 相關的源。
ls /etc/apt/sources.list.d/
cat /etc/apt/sources.list
1.?ls /etc/apt/sources.list.d/
?顯示:(空)這個目錄是空的,說明還沒有任何第三方軟件源被添加。
2.?cat /etc/apt/sources.list
?顯示:這里只有 Ubuntu 官方的基礎軟件源(通過華為云鏡像),沒有 MySQL 的軟件源。
當前狀態:
-
MySQL APT 源還沒有安裝
-
系統中只有基礎的 Ubuntu 軟件源
-
你需要先安裝 MySQL 的 APT 配置包
2.?安裝 MySQL APT 配置包
使用?dpkg
?來安裝你下載的?.deb
?包(確保你當前在包含該文件的目錄中):
sudo dpkg -i mysql-apt-config_0.8.34-1_all.deb
????????在安裝過程中,會彈出一個配置界面,讓你選擇 MySQL 版本和其他選項。如果你沒有特殊需求,直接選擇默認選項(OK)即可(通過上下鍵選擇,然后按Enter確定)。
3.?更新 APT 緩存
安裝完成后,更新 APT 緩存以獲取新的 MySQL 倉庫信息:
sudo apt update
4.?安裝后:檢查是否添加了 MySQL 的 APT 源
再次查看?/etc/apt/sources.list.d/
?目錄,應該會多出 MySQL 相關的源文件(例如?mysql.list
):
ls /etc/apt/sources.list.d/
cat /etc/apt/sources.list.d/mysql.list
從我們的輸出結果可以看到,MySQL APT 源已經成功添加了!
解讀輸出結果:
1.?ls /etc/apt/sources.list.d/
?顯示:這表示已經創建了 MySQL 的源列表文件。
mysql.list
2.?cat /etc/apt/sources.list.d/mysql.list
?顯示:
文件內容包含多個?deb
?和?deb-src
?行,指向 MySQL 官方倉庫:
-
http://repo.mysql.com/apt/ubuntu/
?- MySQL 官方 APT 倉庫 -
focal
?- Ubuntu 20.04 的代號 -
mysql-8.4-lts
?- MySQL 8.4 LTS 版本 -
mysql-tools
?- MySQL 工具包 -
mysql-apt-config
?- 配置包本身
文件開頭的注釋告訴我們:
"### THIS FILE IS AUTOMATICALLY CONFIGURED ###"
"Use command 'dpkg-reconfigure mysql-apt-config' as root for modifications."
這句話的意思是:
-
這個文件是自動配置的
-
如果你想修改 MySQL 的版本或其他配置選項,可以使用命令:
sudo dpkg-reconfigure mysql-apt-config
這會重新打開安裝時看到的配置界面,讓你選擇不同的 MySQL 版本或其他選項。
5.?(可選)安裝 MySQL
如果你需要立即安裝 MySQL,可以運行,但是我們不急,先放著:
sudo apt install mysql-server
5、看看能不能正常工作
使用下面的命令我們可以查看可用的 MySQL 相關包:
apt list | grep mysql
????????輸出相關的可用的 MySQL 相關包會刷屏,因為很多!!!輸出的第一句話的意思是:"警告:apt 沒有穩定的命令行界面。在腳本中使用時要小心。"
詳細解釋
-
這不是錯誤,只是一個警告信息(不用管)
-
apt 命令的設計初衷是給人交互使用的,不是給腳本編程使用的
-
apt 的命令行選項和輸出格式可能會在不同版本中發生變化,不適合用于自動化腳本
-
對于腳本編程,應該使用?
apt-get
?命令,它有穩定的接口
完成以上的動作后,當前目錄中的.deb文件我們可以刪除掉了,當然也可以不刪除:
七、安裝mysql服務
我們使用下面的命令安裝 MySQL 服務器:
sudo apt install mysql-server
八、查看配置文件和數據存儲位置
1、查看 MySQL 配置文件位置
ls /etc/mysql/
2、查看數據文件存儲位置
# Ubuntu 的 MySQL 數據默認存儲在 /var/lib/mysql
sudo ls /var/lib/mysql
3、查找 MySQL 相關可執行文件的安裝位置
which
?命令用于查找 MySQL 相關可執行文件的安裝位置,如下:
1.?which mysqld
??作用:查找 MySQL 服務器守護進程的安裝位置
📍?位置:/usr/sbin/mysqld
?- 這是 MySQL 服務器的主程序
2.?which mysql
??作用:查找 MySQL 客戶端命令的安裝位置
📍?位置:/usr/bin/mysql
?- 這是 MySQL 命令行客戶端工具
這些信息告訴你:
-
MySQL 已經成功安裝在系統中
-
服務器程序在?
/usr/sbin/mysqld
-
客戶端程序在?
/usr/bin/mysql
-
這些是標準的 Ubuntu 安裝路徑
相關的重要命令位置:
命令 | 路徑 | 作用 |
---|---|---|
mysqld | /usr/sbin/mysqld | MySQL 服務器主程序 |
mysql | /usr/bin/mysql | MySQL 命令行客戶端 |
mysqladmin | /usr/bin/mysqladmin | MySQL 管理工具 |
mysqldump | /usr/bin/mysqldump | MySQL 備份工具 |
我們可以進一步驗證:
# 查看 MySQL 服務器版本
/usr/sbin/mysqld --version# 查看 MySQL 客戶端版本
/usr/bin/mysql --version# 或者直接使用(因為已經在 PATH 中)
mysql --version
mysqld --version
這些輸出確認了 MySQL 已經正確安裝并在系統的可執行路徑中!
九、啟動和查看 MySQL 服務
1、啟動 MySQL 服務
sudo systemctl start mysql.service
或者簡寫:
sudo systemctl start mysql
2、查看 MySQL 服務狀態
sudo systemctl status mysql
3、設置開機自啟
sudo systemctl enable mysql
4、查看 MySQL 進程
ps axj | grep mysqld
或者更詳細地查看:
ps aux | grep mysql
注意:在 Ubuntu 中,MySQL 的服務名稱是?mysql
?而不是 CentOS 中的?mysqld
。這是因為在 Ubuntu 中,服務名稱通常與軟件包名稱保持一致。
為了查看MySQL服務存在,我們也可以使用下面的命令(后面會學到)查看MySQL的網絡服務端口號:
netstat -nltp
十、登錄方法
1、登錄方法一【獲取臨時密碼】
# 查看臨時密碼(Ubuntu 中日志文件位置可能不同)
sudo grep 'temporary password' /var/log/mysql/error.log
或者嘗試:
sudo cat /var/log/mysql/error.log | grep "temporary password"
不過一般現在的MySQL已經不支持這種方式了(我的就不行),如果你的使用這種方法可行的話,你就可以使用臨時密碼登錄:
mysql -uroot -p
然后我們如果想改密碼的話可以根據下面簡單操作一下(了解即可,可以先不修改密碼):
-- 首先查看當前的密碼驗證組件(MySQL 8.0+ 方式不同)
SHOW VARIABLES LIKE 'validate_password%';-- 如果存在驗證插件,先降低要求(MySQL 5.7)
SET GLOBAL validate_password_policy = 0;
SET GLOBAL validate_password_length = 1;-- 或者直接卸載驗證插件(如果需要)
UNINSTALL PLUGIN validate_password;-- 修改 root 密碼
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密碼';
FLUSH PRIVILEGES;
1. 查看密碼驗證組件
SHOW VARIABLES LIKE 'validate_password%';
作用:查看當前 MySQL 的密碼驗證策略配置
輸出示例:
Variable_name | Value |
validate_password_check_user_name | OFF |
validate_password_dictionary_file | |
validate_password_length | 8 |
validate_password_mixed_case_count | 1 |
validate_password_number_count | 1 |
validate_password_policy | MEDIUM |
validate_password_special_char_count | 1 |
關鍵參數說明:
-
validate_password_policy
:密碼策略強度(LOW, MEDIUM, STRONG) -
validate_password_length
:密碼最小長度 -
validate_password_number_count
:至少需要的數字數量 -
validate_password_mixed_case_count
:至少需要的大小寫字母數量 -
validate_password_special_char_count
:至少需要的特殊字符數量
2. 降低密碼要求(MySQL 5.7)
SET GLOBAL validate_password_policy = 0;
SET GLOBAL validate_password_length = 1;
作用:
-
第一句:將密碼策略設為最低(0=LOW,1=MEDIUM,2=STRONG)
-
第二句:將密碼最小長度設為1
注意:這樣設置后,密碼要求會變得非常寬松,適合測試環境。
3. 卸載密碼驗證插件
UNINSTALL PLUGIN validate_password;
作用:完全移除密碼復雜度驗證功能
使用場景:
-
當你覺得密碼驗證太麻煩時
-
僅推薦在測試環境中使用
-
生產環境不建議這樣做,因為會降低安全性
4. 修改 root 密碼
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密碼';
FLUSH PRIVILEGES;
作用:
-
第一句:修改 root 用戶的密碼
-
第二句:刷新權限,使修改立即生效
MySQL 5.7 vs MySQL 8.0+ 的區別:
MySQL 5.7:
-- 修改密碼
SET PASSWORD = PASSWORD('你的新密碼');
-- 或
UPDATE mysql.user SET authentication_string = PASSWORD('你的新密碼') WHERE User = 'root';
MySQL 8.0+:
-- 修改密碼(推薦方式)
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密碼';-- 或者先創建用戶再設置密碼
CREATE USER 'root'@'localhost' IDENTIFIED BY '密碼';
2、如果找不到臨時密碼,嘗試方法二【直接登錄】(我的這個可以)
????????最新版 MySQL 安裝后,root 賬戶默認沒有臨時密碼。你可以直接嘗試以空密碼方式登錄客戶端。 首先使用下面登錄命令,然后彈出輸入密碼提示,直接回車(Enter)就可以登錄了:
# 新版本 MySQL 可能沒有密碼
sudo mysql -u root
登錄成功后的MySQL服務是這樣的,如下(我的這個可以):
輸入quit可以退出MySQL登錄:
或者:
mysql -u root -p
# 直接按回車(如果密碼為空)
3、登錄方法三【使用 skip-grant-tables】
如果以上方法都不行,我們可以嘗試下面的方法:
# 首先要停止 MySQL 服務,否則不會生效
sudo systemctl stop mysql
# 編輯 MySQL 配置文件(Ubuntu 中的路徑不同)
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
在?[mysqld]
?下面添加:
skip-grant-tables
然后:
# 重啟 MySQL 服務
sudo systemctl start mysql# 無需密碼登錄
sudo mysql -u root
登錄后重置密碼(重置密碼的操作可以上網查閱,因為太多太雜了):(經過之前我們的登錄信息,可以看到我們的版本是MySQL 8.0+,我們就使用下面8.0+的操作)
-- 先刷新權限
FLUSH PRIVILEGES;-- 修改密碼(MySQL 5.7 和 8.0+ 語法不同)
-- MySQL 5.7:
UPDATE mysql.user SET authentication_string = PASSWORD('你的新密碼') WHERE User = 'root';-- MySQL 8.0+:
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密碼';FLUSH PRIVILEGES;
-
FLUSH PRIVILEGES;
?- 刷新系統權限 -
執行具體的密碼修改語句(語法因版本而異)
-
FLUSH PRIVILEGES;
?- 再次刷新系統權限,使更改生效
4、相較于Centos,Ubuntu的重要區別
-
日志文件路徑:Ubuntu 中通常是?
/var/log/mysql/error.log
-
配置文件路徑:Ubuntu 中通常是?
/etc/mysql/mysql.conf.d/mysqld.cnf
-
服務名稱:Ubuntu 中是?
mysql
?而不是?mysqld
5、完成后記得
# 移除 skip-grant-tables 選項
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf# 重啟服務
sudo systemctl restart mysql
????????在 Ubuntu 上,新安裝的 MySQL 通常 root 用戶是通過?auth_socket
?插件認證的,可以直接用?sudo mysql
?登錄而不需要密碼,如下:
十一、設置 MySQL 開機啟動(可以不設置)
1、設置 MySQL 開機啟動
sudo systemctl enable mysql
2、重新加載 systemd 配置
sudo systemctl daemon-reload
3、Ubuntu 與 CentOS 的對比
操作 | CentOS | Ubuntu |
---|---|---|
設置開機啟動 | systemctl enable mysqld | sudo systemctl enable mysql |
重新加載配置 | systemctl daemon-reload | sudo systemctl daemon-reload |
服務名稱 | mysqld | mysql |
4、完整的服務管理命令
# 設置開機啟動
sudo systemctl enable mysql# 禁用開機啟動
sudo systemctl disable mysql# 查看是否已設置開機啟動
sudo systemctl is-enabled mysql# 重新加載 systemd 配置(通常在修改服務文件后需要)
sudo systemctl daemon-reload
5、驗證設置結果
# 檢查服務狀態
sudo systemctl status mysql
# 檢查是否啟用開機啟動
systemctl list-unit-files | grep mysql
6、注意
-
在 Ubuntu 中,服務名稱是?
mysql
?而不是 CentOS 中的?mysqld
-
使用?
sudo
?權限是因為修改系統服務需要管理員權限(root) -
daemon-reload
?通常在修改服務配置文件后才需要,單純啟用服務通常不需要
建議:即使標記為"可以不設",在生產環境中建議設置開機啟動,確保服務器重啟后 MySQL 能自動恢復服務。但是云服務器是永遠都不關閉的,所以這個命令設不設置都沒問題。
十二、配置 MySQL 配置文件
1、Ubuntu 中 MySQL 配置文件的路徑
# 主要的配置文件路徑
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
# 或者查看所有配置文件
ls /etc/mysql/
2、配置字符編碼和存儲引擎
編輯配置文件:
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
在?[mysqld]
?部分添加以下配置:
3、配置完成后重啟 MySQL
sudo systemctl restart mysql
netstat -nltp
我們使用上面的命令查看發現端口號變成了3306:
4、驗證配置是否生效
# 登錄 MySQL
mysql -u root -p
# 查看字符集設置
SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';
# 查看存儲引擎
SHOW VARIABLES LIKE 'default_storage_engine';
5、重要說明
-
使用?
utf8mb4
?而不是?utf8
,因為?utf8mb4
?支持完整的 Unicode(包括表情符號) -
Ubuntu 中配置文件是分散的,主要修改?
mysqld.cnf
-
配置完成后必須重啟 MySQL 服務才能生效
-
建議同時配置服務器端和客戶端的字符集
這樣配置后,你的 MySQL 數據庫就能正確支持中文和其他 Unicode 字符了。