戰(zhàn)指南)
實(shí)驗(yàn)室或自學(xué)數(shù)據(jù)庫(kù)最繞不開(kāi)的一件事就是裝 MySQL。而“Windows 環(huán)境 MySQL 5.5”這個(gè)組合對(duì)于很多還在上課、或者正在跑老舊項(xiàng)目的同學(xué)來(lái)說(shuō)又是每周都要面對(duì)的場(chǎng)景。我見(jiàn)過(guò)很多人在這一步卡住——下載鏈接找不到、安裝過(guò)程突然回滾、服務(wù)啟動(dòng)失敗、字符集亂碼甚至裝了三次都進(jìn)不去 MySQL 命令行最后干脆卸載重裝系統(tǒng)。其實(shí)問(wèn)題不難只是多數(shù)教程只講了“下一步下一步”沒(méi)講清楚每一步到底在干什么以及出了問(wèn)題該去哪查。這篇內(nèi)容我打算從下載版本開(kāi)始把 MySQL 5.5 在 Windows 上的完整安裝、配置向?qū)Ю锏拿總€(gè)選項(xiàng)含義、服務(wù)啟停與客戶端登錄驗(yàn)證、常見(jiàn)故障排查以及實(shí)驗(yàn)場(chǎng)景里用得上的 my.ini 進(jìn)階調(diào)整全部按我實(shí)際操作過(guò)的順序?qū)懸槐?。適合剛開(kāi)數(shù)據(jù)庫(kù)課的學(xué)生、準(zhǔn)備補(bǔ)環(huán)境的老項(xiàng)目開(kāi)發(fā)者以及在機(jī)房電腦上折騰安裝包的人參考。我盡量寫得像旁邊有人手把手帶一樣遇到問(wèn)題直接對(duì)著章節(jié)找就行。1. 安裝前的準(zhǔn)備與版本選擇1.1 為什么實(shí)驗(yàn)環(huán)境還在用 MySQL 5.5現(xiàn)在官方最新版本已經(jīng)到了 8.x很多教程也默認(rèn)推薦 8.0。但高校數(shù)據(jù)庫(kù)實(shí)驗(yàn)、計(jì)算機(jī)等級(jí)考試題庫(kù)、部分企業(yè)內(nèi)部老系統(tǒng)仍然大量使用 5.5 或 5.6 作為指定版本。原因很簡(jiǎn)單教材例題用的是 5.5 時(shí)代的語(yǔ)法課程考核要求的就是這一版的兼容行為同時(shí)不少舊系統(tǒng)的存儲(chǔ)過(guò)程、分區(qū)表、字符集設(shè)置都基于 5.5 構(gòu)建拿 8.0 去跑會(huì)出現(xiàn)兼容性差異。所以在這里我不會(huì)勸你“換新版”而是按實(shí)驗(yàn)要求把 5.5 在 Windows 上穩(wěn)穩(wěn)裝好。需要提前說(shuō)明一點(diǎn)MySQL 5.5 官方已經(jīng)停止更新維護(hù)如果機(jī)器能聯(lián)網(wǎng)做一般學(xué)習(xí)建議搭建在隔離的虛擬機(jī)或?qū)嶒?yàn)網(wǎng)段中不用于生產(chǎn)環(huán)境和公網(wǎng)暴露。裝完之后不要把 root 密碼設(shè)成空密碼或弱密碼哪怕只是本機(jī)實(shí)驗(yàn)也要保持基本安全意識(shí)。1.2 下載與安裝包選型MySQL 5.5 時(shí)代的 Windows 安裝包有兩種常見(jiàn)形式一種是 msi 圖形化安裝包文件名類似mysql-5.5.62-win32.msi或mysql-5.5.62-winx64.msi另一種是 zip 免安裝壓縮包需要手工初始化數(shù)據(jù)和配置。實(shí)驗(yàn)場(chǎng)景推薦用 msi 安裝包因?yàn)樗詭?MySQL Instance Configuration Wizard可以一步步配置實(shí)例對(duì)新手友好出錯(cuò)概率低。選 32 位還是 64 位主要看你電腦上的是 Windows 10/11 64 位系統(tǒng)還是機(jī)房老舊的 32 位系統(tǒng)。檢查方式很簡(jiǎn)單右鍵“此電腦”選“屬性”查看系統(tǒng)類型。只要是 64 位系統(tǒng)盡量安裝 winx64 版本如果系統(tǒng)是 32 位就只能選 win32 版本。這個(gè)不要搞混否則即使勉強(qiáng)裝上底層服務(wù)也會(huì)報(bào)錯(cuò)。提示下載時(shí)記得選mysql-5.5.62這個(gè)最終維護(hù)版本。它修復(fù)了大量 5.5 早期版本的已知問(wèn)題比 5.5.28 或 5.5.45 之類穩(wěn)定得多。若你手頭教材指定的是 5.5.x 某個(gè)具體小版本也建議優(yōu)先找 x.62 或 5.5.58 之后的版本行為差異幾乎可以忽略。1.3 安裝前的環(huán)境檢查與殘留清理裝數(shù)據(jù)庫(kù)之前先把系統(tǒng)環(huán)境清理干凈能省掉后續(xù)大量莫名其妙的問(wèn)題。這里我的建議按順序做三件事徹底卸載已存在的 MySQL 殘留。如果你以前裝過(guò) 5.0、5.1 或 5.7但沒(méi)有卸載干凈會(huì)有舊服務(wù)名沖突、注冊(cè)表殘留、C:\Program Files\MySQL舊目錄殘留等問(wèn)題。卸載時(shí)不僅要通過(guò)控制面板或設(shè)置里的“程序和功能”卸載還要打開(kāi)命令提示符管理員權(quán)限執(zhí)行sc query mysql如果顯示存在服務(wù)再執(zhí)行sc delete mysql手動(dòng)刪除服務(wù)。同時(shí)檢查C:\Documents and Settings\All Users\Application Data\MySQL或C:\ProgramData\MySQL目錄把殘留的數(shù)據(jù)文件移走或備份。關(guān)閉或暫停實(shí)時(shí)殺毒、安全防護(hù)軟件。安裝過(guò)程中的服務(wù)注冊(cè)和文件寫入有時(shí)會(huì)被安全軟件攔截導(dǎo)致安裝到最后一步回滾。這個(gè)不是玄學(xué)我遇到過(guò)不止一次尤其 360、電腦管家這類軟件在“防護(hù)模式”下會(huì)把 mysqld.exe 的服務(wù)啟動(dòng)動(dòng)作攔下。安裝期間臨時(shí)退出即可裝完再開(kāi)啟然后把 MySQL 安裝目錄加入白名單。確認(rèn)本機(jī)未占用 3306 端口。MySQL 5.5 默認(rèn)監(jiān)聽(tīng) 3306 端口。如果你機(jī)器上裝過(guò)其他數(shù)據(jù)庫(kù)比如 MariaDB、騰訊云數(shù)據(jù)庫(kù)客戶端組件可能會(huì)搶占這端口。檢查方法是執(zhí)行命令netstat -ano | findstr 3306如果看到LISTENING狀態(tài)和對(duì)應(yīng) PID說(shuō)明端口已被占用。把占用進(jìn)程找出來(lái)確認(rèn)是不是舊 MySQL 或相關(guān)監(jiān)控服務(wù)。對(duì)于自己裝的未知進(jìn)程可以用任務(wù)管理器定位 PID 后結(jié)束然后再次確認(rèn)端口狀態(tài)。完成以上檢查后再雙擊 msi 安裝包。如果提示需要.NET Framework或C 運(yùn)行庫(kù)按提示裝好即可。順手還得注意安裝 msi 文件時(shí) Windows 會(huì)彈 UAC 授權(quán)一定要選“是”否則寫不到 Program Files 目錄。2. 安裝過(guò)程與配置向?qū)е痦?xiàng)解讀2.1 安裝流程與目錄選擇msi 安裝包的引導(dǎo)流程比較固定歡迎頁(yè) → 選擇安裝類型 → 自定義安裝路徑 → 確認(rèn)安裝 → 安裝完成 → 啟動(dòng)配置向?qū)?。這里重點(diǎn)說(shuō)一下安裝類型和路徑。安裝類型有三種類型適用場(chǎng)景特點(diǎn)Typical典型大多數(shù)單機(jī)學(xué)習(xí)安裝常用組件速度快占用小Complete完全需要全部工具和組件包含調(diào)試符號(hào)、開(kāi)發(fā)庫(kù)、嵌入式庫(kù)等Custom自定義需要手動(dòng)控制組件與路徑可去掉無(wú)用組件指定安裝目錄和數(shù)據(jù)目錄我在實(shí)驗(yàn)機(jī)上通常選 Custom這樣可以把安裝目錄從默認(rèn)的C:\Program Files\MySQL\改成不含空格的路徑比如D:\MySQL\MySQL Server 5.5。之所以推薦不帶空格路徑是因?yàn)楹竺婧芏嗯渲梦募?、命令行工具、環(huán)境變量操作碰到空格路徑時(shí)如果命令忘了加引號(hào)就會(huì)報(bào)找不到文件的錯(cuò)誤。很多教程沒(méi)提這一點(diǎn)但在實(shí)驗(yàn)室環(huán)境下路徑空格造成的麻煩非常常見(jiàn)。組件方面除了默認(rèn)的MySQL Server和Client Programs如果課程實(shí)驗(yàn)涉及 C 語(yǔ)言 API 連接可以額外勾選C Include Files / Lib Files。如果只是日常 SQL 練習(xí)和用 Navicat 之類的客戶端保持默認(rèn)組件即可。安裝路徑選擇完成后點(diǎn)擊 Install進(jìn)度條走完就能進(jìn)入配置向?qū)?。注意安裝完成不等于配置完成服務(wù)還沒(méi)有真正出現(xiàn)所以不要急著打開(kāi)命令行去敲mysql先把配置向?qū)芡辍?.2 配置向?qū)Ш诵倪x項(xiàng)詳解MySQL 5.5 安裝完成后會(huì)在最后一步彈出MySQL Instance Configuration Wizard這一步是整個(gè)流程的重頭戲我挑最關(guān)鍵的幾個(gè)選項(xiàng)詳細(xì)說(shuō)配置類型向?qū)?huì)讓你選Standard Configuration或Detailed Configuration。我建議選 Detailed不要偷懶。標(biāo)準(zhǔn)配置雖然快但自動(dòng)把字符集、InnoDB 緩沖池等參數(shù)都按默認(rèn)值寫死后續(xù)實(shí)驗(yàn)容易遇到中文亂碼和表引擎問(wèn)題。Detailed 模式下可以自己控制每一步都有意義。服務(wù)器類型Developer Machine開(kāi)發(fā)機(jī)內(nèi)存占用小適合開(kāi)發(fā)調(diào)試。Server Machine服務(wù)器中等內(nèi)存占用適合充當(dāng)局域網(wǎng)數(shù)據(jù)庫(kù)服務(wù)。Dedicated MySQL Server Machine專用服務(wù)器幾乎把所有可用內(nèi)存給 InnoDB 緩沖池不適合普通實(shí)驗(yàn)機(jī)器。實(shí)驗(yàn)機(jī)上我一般選 Developer Machine。如果你的虛擬機(jī)內(nèi)存只給了 2G也建議選這個(gè)避免數(shù)據(jù)庫(kù)啟動(dòng)后內(nèi)存過(guò)高導(dǎo)致系統(tǒng)卡頓。InnoDB 表空間設(shè)置這里要指定 InnoDB 表空間文件的位置。默認(rèn)情況下InnoDB 表空間文件會(huì)生成在 MySQL 數(shù)據(jù)目錄中的ibdata1文件中。如果你沒(méi)有特別規(guī)劃保持默認(rèn)即可。但我個(gè)人習(xí)慣是在 Detailed Configuration 中把InnoDB Tablespace Settings的路徑指到獨(dú)立目錄比如D:\MySQL\InnoDB Datafiles。這樣做的好處是以后如果系統(tǒng)盤空間滿了或者需要整體遷移數(shù)據(jù)庫(kù)文件不需要?jiǎng)酉到y(tǒng)盤和注冊(cè)表直接把獨(dú)立目錄復(fù)制走就能遷移。并發(fā)連接數(shù)向?qū)?huì)問(wèn)Decision Support (DSS)/OLAP還是Online Transaction Processing (OLTP)。實(shí)驗(yàn)環(huán)境選哪個(gè)都行對(duì)性能影響不明顯。這里有個(gè)隱性參數(shù)max_connections會(huì)被同時(shí)寫入 my.ini默認(rèn)是 100夠?qū)嶒?yàn)用了。不需要刻意調(diào)大。字符集選擇這一步是很多人容易踩坑的地方。Windows 下 MySQL 5.5 安裝向?qū)е蠧haracter Set有三個(gè)選項(xiàng)Standard Character Set默認(rèn) latin1。Best Support For Multilingualism使用 UTF-8。Manual Selected Default Character Set / Collation手動(dòng)指定。實(shí)驗(yàn)練習(xí)中如果要存中文一定要選第二項(xiàng) UTF-8或者第三項(xiàng)手動(dòng)指定utf8和utf8_general_ci。如果你選了默認(rèn) latin1后面建表時(shí)忘了寫DEFAULT CHARSETutf8插入中文就會(huì)報(bào)錯(cuò)或顯示亂碼而且這種錯(cuò)誤藏在運(yùn)行階段排查起來(lái)比安裝報(bào)錯(cuò)難受得多。注意MySQL 5.5 中的 utf8 實(shí)際是 utf8mb3只支持基本多語(yǔ)言平面字符。但實(shí)驗(yàn)場(chǎng)景基本不會(huì)用到 emoji 和生僻字能正確存儲(chǔ)中文即可。如果后續(xù)需要完整的四字節(jié) UTF-8 支持就得考慮升級(jí)到 5.7 以上版本5.5 本身沒(méi)有這個(gè)能力。Windows 選項(xiàng)與網(wǎng)絡(luò)設(shè)置這一步需要勾選Install As Windows Service服務(wù)名默認(rèn)是MySQL55。勾選Launch the MySQL Server automatically這樣電腦開(kāi)機(jī)后服務(wù)自動(dòng)啟動(dòng)實(shí)驗(yàn)時(shí)直接能用。如果你不想開(kāi)機(jī)自啟可以去掉這個(gè)勾選之后手動(dòng)用net start mysql55啟動(dòng)。下面的Include Bin Directory in Windows PATH建議勾上。勾上之后命令行里直接敲mysql -uroot -p就能進(jìn)入客戶端不用每次跑到安裝目錄的 bin 下找文件。這個(gè)選項(xiàng)能省很多事實(shí)驗(yàn)課上老師敲命令你就跟著敲不需要先 cd 一大串路徑。安全選項(xiàng)配置向?qū)?huì)讓你設(shè)置 root 密碼同時(shí)可以選擇Enable root access from remote machines和Create An Anonymous Account。實(shí)驗(yàn)環(huán)境建議設(shè)為空密碼嗎我明確建議不要空密碼。很多教材里寫“root 密碼設(shè)為 root”或“設(shè)為 123456”但如果你在機(jī)房電腦操作旁邊同學(xué)也能連你的服務(wù)空密碼等于裸奔。設(shè)一個(gè)你記得住的密碼例如root123或123456只用于實(shí)驗(yàn)環(huán)境其實(shí)無(wú)傷大雅但千萬(wàn)注意不要把這種密碼用到任何真實(shí)生產(chǎn)環(huán)境。兩個(gè)額外選項(xiàng)里Enable root access from remote machines如果不做遠(yuǎn)程連接實(shí)驗(yàn)就不要勾選。勾選后 MySQL 會(huì)自動(dòng)把 root 的 host 從 localhost 改為 %方便遠(yuǎn)程訪問(wèn)但安全性下降。Create An Anonymous Account更是沒(méi)必要實(shí)驗(yàn)不需要匿名訪問(wèn)。全部設(shè)置完成后向?qū)?huì)把這些配置寫進(jìn)my.ini然后自動(dòng)初始化數(shù)據(jù)目錄、安裝服務(wù)、啟動(dòng)服務(wù)??吹紺onfiguration completed successfully提示安裝才真正完成。3. 服務(wù)驗(yàn)證與客戶端環(huán)境配置3.1 服務(wù)啟動(dòng)狀態(tài)與命令行登錄驗(yàn)證安裝完成后先確認(rèn)服務(wù)是否真的在跑。使用管理員權(quán)限打開(kāi)命令提示符執(zhí)行net start | findstr mysql或者直接sc query mysql55如果狀態(tài)是RUNNING說(shuō)明服務(wù)啟動(dòng)成功如果是STOPPED則是配置階段啟動(dòng)失敗或手動(dòng)設(shè)置未啟動(dòng)需要執(zhí)行net start mysql55啟動(dòng)成功后測(cè)試命令行登錄。由于我們?cè)谂渲弥泄催x了 PATH 路徑直接輸入mysql -uroot -p輸入密碼后進(jìn)入mysql提示符就說(shuō)明安裝徹底成功。在客戶端里執(zhí)行SELECT VERSION(); SHOW VARIABLES LIKE character_set_server;能看到版本號(hào) 5.5.62以及字符集為 utf8就非常穩(wěn)了。等到這里整個(gè)安裝配置鏈路已經(jīng)打通剩下的就是根據(jù)數(shù)據(jù)庫(kù)課程進(jìn)度建庫(kù)建表做實(shí)驗(yàn)。3.2 環(huán)境變量與 my.ini 路徑補(bǔ)充說(shuō)明如果安裝時(shí)沒(méi)勾選Include Bin Directory in Windows PATH或者你裝完后把安裝包二次移動(dòng)過(guò)就需要手工配置環(huán)境變量。右鍵“此電腦” → “屬性” → “高級(jí)系統(tǒng)設(shè)置” → “環(huán)境變量”在系統(tǒng)變量里找到Path把 MySQL 的bin目錄加進(jìn)去例如D:\MySQL\MySQL Server 5.5\bin。注意要加分號(hào)分隔或者點(diǎn)擊“新建”逐條添加Windows 10/11 下都是可視化操作不用手寫分號(hào)。配置完成后重新打開(kāi)命令提示符輸入mysql --version可以看到版本信息。my.ini 默認(rèn)在安裝目錄下比如D:\MySQL\MySQL Server 5.5\my.ini或者可能在C:\Program Files\MySQL\MySQL Server 5.5\下。它是 MySQL 服務(wù)的核心配置文件。實(shí)驗(yàn)需要調(diào)整參數(shù)時(shí)不要直接雙擊用記事本改完就完事改完必須重啟服務(wù)net stop mysql55 net start mysql55如果不重啟修改不會(huì)生效。另外一定記得先備份原始 my.ini用copy my.ini my.ini.bak這種方式留一個(gè)副本。我見(jiàn)過(guò)學(xué)員把my.ini改崩了導(dǎo)致服務(wù)起不來(lái)最后只能卸載重裝的場(chǎng)面?zhèn)浞菸募辽倌茏屇阋环昼娀貪L。3.3 驗(yàn)證實(shí)驗(yàn)環(huán)境完整性的幾個(gè)腳本思路裝完 MySQL 后不要急著關(guān)窗口建議順手做一個(gè)十分鐘左右的驗(yàn)證實(shí)驗(yàn)確認(rèn)整個(gè)環(huán)境可以支撐后續(xù)課程。我每次在新環(huán)境裝完數(shù)據(jù)庫(kù)都會(huì)執(zhí)行下面這套簡(jiǎn)單例程CREATE DATABASE IF NOT EXISTS testdb DEFAULT CHARACTER SET utf8; USE testdb; CREATE TABLE student ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) NOT NULL, score DECIMAL(5,2) ) ENGINEInnoDB DEFAULT CHARSETutf8; INSERT INTO student(name, score) VALUES (張三, 88.5), (李四, 92.0); SELECT * FROM student;看到中文正常顯示、數(shù)據(jù)能插入能查詢就說(shuō)明字符集、InnoDB 引擎、自增主鍵等基礎(chǔ)能力都沒(méi)問(wèn)題。這個(gè)驗(yàn)證過(guò)程很重要它相當(dāng)于把后續(xù)常見(jiàn)實(shí)驗(yàn)操作先走了一遍好過(guò)等到正式實(shí)驗(yàn)才發(fā)現(xiàn)裝的有問(wèn)題再返工。4. 常見(jiàn)問(wèn)題與排查技巧實(shí)錄4.1 安裝過(guò)程常見(jiàn)報(bào)錯(cuò)對(duì)照表這部分我直接把碰過(guò)的問(wèn)題整理成速查表方便對(duì)著處理問(wèn)題現(xiàn)象常見(jiàn)原因處理方法安裝到最后一步回滾殺毒軟件攔截服務(wù)安裝退出安全軟件后重新安裝不行就先卸載殘留再裝配置向?qū)o(wú)法啟動(dòng)安裝了其他 MySQL 版本未清理用sc query查看舊服務(wù)sc delete刪除3306 端口被占用舊 MariaDB 或其他軟件占用netstat -ano服務(wù)啟動(dòng)后自動(dòng)停止my.ini 配置錯(cuò)誤或數(shù)據(jù)目錄權(quán)限異常查看C:\Program Files\MySQL\MySQL Server 5.5\data\下的.err日志文件mysql命令不是內(nèi)部或外部命令PATH 未配置手工添加 bin 目錄到系統(tǒng)環(huán)境變量重新打開(kāi)命令行登錄時(shí)密碼錯(cuò)誤密碼記錯(cuò)或密碼字段 host 不匹配使用跳過(guò)授權(quán)表方式重置密碼見(jiàn)下文插入中文變成問(wèn)號(hào)庫(kù)表或服務(wù)端字符集為 latin1把 my.ini 中默認(rèn)字符集改為 utf8重啟服務(wù)重建表這幾種情況里最棘手的是服務(wù)啟動(dòng)后自動(dòng)停止。這個(gè)問(wèn)題看起來(lái)嚇人其實(shí)大部分原因是 mysqld 進(jìn)程讀配置時(shí)遇到無(wú)法理解的參數(shù)或者數(shù)據(jù)目錄初始化失敗。先看日志文件是最直接的定位方式。日志文件位置通常就在數(shù)據(jù)目錄下文件名以主機(jī)名命名后綴是.err。用記事本打開(kāi)后搜索error關(guān)鍵字比如常見(jiàn)的[ERROR] MySQL cannot start because the my.ini file is not found或[ERROR] InnoDB: Unable to lock ./ibdata1前者是路徑問(wèn)題后者是已有 MySQL 進(jìn)程占用文件需要先結(jié)束進(jìn)程或重啟機(jī)器??吹骄唧w報(bào)錯(cuò)再去處理效率比亂改配置高很多。4.2 root 密碼遺忘的重置流程實(shí)驗(yàn)機(jī)經(jīng)常是公用的今天你設(shè)了個(gè)密碼下周別人可能改了 root 密碼或者你自己忘了。別一著急就重裝系統(tǒng)5.5 版本有一個(gè)經(jīng)典的重置方法跳過(guò)權(quán)限表啟動(dòng)服務(wù)。操作步驟如下停止原有 MySQL 服務(wù)net stop mysql55以跳過(guò)授權(quán)表方式啟動(dòng) mysqld。打開(kāi)另一個(gè)管理員命令行執(zhí)行mysqld --skip-grant-tables此時(shí)會(huì)看到命令行窗口停在啟動(dòng)日志狀態(tài)不要關(guān)它。再開(kāi)一個(gè)新的命令行窗口直接無(wú)密碼登錄mysql -uroot執(zhí)行 SQL 重置密碼。注意 5.5 的 user 表中 password 字段是加密字符串UPDATE mysql.user SET Password PASSWORD(需要設(shè)置的新密碼) WHERE User root AND Host localhost; FLUSH PRIVILEGES;關(guān)掉mysqld --skip-grant-tables所在的命令行窗口然后重新執(zhí)行net start mysql55用新密碼登錄驗(yàn)證。這個(gè)方法在 5.5 上是穩(wěn)的但要注意跳過(guò)授權(quán)表時(shí)整個(gè)庫(kù)沒(méi)有任何訪問(wèn)控制操作時(shí)不能聯(lián)網(wǎng)對(duì)外開(kāi)放端口操作完一定記得恢復(fù)服務(wù)。機(jī)房電腦操作時(shí)尤其要注意旁邊人趁你窗口開(kāi)著直接連庫(kù)就麻煩了。4.3 改變安裝目錄后配置文件索引不到的坑如果你把 MySQL 裝在 D 盤但服務(wù)啟動(dòng)時(shí)仍然去找 C 盤路徑十有八九是在安裝階段選了默認(rèn)目錄然后手工移動(dòng)了安裝文件夾。MySQL 5.5 的 my.ini 中路徑相關(guān)配置默認(rèn)寫的是絕對(duì)路徑比如basedirC:/Program Files/MySQL/MySQL Server 5.5/ datadirC:/Program Files/MySQL/MySQL Server 5.5/data/一旦你手動(dòng)把整個(gè)目錄搬到 D 盤這些路徑全部失效服務(wù)就起不來(lái)。解決辦法有兩個(gè)一是改 my.ini 里的 basedir 和 datadir 指向新路徑然后用管理員命令行重新安裝服務(wù)mysqld --install mysql55 --defaults-fileD:\MySQL\MySQL Server 5.5\my.ini二是卸載重裝在 Custom 安裝步驟直接改安裝路徑。我建議在正式實(shí)驗(yàn)前先規(guī)劃好目錄不要裝完再搬。如果已經(jīng)搬了按上面方式修改并重新注冊(cè)服務(wù)大概率能救回來(lái)。4.4 字符集相關(guān)的一次實(shí)戰(zhàn)排障記錄我記得有一次學(xué)員在 Windows 10 上裝完 5.5建庫(kù)時(shí)指定了utf8但插數(shù)據(jù)時(shí)中文全部變成???。檢查character_set_server變量發(fā)現(xiàn)是 utf8看庫(kù)的默認(rèn)字符集也是 utf8看起來(lái)沒(méi)問(wèn)題但數(shù)據(jù)就是不對(duì)。后來(lái)排查發(fā)現(xiàn)他插入用的命令提示符窗口是 GBK 編碼客戶端連接時(shí)沒(méi)有設(shè)定編碼。Windows 下 cmd 窗口默認(rèn)代碼頁(yè)是 936GBK而 MySQL 客戶端和服務(wù)器之間的字符集如果沒(méi)有經(jīng)過(guò)顯式指定容易在傳輸過(guò)程中發(fā)生轉(zhuǎn)換錯(cuò)誤。解決辦法有兩種一是在 mysql 命令行中先執(zhí)行SET NAMES gbk;然后再插入數(shù)據(jù)二是把命令提示符的代碼頁(yè)切換到 UTF-8執(zhí)行chcp 65001后重新打開(kāi) mysql。實(shí)驗(yàn)場(chǎng)景更穩(wěn)妥的做法是寫 SQL 腳本文件時(shí)以 UTF-8 編碼保存然后用以下方式執(zhí)行腳本mysql -uroot -p --default-character-setutf8 D:\scripts\test.sql這樣能最大程度避免 Windows 控制臺(tái)編碼帶來(lái)的中文問(wèn)題。以后再遇到中文亂碼先別急著改 my.ini先查客戶端連接字符集和服務(wù)端字符集的匹配情況這一步能省很多時(shí)間。5. 實(shí)驗(yàn)場(chǎng)景的 my.ini 進(jìn)階配置建議5.1 五分鐘定位 my.ini 中常用參數(shù)配置向?qū)懗龅?my.ini 一般已經(jīng)能跑但它為了兼容性有很多參數(shù)沒(méi)有顯式寫出用的是編譯期默認(rèn)值。做數(shù)據(jù)庫(kù)實(shí)驗(yàn)時(shí)有些默認(rèn)值反而會(huì)影響效果展示。比如sql_modeMySQL 5.5 默認(rèn)相對(duì)寬松不檢查太多嚴(yán)格約束這對(duì)跑教材例題是好事但如果課程要求理解 NOT NULL、DEFAULT 和 ZEROFILL 約束寬松模式其實(shí)會(huì)讓你看不出一些報(bào)錯(cuò)??梢栽?my.ini 的[mysqld]段增加sql_mode STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION這樣插入非法數(shù)據(jù)時(shí)會(huì)直接報(bào)錯(cuò)而不是自動(dòng)截?cái)嗷蛱钅J(rèn)值實(shí)驗(yàn)效果更清晰。常用參數(shù)我用表格列出來(lái)方便查閱參數(shù)名作用建議設(shè)置port服務(wù)監(jiān)聽(tīng)端口默認(rèn) 3306除非沖突否則別改basedir安裝根目錄指向真實(shí)安裝路徑datadir數(shù)據(jù)文件目錄單獨(dú)規(guī)劃目錄方便備份遷移character-set-server服務(wù)端默認(rèn)字符集設(shè)置為 utf8collation-server服務(wù)端默認(rèn)排序規(guī)則utf8_general_cidefault-storage-engine默認(rèn)存儲(chǔ)引擎實(shí)驗(yàn)建議設(shè)置為 InnoDBmax_connections最大連接數(shù)實(shí)驗(yàn) 100 夠用skip-grant-tables跳過(guò)權(quán)限驗(yàn)證僅在排障時(shí)用平時(shí)必須注釋或刪除5.2 開(kāi)啟常規(guī)日志與慢查詢?nèi)罩镜挠^察方法數(shù)據(jù)庫(kù)課程到后面會(huì)涉及索引優(yōu)化、慢查詢分析MySQL 5.5 默認(rèn)不開(kāi)日志直接做實(shí)驗(yàn)看不出執(zhí)行差異。建議在 my.ini 中這樣配置[mysqld] general_log ON general_log_file D:/MySQL/MySQL Server 5.5/data/mysql_general.log slow_query_log ON slow_query_log_file D:/MySQL/MySQL Server 5.5/data/mysql_slow.log long_query_time 1general_log開(kāi)啟后會(huì)記錄每條 SQL適合觀察 JDBC 或客戶端實(shí)際發(fā)出的語(yǔ)句slow_query_log則記錄超過(guò) 1 秒的查詢。實(shí)驗(yàn)做完記得把general_log關(guān)掉或改成 OFF否則日志文件增長(zhǎng)很快不僅占磁盤還會(huì)影響服務(wù)效率。這個(gè)習(xí)慣在以后做真實(shí)項(xiàng)目運(yùn)維時(shí)也一樣適用別把所有調(diào)試開(kāi)關(guān)長(zhǎng)期開(kāi)著。注意general_log輸出路徑中的斜杠方向建議寫成/或\\不要寫單個(gè)\否則部分版本解析路徑時(shí)容易出錯(cuò)。同時(shí)目錄必須已經(jīng)存在MySQL 不會(huì)自動(dòng)創(chuàng)建日志目錄。5.3 內(nèi)存參數(shù)調(diào)整的小心機(jī)在實(shí)驗(yàn)機(jī)上把 InnoDB 緩沖池調(diào)得過(guò)大反而會(huì)拖慢整機(jī)。5.5 中相關(guān)參數(shù)是innodb_buffer_pool_size默認(rèn)在配置向?qū)У?Developer Machine 類型下通常為 16M 到 64M。如果你的實(shí)驗(yàn)機(jī)器內(nèi)存有 4G 以上可以適當(dāng)調(diào)整為 256M讓大數(shù)據(jù)量查詢的執(zhí)行計(jì)劃示范更順暢如果只有 2G保持默認(rèn)即可。調(diào)整后重啟服務(wù)用命令驗(yàn)證SHOW VARIABLES LIKE innodb_buffer_pool_size;看到新值生效即可。這塊不需要像生產(chǎn)環(huán)境那樣做復(fù)雜的計(jì)算實(shí)驗(yàn)機(jī)器穩(wěn)定優(yōu)先別把內(nèi)存全給數(shù)據(jù)庫(kù)。6. 寫在最后的幾點(diǎn)實(shí)操意見(jiàn)這幾個(gè)月帶實(shí)驗(yàn)課下來(lái)我最深的體會(huì)是MySQL 5.5 在 Windows 上安裝并不難難的是大多數(shù)人遇到報(bào)錯(cuò)之后沒(méi)有一個(gè)清晰的排查順序。裝之前清理環(huán)境裝之中看清每個(gè)配置選項(xiàng)的意義裝之后做一輪驗(yàn)證實(shí)驗(yàn)基本上能避免 80% 的問(wèn)題。剩下 20% 的問(wèn)題從.err日志和netstat輸出入手比反復(fù)卸載重裝要靠譜得多。另外建議把這一刻你在用的安裝包、配置文件原始備份、驗(yàn)證 SQL 腳本都放到一個(gè)專門的mysql_lab_backup文件夾里。這樣以后重做系統(tǒng)、換實(shí)驗(yàn)機(jī)器直接按這篇步驟操作就能快速恢復(fù)環(huán)境不用每次重新摸索。這個(gè)小節(jié)沒(méi)有總結(jié)套話只想強(qiáng)調(diào)一點(diǎn)不要因?yàn)?MySQL 5.5 是老版本就在實(shí)驗(yàn)時(shí)隨意跳過(guò)安全習(xí)慣。哪怕只是一次課堂作業(yè)也要設(shè)置密碼、備份配置文件、定期整理數(shù)據(jù)目錄。環(huán)境干凈實(shí)驗(yàn)效果才穩(wěn)定你后面寫連接代碼、做數(shù)據(jù)遷移時(shí)也會(huì)輕松很多。