Bash on Windows に構築したMySQL データベースに C# から接続してみた
前回のエントリでは、Bash on Windows に MySQLをインストールし動作するか試してみた訳ですが、今回のエントリでは Windows 側から C# プログラムで MySQL に接続し動作するか試してみます。
Bash on Windows で MySQL を動かしてみる
- 作者: 鈴木啓修,山田奈緒子
- 出版社/メーカー: 技術評論社
- 発売日: 2014/12/18
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (4件) を見る
- 作者: 當仲寛哲,斉藤博文,田代勝也,大岩元,新美勇一,高橋光輝,白羽玲子,後藤大地,法林浩之,すずきひろのぶ,熊野憲辰,御影けい,松浦智之,水間丈博,桑原滝弥,濱口誠一,USP研究所,ジーズバンク
- 出版社/メーカー: USP研究所
- 発売日: 2016/06/25
- メディア: 雑誌
- この商品を含むブログ (1件) を見る
コマンドプロンプトから Bash on Windows に接続し MySQL を起動
Bash on Windows & MySQL の情報って思ったより少ないですね。わたしの頭では Bash on Windows にインストールした MySQL に Windows 側から接続できないと思ってましたが、完全誤解してました。NaviCat の評価版インストールして Localhost に接続したら、しっかりテーブルにアクセスできるじゃありませんかw
またコマンドプロンプト起動して bash と打ち込めば、コマンドプロンプトから bash を操作できることも判ってきました。これは楽しいw
というわけで、これ以降の操作はコマンドプロンプトで行います。
新規ユーザー追加
C# から MySQL に ROOT で接続するのって、仮に Localhost であってもあまり気分がいいものではありません。よって、新規ユーザーを追加します。
コマンドプロンプトを起動し、bash で Bash on Windows に移動します。
> bash
bash が起動したら MySQL のサービスを起動します。どうやら bash を閉じると、WSL(Windows Subsystem for Linux) で動いている Ubuntu もアンロードされる仕様のようで、bash 起動するたびにサービスを開始する必要があるみたいです。
$ sudo service mysql start
MySQL に接続します。
$ mysql -u root -p
Enter password: [パスワードを入力]
MySQL に接続したら、新たにユーザーを追加します。新規ユーザー名はとりあえず「hilapon」、ホストは「localhost」にして登録します。
mysql> create user 'hilapon'@'localhost' identified by '[任意のパスワード]';
成功したら、MySQL に登録されているユーザーの確認をしてみましょう。先ほど登録したユーザーが確認できます。
ユーザー「hilapon」に前回作った sample_db を操作する権限を与えてみましょう。今回はとりあえず SELECT 権限だけ与えてみます。
mysql> grant select on sample_db.* to 'hilapon'@'localhost';
いったんMySQLサーバーの接続を解除し、新規ユーザーで接続できるか確認します。
mysql> exit;
$ mysql -u hilapon -p
Enter password: [パスワードを入力]
mysql> use sample_db;
mysql> select * from Shops where rating = 4;
接続が確認できました。次は C# で sample_db に接続したいと思います。
C# から Bash on Windows 上の MySQL に接続する
ここまでできたら、最後に C# のコンソールアプリから、Bash on Windows 上の MySQL に接続します。ここで注意することは、サーバーを localhost に指定することと、bash を閉じないこと、あと Nuget で MySQL.Data をソリューションにインストールすることです。bash を閉じるとMySQL に接続できません。気を付けてください。
以下、ソースです。
これで、Bash on Windows 上の MySQL を使って Visual Studio でアプリケーションが開発可能なことが確認できました。まだまだ奥が深い「Bash on Windows」、さらに新しいネタを発見したら、またブログで報告させて頂きたいと思います。