ポイント
WSLがIPアドレスを持っているので、HostNameをWSLのIPアドレスにする必要がある。
ホストPCでMySQLのjarファイルを準備
※ホストPCでのJavaの環境構築は終わっている前提
下記サイトで、JDBC Driver for MySQL (Connector/J)をダウンロード。(Platform Independent)
MySQL :: MySQL コネクタ
Javaプロジェクトのlibフォルダにjarファイルを格納。クラスパスを通す。
MySQLのDockerコンテナ作成
docker run --name mysql000ex11 -dit -p 3305:3306 -e MYSQL_ROOT_PASSWORD=myrootpass -e MYSQL_DATABASE=wordpress000db -e MYSQL_USER=wordpress000kun -e MYSQL_PASSWORD=wkunpass mysql --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --default-authentication-plugin=mysql_native_password
・-p 3305:3306の説明
-p ホスト側ポート番号:コンテナ側ポート番号
ホスト側ポート番号は未使用のものなら何でもOK。
コンテナ側ポート番号は3306。MySQLは3306を使用しているので。
ホストマシンの3305に接続があったらDockerコンテナの3306に接続しますよ、ということ。
ホスト側のWorkBenchから接続確認
上記だと接続できないのでWSLのIPアドレスを調べる。(HostnameをWSLのIPアドレスに変更する必要あり)
WSLのIPアドレスを調べる
WSLはホストPCとは別のIPアドレスを持つため、ホストからWSL上のDockerコンテナ内のMySQLにアクセスするためには、WSLのIPアドレスが必要。
コマンドプロンプトで下記コマンドを打つ。
> wsl #wsl起動 > ip a #ipアドレス表示
eth0の inetの部分がWSLのIPアドレス。
改めて、WorkBenchで接続確認。Test Connectionで成功したらOK。
JavaからMySQLに接続テスト
package main; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class Main { public static void main(String[] args) throws SQLException { // TODO 自動生成されたメソッド・スタブ // データベースに接続 Connection con = DriverManager.getConnection( "jdbc:mysql://WSLのIPアドレス:3305/DB名?useSSL=false", "root", "rootパスワード" ); // SQL文の実行 PreparedStatement pstmt = con.prepareStatement("SELECT * FROM sys.sys_config;"); ResultSet rs = pstmt.executeQuery(); // 検索結果を表示 while (rs.next()) { System.out.println(rs.getString("variable")); } // 後処理(リソースのクローズ) rs.close(); pstmt.close(); con.close(); } }
・結果
SELECT結果が返ってきた!成功!
diagnostics.allow_i_s_tables diagnostics.include_raw ps_thread_trx_info.max_length statement_performance_analyzer.limit statement_performance_analyzer.view statement_truncate_len