為深入理解 MySQL 內核機制,嘗試在 Windows 7 64 位 + Visual Studio 2010 環境下從源碼編譯 MySQL 5.6.19。過程中遇到諸多環境依賴與編譯錯誤,網上教程多不全或版本不符,特整理此實戰文檔供後人參考。
| 工具 | 版本/文件 | 安裝建議路徑 |
|---|---|---|
| OS | Win7 SP1 x64 | — |
| IDE | VS2010 (VS2013 也測試過) | D:\VS2010 |
| MySQL 源碼 | mysql-5.6.19.zip (Source Code) | D:\mysql\mysql-5.6.19 |
| Perl | ActivePerl-5.16.3.1604-MSWin32-x64-298023.msi | C:\Perl64 |
| CMake | cmake-3.0.0-win32-x86.exe | C:\CMake |
| Bison | bison-2.4.1-setup.exe | C:\GnuWin32 |
必須將上述工具的bin目錄加入系統環境變量PATH(如C:\CMake\bin、C:\GnuWin32\bin、C:\Perl64\bin),驗證:cmake --version、bison --version、perl -v均正常輸出版本號。
cd D:\mysql\mysql-5.6.19 mkdir bld cd bld cmake ..
過程中會出現一些 NOT FOUND 警告(如 curses、某些庫),不影響生成 MySQL.sln。關鍵成功標誌:控制台輸出 Configuring done、Generating done、Build files have been written to: D:/mysql/mysql-5.6.19/bld。

CMake 生成的部分 .c/.h 文件編碼導致 VS 編譯報警告/錯誤。批量用 Notepad++ 將 bld 目錄下所有源文件轉存為 UTF-8 帶 BOM 格式。

編譯時 sql\mysqld.cc 的 test_lc_time_sz() 函數觸發 DBUG_ASSERT(0) 導致斷言失敗。將其改為 DBUG_ASSERT(1) 繞過(僅影響調試斷言,不影響功能)。
MySQL.sln,選 Debug 配置,Build Solution。fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt。原因:.NET 4.0 的 cvtres.exe 與 VS2010 衝突。解決:刪除/重命名 D:\VS2010\VC\bin\cvtres.exe(或將 VS2010 的 cvtres.exe 複製覆蓋 .NET 目錄下的同名文件)。mysqld 項目 → Properties → Debugging → Command Arguments 填 --console。F5 啟動調試。mysqld: ready for connections 即成功。

cd D:\mysql\mysql-5.6.19\bld\client\Debug mysql.exe -u root -p -- 直接回車,無密碼登錄,執行 SHOW DATABASES; 驗證

至此完成 Win7+VS2010 下 MySQL 5.6 源碼編譯、調試環境搭建。後續可在 sql/、storage/innobase/ 等核心模塊下斷點跟蹤查詢執行、事務鎖、B+樹操作等流程。關鍵避坑點:工具鏈路徑純 ASCII、CMake 生成後源碼統一 UTF-8 BOM、VS2010 cvtres.exe 衝突。