MySQL安裝全攻略:包管理器與手動(dòng)安裝詳解)
1. 項(xiàng)目概述與核心價(jià)值在服務(wù)器運(yùn)維和開(kāi)發(fā)環(huán)境搭建的日常工作中數(shù)據(jù)庫(kù)的部署幾乎是繞不開(kāi)的一環(huán)。而MySQL作為最流行的開(kāi)源關(guān)系型數(shù)據(jù)庫(kù)之一其安裝過(guò)程看似簡(jiǎn)單實(shí)則暗藏玄機(jī)。很多新手甚至是有一定經(jīng)驗(yàn)的開(kāi)發(fā)者在初次接觸Linux環(huán)境下的MySQL安裝時(shí)常常會(huì)卡在某個(gè)步驟比如權(quán)限問(wèn)題、服務(wù)啟動(dòng)失敗或是版本沖突。網(wǎng)上教程雖多但要么過(guò)于簡(jiǎn)略要么只講一種方法遇到問(wèn)題就束手無(wú)策。今天我就結(jié)合自己多年在CentOS和Ubuntu等主流Linux發(fā)行版上反復(fù)折騰的經(jīng)驗(yàn)為你拆解兩種最主流、最可靠的MySQL安裝方法通過(guò)系統(tǒng)包管理器安裝和通過(guò)官方二進(jìn)制包手動(dòng)安裝。這兩種方法各有優(yōu)劣適用于不同的場(chǎng)景。通過(guò)這篇詳細(xì)的教程你不僅能順利完成安裝更能理解每一步背后的邏輯下次再遇到問(wèn)題你就能自己排查了。無(wú)論你是剛接觸Linux的新手還是想鞏固基礎(chǔ)的老手這篇內(nèi)容都能讓你有所收獲。2. 兩種安裝方法的核心思路與選型考量在Linux上安裝軟件尤其是像MySQL這樣的核心服務(wù)選擇哪種安裝方式直接關(guān)系到后續(xù)的維護(hù)成本、升級(jí)路徑和系統(tǒng)穩(wěn)定性。我們不能盲目地“復(fù)制粘貼”命令得先搞清楚為什么。2.1 方法一系統(tǒng)包管理器安裝以Yum/DNF和APT為例這是最推薦新手和大多數(shù)生產(chǎn)環(huán)境使用的方法。簡(jiǎn)單來(lái)說(shuō)就是利用Linux發(fā)行版自帶的軟件倉(cāng)庫(kù)來(lái)安裝。比如在CentOS/RHEL及其衍生版上用yum或dnf在Debian/Ubuntu上用apt。為什么選擇它自動(dòng)化與依賴管理包管理器會(huì)自動(dòng)處理所有依賴關(guān)系。MySQL運(yùn)行需要libaio、numactl等庫(kù)手動(dòng)安裝很容易遺漏而包管理器會(huì)一并幫你裝好。集成系統(tǒng)服務(wù)安裝完成后會(huì)自動(dòng)生成systemd服務(wù)單元文件如mysqld.service你可以用熟悉的systemctl start mysqld來(lái)管理服務(wù)開(kāi)機(jī)自啟也只需一條命令。官方倉(cāng)庫(kù)的穩(wěn)定性發(fā)行版官方倉(cāng)庫(kù)中的MySQL版本通常是經(jīng)過(guò)充分測(cè)試、與當(dāng)前系統(tǒng)版本兼容性最好的一個(gè)長(zhǎng)期支持版本追求的是穩(wěn)定而非最新。統(tǒng)一的升級(jí)路徑后續(xù)系統(tǒng)更新時(shí)可以通過(guò)yum update或apt upgrade統(tǒng)一升級(jí)MySQL及其依賴管理起來(lái)非常方便。它的局限性是什么主要在于版本不夠新。官方倉(cāng)庫(kù)的更新往往滯后于MySQL官方發(fā)布。如果你需要特定的小版本如MySQL 8.0.33或想嘗鮮最新特性這個(gè)方法就不太適合。2.2 方法二官方二進(jìn)制包TAR Archive手動(dòng)安裝這種方法是從MySQL官網(wǎng)下載編譯好的二進(jìn)制壓縮包解壓到指定目錄然后手動(dòng)進(jìn)行配置和初始化。為什么選擇它版本控制絕對(duì)自由你可以下載官網(wǎng)上的任何一個(gè)版本從最新的GA版本到歷史版本完全自主選擇。安裝位置靈活你可以將MySQL安裝到任何有權(quán)限的目錄比如/opt/mysql、/usr/local/mysql這對(duì)于有嚴(yán)格目錄規(guī)劃的環(huán)境非常有用。多實(shí)例部署方便在同一臺(tái)機(jī)器上運(yùn)行多個(gè)不同版本的MySQL實(shí)例時(shí)手動(dòng)安裝的方式隔離性更好配置起來(lái)更清晰。深入理解架構(gòu)通過(guò)手動(dòng)安裝你會(huì)被迫去了解MySQL的數(shù)據(jù)目錄、配置文件、日志文件、啟動(dòng)腳本等核心組件的布局和作用是深入學(xué)習(xí)的好機(jī)會(huì)。它的挑戰(zhàn)是什么過(guò)程繁瑣一切手動(dòng)。你需要自己創(chuàng)建用戶組、配置環(huán)境變量、編寫啟動(dòng)腳本、管理依賴庫(kù)。任何一個(gè)步驟出錯(cuò)都可能導(dǎo)致服務(wù)無(wú)法啟動(dòng)。它更適合對(duì)Linux系統(tǒng)有一定了解且有特定版本或定制化需求的管理員。注意對(duì)于絕大多數(shù)尋求快速部署、穩(wěn)定運(yùn)行的場(chǎng)景優(yōu)先選擇方法一包管理器安裝。本教程將先詳細(xì)講解方法一確保你能快速成功再深入方法二滿足你的進(jìn)階需求。3. 核心細(xì)節(jié)解析與前置準(zhǔn)備在開(kāi)始敲命令之前做好準(zhǔn)備工作能避免一半的麻煩。這里有幾個(gè)關(guān)鍵點(diǎn)無(wú)論你用哪種方法都需要先處理。3.1 系統(tǒng)環(huán)境確認(rèn)與舊版本清理首先用cat /etc/os-release確認(rèn)你的Linux發(fā)行版和版本號(hào)。這決定了你后續(xù)要使用的包管理命令。最重要的一步檢查并卸載舊版本MySQL或MariaDB。版本沖突是安裝失敗的頭號(hào)殺手。MariaDB是MySQL的一個(gè)流行分支兩者的包和文件會(huì)沖突。# 在CentOS/RHEL系統(tǒng)上檢查 rpm -qa | grep -E mysql|mariadb # 在Debian/Ubuntu系統(tǒng)上檢查 dpkg -l | grep -E mysql|mariadb如果發(fā)現(xiàn)有已安裝的包需要徹底卸載。以CentOS為例卸載命令可能如下# 停止服務(wù) sudo systemctl stop mysqld sudo systemctl stop mariadb # 卸載包 sudo yum remove mysql* mariadb* -y # 刪除殘留數(shù)據(jù)和配置文件謹(jǐn)慎操作這會(huì)刪除所有數(shù)據(jù)庫(kù) sudo rm -rf /var/lib/mysql sudo rm -rf /etc/my.cnf /etc/my.cnf.d /etc/mysql在Ubuntu上使用apt purge命令可以同時(shí)刪除軟件包和配置文件。實(shí)操心得/var/lib/mysql是默認(rèn)的數(shù)據(jù)目錄卸載包不會(huì)刪除它。如果你是在測(cè)試環(huán)境重裝刪除它可以得到一個(gè)“干凈”的狀態(tài)。但如果是生產(chǎn)環(huán)境有舊數(shù)據(jù)務(wù)必先備份備份命令可以用mysqldump或者直接打包整個(gè)目錄。3.2 MySQL版本選擇策略訪問(wèn)MySQL官方下載頁(yè)面你會(huì)看到多個(gè)版本MySQL Community Server我們使用的免費(fèi)開(kāi)源版本。版本號(hào)如8.0, 5.7。8.0是當(dāng)前主流性能和安全特性更強(qiáng)5.7依然穩(wěn)定部分老應(yīng)用兼容性更好。新手無(wú)腦選8.0。發(fā)布狀態(tài)選擇“General Availability (GA)”版本這是穩(wěn)定版。避免使用“Development”或“RC”版本。對(duì)于包管理器安裝版本由倉(cāng)庫(kù)決定。對(duì)于手動(dòng)安裝你需要在官網(wǎng)找到對(duì)應(yīng)你系統(tǒng)架構(gòu)通常是x86_64的“Linux - Generic”二進(jìn)制包。4. 方法一實(shí)操通過(guò)系統(tǒng)包管理器安裝MySQL這是最流暢的安裝路徑。我們分發(fā)行版進(jìn)行。4.1 在CentOS/RHEL 7/8/9上安裝從CentOS 7開(kāi)始默認(rèn)的倉(cāng)庫(kù)里沒(méi)有MySQL只有MariaDB。因此我們需要先添加MySQL官方的Yum倉(cāng)庫(kù)。步驟1添加MySQL官方Y(jié)um倉(cāng)庫(kù)去MySQL官網(wǎng)找到“MySQL Yum Repository”的安裝包鏈接。以MySQL 8.0為例通常可以用wget下載。# 1. 下載倉(cāng)庫(kù)安裝包 sudo wget https://dev.mysql.com/get/mysql80-community-release-el7-11.noarch.rpm # 注意上面的el7對(duì)應(yīng)CentOS 7如果是CentOS 8應(yīng)替換為el8。 # 2. 安裝倉(cāng)庫(kù)包 sudo rpm -ivh mysql80-community-release-el7-11.noarch.rpm安裝成功后你會(huì)在/etc/yum.repos.d/目錄下看到mysql-community.repo等文件。這個(gè)文件里定義了多個(gè)子倉(cāng)庫(kù)如8.0, 5.7, 6.0。默認(rèn)會(huì)啟用最新GA系列如8.0。如果你想安裝5.7需要編輯這個(gè)文件禁用8.0倉(cāng)庫(kù)啟用5.7倉(cāng)庫(kù)。步驟2安裝MySQL服務(wù)器# 安裝MySQL服務(wù)器、客戶端和一些常用工具 sudo yum install mysql-community-server -y這個(gè)命令會(huì)安裝mysql-community-server、mysql-community-client以及它們的所有依賴。步驟3啟動(dòng)MySQL服務(wù)并設(shè)置開(kāi)機(jī)自啟# 啟動(dòng)服務(wù) sudo systemctl start mysqld # 查看服務(wù)狀態(tài)確認(rèn)是否運(yùn)行正常 sudo systemctl status mysqld # 設(shè)置開(kāi)機(jī)自啟 sudo systemctl enable mysqld如果狀態(tài)顯示active (running)恭喜你MySQL服務(wù)已經(jīng)跑起來(lái)了。步驟4獲取初始臨時(shí)密碼并修改MySQL 8.0在首次啟動(dòng)后會(huì)為root用戶生成一個(gè)臨時(shí)隨機(jī)密碼并記錄在日志文件中。# 查看日志過(guò)濾出包含temporary password的行 sudo grep temporary password /var/log/mysqld.log輸出類似2023-10-27T03:12:34.123456Z 6 [Note] [MY-010454] [Server] A temporary password is generated for rootlocalhost: JqslT8a!hZw步驟5運(yùn)行安全配置向?qū)Р⑿薷膔oot密碼使用上一步得到的臨時(shí)密碼登錄但注意這個(gè)密碼無(wú)法執(zhí)行任何操作必須立即修改。# 使用臨時(shí)密碼登錄 mysql -uroot -p # 輸入臨時(shí)密碼 # 登錄后立即修改root密碼。MySQL 8.0有密碼強(qiáng)度策略。 ALTER USER rootlocalhost IDENTIFIED BY YourNewStrongPassword123!; # 注意密碼必須包含大小寫字母、數(shù)字和特殊字符長(zhǎng)度通常至少8位。 # 退出 exit;更推薦的做法是運(yùn)行mysql_secure_installation腳本它會(huì)交互式地引導(dǎo)你完成一系列安全設(shè)置修改root密碼。移除匿名用戶。禁止root遠(yuǎn)程登錄生產(chǎn)環(huán)境建議。刪除測(cè)試數(shù)據(jù)庫(kù)。重新加載權(quán)限表。sudo mysql_secure_installation跟著提示一步步操作即可。4.2 在Ubuntu/Debian上安裝在Ubuntu 20.04/22.04等新版本上默認(rèn)倉(cāng)庫(kù)可能包含MySQL但為了確保版本和來(lái)源同樣建議添加官方倉(cāng)庫(kù)。步驟1添加MySQL官方APT倉(cāng)庫(kù)# 1. 下載倉(cāng)庫(kù)配置包 wget https://dev.mysql.com/get/mysql-apt-config_0.8.24-1_all.deb # 版本號(hào)請(qǐng)以官網(wǎng)最新為準(zhǔn) # 2. 安裝配置包會(huì)彈出一個(gè)文本界面讓你選擇MySQL版本 sudo dpkg -i mysql-apt-config_0.8.24-1_all.deb在彈出來(lái)的界面中用方向鍵選擇“Ok”確認(rèn)即可默認(rèn)會(huì)選中最新的MySQL 8.0。步驟2更新本地軟件包索引并安裝# 更新索引 sudo apt update # 安裝MySQL服務(wù)器 sudo apt install mysql-server -y在安裝過(guò)程中可能會(huì)彈出一個(gè)對(duì)話框讓你設(shè)置root用戶的密碼。新版本Ubuntu的MySQL安裝包可能采用了新的認(rèn)證插件有時(shí)不會(huì)提示設(shè)置密碼而是使用auth_socket插件允許系統(tǒng)用戶通過(guò)socket免密登錄。這需要后續(xù)調(diào)整。步驟3管理服務(wù)# 啟動(dòng)服務(wù) sudo systemctl start mysql # Ubuntu上服務(wù)名通常是mysql而不是mysqld # 查看狀態(tài) sudo systemctl status mysql # 開(kāi)機(jī)自啟 sudo systemctl enable mysql步驟4初始安全配置針對(duì)可能未設(shè)密碼的情況如果安裝時(shí)未提示設(shè)置密碼可以這樣操作# 使用sudo權(quán)限登錄MySQL此時(shí)可能不需要密碼 sudo mysql進(jìn)入MySQL后執(zhí)行以下SQL來(lái)設(shè)置root密碼并切換認(rèn)證方式-- 查看當(dāng)前root用戶的認(rèn)證插件 SELECT user, host, plugin FROM mysql.user WHERE user root; -- 通常plugin是auth_socket。我們需要修改它并設(shè)置密碼。 ALTER USER rootlocalhost IDENTIFIED WITH mysql_native_password BY YourNewStrongPassword123!; FLUSH PRIVILEGES; exit;之后就可以用mysql -uroot -p和剛設(shè)置的密碼登錄了。同樣也強(qiáng)烈建議運(yùn)行sudo mysql_secure_installation進(jìn)行安全加固。5. 方法二實(shí)操通過(guò)官方二進(jìn)制包手動(dòng)安裝MySQL假設(shè)我們需要在/opt目錄下安裝MySQL 8.0.36。步驟1下載并解壓二進(jìn)制包# 切換到臨時(shí)目錄下載包 cd /tmp wget https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.36-linux-glibc2.28-x86_64.tar.xz # 注意請(qǐng)根據(jù)實(shí)際需要去官網(wǎng)復(fù)制正確的鏈接版本和glibc版本要匹配你的系統(tǒng)。 # 解壓到/opt目錄 sudo tar -xvf mysql-8.0.36-linux-glibc2.28-x86_64.tar.xz -C /opt # 創(chuàng)建軟鏈接方便管理 cd /opt sudo ln -s mysql-8.0.36-linux-glibc2.28-x86_64 mysql現(xiàn)在MySQL的文件就在/opt/mysql目錄下了。步驟2創(chuàng)建系統(tǒng)用戶和組并修改目錄權(quán)限為了安全MySQL不應(yīng)該以root身份運(yùn)行。# 創(chuàng)建mysql用戶組和用戶并禁止其登錄shell sudo groupadd mysql sudo useradd -r -g mysql -s /bin/false mysql # 進(jìn)入MySQL安裝目錄更改所有文件屬主 cd /opt/mysql sudo chown -R mysql:mysql .步驟3初始化數(shù)據(jù)目錄MySQL需要一個(gè)空的數(shù)據(jù)目錄來(lái)初始化系統(tǒng)數(shù)據(jù)庫(kù)。# 創(chuàng)建數(shù)據(jù)目錄通常放在/opt/mysql/data你也可以選擇其他位置如/var/lib/mysql sudo mkdir -p /opt/mysql/data sudo chown -R mysql:mysql /opt/mysql/data # 初始化數(shù)據(jù)庫(kù) sudo ./bin/mysqld --initialize --usermysql --basedir/opt/mysql --datadir/opt/mysql/data關(guān)鍵點(diǎn)初始化命令會(huì)生成root用戶的臨時(shí)密碼務(wù)必在輸出信息的最后幾行找到它并記錄下來(lái)格式類似[Note] [MY-010454] [Server] A temporary password is generated for rootlocalhost: JqslT8a!hZw步驟4配置MySQL服務(wù)我們需要?jiǎng)?chuàng)建配置文件(my.cnf)和系統(tǒng)服務(wù)文件。創(chuàng)建配置文件sudo vim /etc/my.cnf寫入基本配置[mysqld] usermysql basedir/opt/mysql datadir/opt/mysql/data socket/tmp/mysql.sock port3306 # 字符集設(shè)置避免中文亂碼 character-set-serverutf8mb4 collation-serverutf8mb4_unicode_ci [mysql] default-character-setutf8mb4 [client] socket/tmp/mysql.sock創(chuàng)建Systemd服務(wù)文件sudo vim /etc/systemd/system/mysqld.service寫入以下內(nèi)容[Unit] DescriptionMySQL Server Afternetwork.target [Service] Typesimple Usermysql Groupmysql ExecStart/opt/mysql/bin/mysqld --defaults-file/etc/my.cnf LimitNOFILE5000 Restarton-failure RestartSec10 [Install] WantedBymulti-user.target步驟5啟動(dòng)服務(wù)并修改root密碼# 重新加載systemd配置 sudo systemctl daemon-reload # 啟動(dòng)MySQL服務(wù) sudo systemctl start mysqld # 查看狀態(tài) sudo systemctl status mysqld # 使用初始化時(shí)的臨時(shí)密碼登錄 /opt/mysql/bin/mysql -uroot -p -S /tmp/mysql.sock # 登錄后立即修改密碼 ALTER USER rootlocalhost IDENTIFIED BY YourNewStrongPassword123!; FLUSH PRIVILEGES; exit;步驟6設(shè)置環(huán)境變量可選但建議為了方便在任何位置使用mysql命令可以將/opt/mysql/bin加入PATH。echo export PATH/opt/mysql/bin:$PATH ~/.bashrc source ~/.bashrc現(xiàn)在你就可以直接使用mysql -uroot -p命令了因?yàn)槲覀冊(cè)趍y.cnf里配置了socket路徑。6. 安裝后的通用配置與優(yōu)化無(wú)論用哪種方法安裝成功以下幾步都能讓你的MySQL更好用、更安全。6.1 配置遠(yuǎn)程連接按需默認(rèn)情況下MySQL只允許本地(localhost)連接。如果需要從其他服務(wù)器訪問(wèn)需要授權(quán)。警告生產(chǎn)環(huán)境請(qǐng)謹(jǐn)慎開(kāi)啟并設(shè)置強(qiáng)密碼和限定IP。-- 使用root登錄MySQL后 -- 創(chuàng)建一個(gè)允許遠(yuǎn)程連接的用戶示例用戶名為remoteuser密碼為StrongPass!允許從192.168.1.%網(wǎng)段連接 CREATE USER remoteuser192.168.1.% IDENTIFIED BY StrongPass!; -- 授予所有數(shù)據(jù)庫(kù)的所有權(quán)限根據(jù)實(shí)際情況縮小權(quán)限范圍 GRANT ALL PRIVILEGES ON *.* TO remoteuser192.168.1.% WITH GRANT OPTION; -- 刷新權(quán)限 FLUSH PRIVILEGES;如果想讓root也能遠(yuǎn)程連接不推薦-- 查看root用戶的host SELECT user, host FROM mysql.user WHERE userroot; -- 通常root的host是localhost??梢詣?chuàng)建一個(gè)新的root記錄或修改現(xiàn)有記錄極不推薦。 UPDATE mysql.user SET host% WHERE userroot; FLUSH PRIVILEGES;修改后還需要確認(rèn)MySQL配置文件/etc/my.cnf或/etc/mysql/mysql.conf.d/mysqld.cnf中bind-address不是127.0.0.1而是0.0.0.0或服務(wù)器的具體IP。6.2 基礎(chǔ)性能調(diào)優(yōu)參數(shù)對(duì)于剛安裝的MySQL可以調(diào)整幾個(gè)關(guān)鍵參數(shù)以適應(yīng)你的機(jī)器配置。編輯my.cnf文件位置可能在/etc/my.cnf或/etc/mysql/mysql.conf.d/mysqld.cnf。[mysqld] # 緩沖池大小對(duì)于專用數(shù)據(jù)庫(kù)服務(wù)器通常設(shè)置為系統(tǒng)內(nèi)存的50%-70% innodb_buffer_pool_size 1G # 連接數(shù)相關(guān) max_connections 200 # 交互式和非交互式連接超時(shí)時(shí)間秒 interactive_timeout 300 wait_timeout 300 # 日志 # 慢查詢?nèi)罩居糜谂挪樾阅軉?wèn)題 slow_query_log 1 slow_query_log_file /var/log/mysql/mysql-slow.log long_query_time 2修改配置后需要重啟MySQL服務(wù)生效sudo systemctl restart mysqld。7. 常見(jiàn)問(wèn)題與排查技巧實(shí)錄即使按照教程一步步來(lái)也可能會(huì)遇到問(wèn)題。這里記錄了幾個(gè)我踩過(guò)的坑和解決方法。7.1 服務(wù)啟動(dòng)失敗權(quán)限問(wèn)題現(xiàn)象執(zhí)行systemctl start mysqld后systemctl status mysqld顯示失敗查看日志sudo journalctl -xe或sudo tail -f /var/log/mysqld.log發(fā)現(xiàn)大量Permission denied或Cannot create directory錯(cuò)誤。原因MySQL數(shù)據(jù)目錄如/var/lib/mysql或日志目錄的屬主、權(quán)限不對(duì)。手動(dòng)安裝時(shí)chown命令沒(méi)執(zhí)行到位包管理器安裝時(shí)可能因?yàn)闅埩粑募?dǎo)致。解決停止服務(wù)sudo systemctl stop mysqld確保數(shù)據(jù)目錄及其所有父目錄的屬主是mysql:mysqlsudo chown -R mysql:mysql /var/lib/mysql # 如果是手動(dòng)安裝的目錄比如/opt/mysql/data sudo chown -R mysql:mysql /opt/mysql/data確保目錄權(quán)限是750或755sudo chmod -R 750 /var/lib/mysql如果是SELinuxCentOS/RHEL導(dǎo)致的問(wèn)題可以嘗試暫時(shí)禁用SELinux對(duì)MySQL的限制生產(chǎn)環(huán)境需謹(jǐn)慎sudo setenforce 0永久解決需要調(diào)整SELinux策略sudo semanage fcontext -a -t mysqld_db_t /var/lib/mysql(/.*)?然后sudo restorecon -Rv /var/lib/mysql。7.2 忘記root密碼這是最常見(jiàn)的問(wèn)題之一。解決步驟停止MySQL服務(wù)sudo systemctl stop mysqld以跳過(guò)權(quán)限檢查的方式啟動(dòng)MySQLsudo mysqld_safe --skip-grant-tables --skip-networking 或者對(duì)于systemd管理的服務(wù)更安全的方式是修改服務(wù)啟動(dòng)參數(shù)sudo systemctl edit mysqld在打開(kāi)的編輯器中加入[Service] ExecStart/usr/sbin/mysqld --skip-grant-tables --skip-networking然后重啟服務(wù)sudo systemctl daemon-reload sudo systemctl restart mysqld無(wú)密碼登錄mysql -u root清空root密碼MySQL 5.7和8.0略有不同MySQL 5.7:UPDATE mysql.user SET authentication_string PASSWORD(你的新密碼) WHERE User root;MySQL 8.0:ALTER USER rootlocalhost IDENTIFIED BY 你的新密碼; -- 如果上面報(bào)錯(cuò)可以先清空密碼字段 UPDATE mysql.user SET authentication_string WHERE User root; FLUSH PRIVILEGES; exit; -- 然后重啟服務(wù)到正常模式再運(yùn)行ALTER USER語(yǔ)句。刷新權(quán)限并退出FLUSH PRIVILEGES; exit;恢復(fù)正常模式并重啟服務(wù)將之前添加的--skip-grant-tables參數(shù)移除然后重啟MySQLsudo systemctl restart mysqld。7.3 安裝后無(wú)法登錄提示“Access denied”可能原因1密碼錯(cuò)誤。仔細(xì)檢查密碼注意大小寫。臨時(shí)密碼可能包含容易混淆的字符如l和1O和0。可能原因2密碼強(qiáng)度不符合要求。MySQL 8.0有默認(rèn)的密碼策略。如果你設(shè)置的密碼太簡(jiǎn)單即使ALTER USER語(yǔ)句執(zhí)行成功下次登錄也可能失敗??梢耘R時(shí)降低密碼策略等級(jí)來(lái)設(shè)置一個(gè)簡(jiǎn)單密碼僅用于測(cè)試環(huán)境-- 查看當(dāng)前密碼策略 SHOW VARIABLES LIKE validate_password%; -- 臨時(shí)修改策略先設(shè)置一個(gè)復(fù)雜密碼再修改策略再改簡(jiǎn)單密碼 SET GLOBAL validate_password.policy LOW; SET GLOBAL validate_password.length 4; -- 然后再修改密碼 ALTER USER rootlocalhost IDENTIFIED BY 簡(jiǎn)單密碼;可能原因3用戶主機(jī)限制。root用戶默認(rèn)只允許從localhost連接。如果你在用IP或主機(jī)名連接需要授權(quán)。7.4 端口沖突或無(wú)法遠(yuǎn)程連接檢查端口是否監(jiān)聽(tīng)sudo netstat -tlnp | grep 3306。如果看不到0.0.0.0:3306或:::3306的監(jiān)聽(tīng)說(shuō)明MySQL沒(méi)監(jiān)聽(tīng)在所有接口上。檢查防火墻CentOS/RHEL (firewalld):sudo firewall-cmd --permanent --add-port3306/tcp sudo firewall-cmd --reloadUbuntu/Debian (ufw):sudo ufw allow 3306/tcp sudo ufw reload檢查MySQL綁定地址確認(rèn)my.cnf中bind-address配置。如果是127.0.0.1則只監(jiān)聽(tīng)本地??梢愿臑?.0.0.0監(jiān)聽(tīng)所有IP或服務(wù)器的具體IP。7.5 手動(dòng)安裝后mysql命令找不到這是因?yàn)闆](méi)有將MySQL的bin目錄加入系統(tǒng)的PATH環(huán)境變量。解決方法有兩個(gè)臨時(shí)使用絕對(duì)路徑/opt/mysql/bin/mysql -uroot -p創(chuàng)建軟鏈接到系統(tǒng)路徑sudo ln -s /opt/mysql/bin/mysql /usr/local/bin/mysql sudo ln -s /opt/mysql/bin/mysqldump /usr/local/bin/mysqldump # 其他常用命令同理將目錄加入用戶環(huán)境變量如前面步驟6所述。8. 兩種方法對(duì)比與最終選擇建議為了讓你更直觀地做出選擇我把兩種方法的核心差異和適用場(chǎng)景總結(jié)成了下表特性維度包管理器安裝 (Yum/APT)手動(dòng)安裝 (二進(jìn)制包)安裝復(fù)雜度極低幾條命令搞定高需手動(dòng)執(zhí)行十多個(gè)步驟依賴管理自動(dòng)解決無(wú)需操心手動(dòng)處理需自行安裝libaio等版本選擇受限于倉(cāng)庫(kù)通常不是最新完全自由可安裝任意官方版本安裝位置固定遵循FHS如/usr/bin,/var/lib/mysql高度靈活可安裝到任何目錄服務(wù)管理集成Systemdsystemctl命令管理需手動(dòng)配置服務(wù)文件或使用mysqld_safe升級(jí)維護(hù)簡(jiǎn)單yum update/apt upgrade一鍵完成復(fù)雜需手動(dòng)下載新包遷移數(shù)據(jù)目錄多實(shí)例部署困難需要復(fù)雜配置相對(duì)容易目錄隔離清晰學(xué)習(xí)價(jià)值低適合快速部署高能深入理解MySQL文件結(jié)構(gòu)和啟動(dòng)流程推薦場(chǎng)景絕大多數(shù)場(chǎng)景特別是生產(chǎn)環(huán)境、新手入門特定需求需要特定版本、定制化路徑、學(xué)習(xí)研究、多實(shí)例最終建議如果你是初學(xué)者或者希望快速搭建一個(gè)穩(wěn)定、易于維護(hù)的MySQL環(huán)境毫不猶豫地選擇包管理器安裝。它省時(shí)省力社區(qū)支持好遇到問(wèn)題也更容易搜索到解決方案。如果你需要精確控制MySQL版本比如為了兼容某個(gè)老應(yīng)用或者計(jì)劃在一臺(tái)服務(wù)器上部署多個(gè)MySQL實(shí)例又或者你想徹底搞懂MySQL的每一部分是如何組織起來(lái)的那么手動(dòng)安裝是你的不二之選。這個(gè)過(guò)程雖然繁瑣但走一遍之后你對(duì)MySQL的理解會(huì)深刻得多。我個(gè)人在管理幾十臺(tái)服務(wù)器的經(jīng)驗(yàn)是95%的情況下都用包管理器安裝。只有那5%需要特定版本或做深度定制時(shí)才會(huì)去手動(dòng)安裝。記住技術(shù)選型的首要原則是“合適”而不是“高級(jí)”。先把服務(wù)穩(wěn)定地跑起來(lái)再去追求那些高級(jí)特性。希望這篇超過(guò)五千字的詳細(xì)拆解能幫你掃清Linux上安裝MySQL的所有障礙。如果在實(shí)際操作中遇到本教程沒(méi)覆蓋的問(wèn)題歡迎在評(píng)論區(qū)交流我們一起排查。