エンジニアのはしがき

プログラミングの日々の知見を書き連ねているブログです

WindowsのGit Bashでmysqlに接続できなかった

Windowsで開発する時は、ターミナルとしてGit Bashを多用しています。が、たまに特有の仕様にひっかかってしまうことがあり、今回もそんなトピックとなります。

開発環境

  • OS: Windows11 Home 21H2
$ bash --version
GNU bash, version 4.4.23(2)-release (x86_64-pc-msys)
...

$ mysql --version
C:\Program Files\MySQL\MySQL Server 8.0\bin\mysql.exe  Ver 8.0.28 for Win64 on x86_64 (MySQL Community Server - GPL)

詰まったところ

  • Git Bashからmysql -h ****** -P 3304 -u admin -pMySQLへ接続を試みようとしたが全く反応がない。
    • エラーすら出力されない。
  • コマンドプロンプトから同様にmysql -h ****** -P 3304 -u admin -pを実行すると、こちらは問題なく接続成功。

対応

  • Git Bashmysqlを使用する場合はコマンドの先頭にwinptyを付与した。
    • winpty mysql -h ****** -P 3304 -u admin -pで正しく動作する。

実は以前、Git BashでDockerを利用した時も似たような事象があり、ブログの記事にしていました。

tm-progapp.hatenablog.com

winptyって?

内容が重複するので以前のブログ記事から引用しちゃいます。

git bashはデフォルトだと、minttyというターミナルエミュレータで動作しており、 minttyのおかげでWindows上でもUNIXライクなコマンドが使えるようになっています。

しかし、minttyからpythonやipconfig等のWindows上のプログラムを実行した場合、 互換性の問題から正しく実行できない場合が出てくるようです。

winptyはminttyからでもWindows上のプログラムとの入出力を正しく解釈できるように調整をしてくれます。

互換性の問題の具体例ですが、ipconfigWindowsのネイティブのコマンドではShift_JISで出力するのですが、一方でGit BashUTF-8で出力を試みようとするために文字化けを起こすようです。

Git Bashでうまく動作しなかった場合は、minttyによるトラブルかどうか判断するために下記を試すといいかもしれませんね。

  • コマンドプロンプトで同様の現象が正しく動作するか?
  • Git Bashでコマンドの先頭にwinptyを付与して正しく動作するか?

あとがき

Git Bashを使わなければこの煩わしさから解放されるとは思うのですが、個人的にLinuxライクにコマンドをうてる快適さからなかなか離れられないんですよね…。(VSCodeのターミナルもデフォルトはGit Bashにしてます)

参考

[Git Bash] winpty コマンドについて調べてみた | MSeeeeN | 大阪発 IT メディア by MSEN