首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Windows 下使用 Cygwin 編譯 MySQL 客戶端完整教程

     編輯:MySQL 資料庫相關知識

Windows 原生 mysql.exe 在 Cygwin/Mintty 終端中無法正常交互(密碼提示掛起),根因是 Windows 主控台子系統與 POSIX tty 不兼容。解決方案是在 Cygwin 環境下編譯原生 MySQL 客戶端,實現完美的終端交互體驗。本文記錄完整編譯流程、配置優化與亂碼處理。

一、前置準備

# 1. 安裝 Cygwin 基礎包 + 開發工具鏈
# setup-x86_64.exe 選擇安裝:
#   Devel: gcc-g++, make, cmake, pkg-config
#   Libs: libreadline-devel, libncurses-devel, openssl-devel, zlib-devel
#   Net: wget, openssh
#   Editors: vim

# 2. 下載 MySQL 源碼(以 5.5 為例,8.0 需 C++17 支援)
cd /usr/src
wget https://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.62.tar.gz
tar zxvf mysql-5.5.62.tar.gz
cd mysql-5.5.62

二、編譯安裝(僅客戶端)

# 關鍵:--without-server 只編譯客戶端,--without-readline 使用系統 readline 避免編譯錯誤
./configure \
    --prefix=/usr/local/mysql-client \
    --without-server \
    --without-readline \
    --with-ssl \
    --with-zlib-dir=/usr \
    CFLAGS="-O2 -pipe" \
    CXXFLAGS="-O2 -pipe"

make -j$(nproc)
make install

三、配置優化:強制 TCP 連接、UTF-8、命令別名

# 複製配置模板
cp support-files/my-default.cnf /etc/my.cnf

# 編輯 /etc/my.cnf
cat >> /etc/my.cnf <<'EOF'
[client]
port        = 3306
socket      = /tmp/mysql.sock
protocol    = TCP        # 強制 TCP,避免 Unix socket 找不到
default-character-set = utf8mb4

[mysql]
no-auto-rehash          # 啟動更快
auto-vertical-output    # 寬表自動垂直顯示
prompt="\\u@\\h [\\d]> "  # 友好提示符
EOF

四、驗證與測試

# 確保 Windows MySQL 服務運行且防火牆開放 3306
# 測試連接
/usr/local/mysql-client/bin/mysql -h 127.0.0.1 -u root -p

# 加入 PATH
echo 'export PATH="/usr/local/mysql-client/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc

# 現在可直接使用 mysql 命令
mysql -h 127.0.0.1 -u root -p

五、Mintty 亂碼問題與最佳實踐

根因: Windows 系統預設代碼頁為 GBK (CP936),Mintty 預設 UTF-8。執行 Windows 原生命令(ping、ipconfig、mysql.exe)輸出 GBK,在 UTF-8 終端顯示亂碼;反之亦然。

方案優點缺點
Mintty 設為 GBK (Locale=C, Charset=GBK)Windows 原生命令正常Linux 工具、SSH 遠端、Git 輸出亂碼
Mintty 保持 UTF-8,Windows 命令用 iconv -f GBK -t UTF-8 管道轉碼Linux 生態完美需包裝每個 Windows 命令
推薦:全鏈路 UTF-8。Windows 10 1903+ 支援 chcp 65001,終端設為 UTF-8,MySQL 客戶端 default-character-set=utf8mb4統一編碼,無轉換損耗舊版 Windows 不支援

六、常見編譯錯誤與解決

錯誤原因解決
readline.h not found缺少 libreadline-develapt-cyg install libreadline-devel 或 Cygwin 安裝器勾選
ssl library not found缺少 openssl-develapt-cyg install openssl-devel
undefined reference to `mysql_...未連結 libmysqlclient確認 --with-ssl、--with-zlib-dir 路徑正確
編譯極慢Cygwin fork/IO 效能低使用 make -j1、關閉殺毒軟體、考慮 MSYS2/WSL 替代

編譯原生 Cygwin MySQL 客戶端,能在 Mintty 中獲得完整的交互體驗(密碼提示、自動補全、Ctrl+C 信號處理),是 Windows 上進行 MySQL 開發運維的最佳選擇之一。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved