回答編集履歴

2 確認結果の追記

rubytomato

rubytomato score 545

2018/08/11 00:02  投稿

2点ご確認ください。
### 接続先のデータベース
エラーメッセージに"Unknown database "と出ているので接続先データベースが見つかっていないように思います。
jdbc urlに指定しているデータベース名は正しいでしょうか?
```
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown database 'test'
```
もし、ローカルPCにmysqlかmysql clientがインストールされている場合、次のコマンドでアクセスできるかご確認ください。
```
> mysql.exe --host=接続先ホスト名 --port=3306 --user=ユーザー --password=パスワード --database=データベース名
```
### 接続先のホスト名
ご提示されたコードのjdbc urlには"PCのID"と書かれていますが、これは実際のコードでは接続先の”ホスト名”または”ホストのIP”が書かれているということでしょうか?
A5:SQL Mk-2では接続できるとのことですが、このツールのDB接続設定のホスト名の内容と同一でしょうか?
```
String url = "jdbc:mysql://PCのID:3306/データベース名?autoReconnect=true&useSSL=false";
```
念のため、コマンドプロンプトからpingで疎通できるかご確認ください。
```
> ping 接続先のホスト名
```
それと、ちょっと気になっている点があります。質問文の以下の
> 別のPCのMysqlにアクセスしようとすると次のようなエラーが出てしまいます。
"別のPC"というのは、チームで開発する際に複数のメンバーで接続する用途のいわゆるサーバータイプのPCでしょうか?
ちょっと気になっただけなので、差支えがあればお答え頂かなくても結構です。
 
### 確認点 (2018/08/08追加)
コメントありがとうございます。ローカルからmysql.exeでは接続できないけど、A5:SQL Mk-2からは接続できるということなので、もう少し状況確認をさせてください。
 
**結果追記 (2018/08/10)**  
 
確認点をコメントして頂いたので、見やすいようにそれぞれの項目に結果を追記しました。  
#### bind_addressとportの確認
MySQL serverが実行されているPC上で、mysql.exeを使ってrootユーザーでログインして次のsqlを実行してください。
このsqlの結果を確認したいと思います。
bind_address  
 
```
> show variables like '%bind%';
```
**結果追記**  
 
```  
bind_address *  
 
1 row in set, 1 warning (0.27 sec)  
```  
 
port  
 
```
> show variables like '%port%';
```  
 
**結果追記**  
 
```  
innodb_support ON  
large_files_support ON  
port 3306  
report_host  
report_password  
report_port 3306  
report_user  
require_secure_transport OFF  
 
8 rows in set, 1 warning(0.00 sec)  
```
#### netstatでportの確認
MySQL serverが実行されているPC上で、Windowsのnetstatコマンドの結果を確認したいです。
出力結果が長いかもしれませんが"ローカル アドレス"の欄にx.x.x.x:3306のような結果があるか確認してください。この場合の3306は上記で確認したportに読み替えてください。(上記のportの確認結果がたとえば13306だったら、x.x.x.x:13306を確認する、という意味です。)
コマンドプロントを立ち上げ次のコマンドを実行してください。
```
> netstat -anoptf TCP
```
下記の例のような行があるかを確認したいです。
```
アクティブな接続
 プロトコル ローカル アドレス     外部アドレス          状態           PID     オフロード状態
 TCP        0.0.0.0:3306          0.0.0.0:0             LISTENING      18596      ホスト内
```
ローカルアドレスに上記の例のような行がある場合、さらにtohokukagakuさんのPCからA5:SQL Mk-2で接続して、再度結果を確認してください。
このときの外部アドレスがどのように変わったか確認したいです。
 
**結果追記**  
 
> はじめは下記の例と同じ内容が行がありました(PIDのみ違う数字)  
> A5:SQL Mk-2に接続後も変わらず同じ数字で存在しましたが、新しく下記の行が増えました。(pidとオフロード状態は同じ数字でした。)  
 
```  
ローカルアドレス      外部アドレス                 状態        
接続先ホストのID:3306  接続先ホストのIDの下二桁のみ違う数字:50525 ESTABLISHED  
```  
#### DBユーザーのアクセス権限
MySQL serverが実行されているPC上で、mysql.exeを使ってrootユーザーでログインして次のsqlを実行してください。
このsqlの結果を確認したいと思います。
仮に、接続したいユーザー名が'test_user'だとしたら、以下のようなsqlになると思います。
'test_user'の部分は、実際に接続したいユーザーの名前に読み替えてください。(eclipseのプログラムやA5:SQL Mk-2から接続するときのユーザー名です。)
```
> select user,host from mysql.user where user = 'test_user';
```
下記は一例ですが、hostに
* 'localhost'があるか
* tohokukagakuさんのPCのIPアドレスがあるか(たとえば、tohokukagakuさんのPCのIPが10.0.75.1だとしたら、下記のように10.0.75.%かもしくは10.0.75.1があるか)
の点を確認したいと思います。
```
+---------------+-------------+
| user         | host       |
+---------------+-------------+
| test_user    | 10.0.75.%  |
| test_user    | localhost  |
+---------------+-------------+
```
**結果追記**  
 
```  
myspl %  
 
1 rdw in set(0.05 sec)  
```  
 
また、以下のshow grantsで接続したいユーザーが接続したいデータベースに権限が付与されているか確認したいです。
このsql文の'test_user'@'10.0.75.%'の部分は実際に接続したいユーザーに読み替えてください。
```
> show grants for 'test_user'@'10.0.75.%';
```
下記は一例ですが、GRANT ALL PRIVILEGES ON `test`.* TO 'test_user'@'10.0.75.%' のような行があるか確認したいです。
```
+-----------------------------------------------------------------------+
| Grants for test_user@10.0.75.%                                       |
+-----------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'test_user'@'10.0.75.%'                        |
| GRANT ALL PRIVILEGES ON `test`.* TO 'test_user'@'10.0.75.%'          |
+-----------------------------------------------------------------------+
```
**結果追記**  
 
```  
Grants for mysql`%  
 
GRANT ALL PRIVILEGES ON *.* TO "mysql"@"%" WITH GRANT OPTION  
```  
 
#### MySQL serverが実行されているPCからの接続
上記のアクセス権限の確認結果にlocalhostが含まれている場合に、この確認を行って頂きたいです。
tohokukagakuさんのPCからmysql.exeでは接続できなかったということですが、MySQL serverが実行されているPCからの接続はどうでしょうか?
MySQL serverが稼働しているPCから、mysql.exeを使って接続したいユーザーでログインできるか確認してください。
test_userとtest_passの部分は実際に接続したいユーザー名とパスワードに読み替えてください。
```
> mysql.exe --host=localhost --port=3306 --user=test_user --password=test_pass --database=test
```
#### ローカルPCから接続できなかったときのエラーメッセージ
頂いたコメントで、ローカルPCからは接続できなかったということですが、このときのエラーメッセージはどのようなものでしょうか?
> > mysql.exe --host=接続先ホスト名 --port=3306 --user=ユーザー --password=パスワード --database=データベース名
> 試してみましたが接続することができませんでした。
**結果追記**  
 
> ローカルPCからの接続エラーは下記のように出ました。  
> ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'mysql.exe --host=接続先ホストID --port=3306 --user=mysql --password=パスワード -' at line 1  
 
また、データベース名の指定ですが、A5:SQL Mk-2の接続設定のデータベースの欄の名前です。この場合はデータベース名とスキーマ名は同じと考えてよいと思います。
> 自分は接続先データベース名は A5:SQL Mk-2 のスキーマと同じだと思い、"test" にしているのですがもしかして間違いでしたか?
A5:SQL Mk-2からは接続できるということですが、たとえば、A5:SQL Mk-2の接続設定が下図のようなものだとして、
![イメージ説明](be7e5fb0f3b19edb42b42e11583fa83f.png)
下記のように同じ設定でもmysql.exeからは接続できないということでしょうか?
設定は、tohokukagakuさんのPCのA5:SQL Mk-2の接続設定に読み替えてください。
```
> mysql.exe --host=10.75.0.200 --port=3306 --user=test_user --password=test_pass --database=test
```
**結果追記**  
 
> A5:SQL Mk-2からは接続設定と  
> mysql.exe --host=10.75.0.200 --port=3306 --user=test_user --password=test_pass --database=test  
> を見比べましたが、違いはありませんでした。  
 
#### ローカルPCにMySQL serverはインストールされていますか
mysql.exeで接続確認をされたということですが、ローカルPCにMySQL serverがインストールされているということでしょうか?
もしそうであれば、ローカルPCのMySQL serverが稼働していてA5:SQL Mk-2がそこへ接続しているということはないでしょうか?
**結果追記**  
 
> ローカルPCのmysqlにはtestというデータベースは作成していませんのでA5:SQL Mk-2がそこへ接続しているということはないと思います。  
 
以上、すこし項目が多いですがご確認ください。
1 確認事項の追加

rubytomato

rubytomato score 545

2018/08/08 21:02  投稿

2点ご確認ください。
### 接続先のデータベース
エラーメッセージに"Unknown database "と出ているので接続先データベースが見つかっていないように思います。
jdbc urlに指定しているデータベース名は正しいでしょうか?
```
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown database 'test'
```
もし、ローカルPCにmysqlかmysql clientがインストールされている場合、次のコマンドでアクセスできるかご確認ください。
```
> mysql.exe --host=接続先ホスト名 --port=3306 --user=ユーザー --password=パスワード --database=データベース名
```
### 接続先のホスト名
ご提示されたコードのjdbc urlには"PCのID"と書かれていますが、これは実際のコードでは接続先の”ホスト名”または”ホストのIP”が書かれているということでしょうか?
A5:SQL Mk-2では接続できるとのことですが、このツールのDB接続設定のホスト名の内容と同一でしょうか?
```
String url = "jdbc:mysql://PCのID:3306/データベース名?autoReconnect=true&useSSL=false";
```
念のため、コマンドプロンプトからpingで疎通できるかご確認ください。
```
> ping 接続先のホスト名
```
それと、ちょっと気になっている点があります。質問文の以下の
> 別のPCのMysqlにアクセスしようとすると次のようなエラーが出てしまいます。
"別のPC"というのは、チームで開発する際に複数のメンバーで接続する用途のいわゆるサーバータイプのPCでしょうか?
ちょっと気になっただけなので、差支えがあればお答え頂かなくても結構です。
ちょっと気になっただけなので、差支えがあればお答え頂かなくても結構です。
### 確認点 (2018/08/08追加)
コメントありがとうございます。ローカルからmysql.exeでは接続できないけど、A5:SQL Mk-2からは接続できるということなので、もう少し状況確認をさせてください。
#### bind_addressとportの確認
MySQL serverが実行されているPC上で、mysql.exeを使ってrootユーザーでログインして次のsqlを実行してください。
このsqlの結果を確認したいと思います。
```
> show variables like '%bind%';
```
```
> show variables like '%port%';
```
#### netstatでportの確認
MySQL serverが実行されているPC上で、Windowsのnetstatコマンドの結果を確認したいです。
出力結果が長いかもしれませんが"ローカル アドレス"の欄にx.x.x.x:3306のような結果があるか確認してください。この場合の3306は上記で確認したportに読み替えてください。(上記のportの確認結果がたとえば13306だったら、x.x.x.x:13306を確認する、という意味です。)
コマンドプロントを立ち上げ次のコマンドを実行してください。
```
> netstat -anoptf TCP
```
下記の例のような行があるかを確認したいです。
```
アクティブな接続
 プロトコル ローカル アドレス     外部アドレス          状態           PID     オフロード状態
 TCP        0.0.0.0:3306          0.0.0.0:0             LISTENING      18596      ホスト内
```
ローカルアドレスに上記の例のような行がある場合、さらにtohokukagakuさんのPCからA5:SQL Mk-2で接続して、再度結果を確認してください。
このときの外部アドレスがどのように変わったか確認したいです。
#### DBユーザーのアクセス権限
MySQL serverが実行されているPC上で、mysql.exeを使ってrootユーザーでログインして次のsqlを実行してください。
このsqlの結果を確認したいと思います。
仮に、接続したいユーザー名が'test_user'だとしたら、以下のようなsqlになると思います。
'test_user'の部分は、実際に接続したいユーザーの名前に読み替えてください。(eclipseのプログラムやA5:SQL Mk-2から接続するときのユーザー名です。)
```
> select user,host from mysql.user where user = 'test_user';
```
下記は一例ですが、hostに
* 'localhost'があるか
* tohokukagakuさんのPCのIPアドレスがあるか(たとえば、tohokukagakuさんのPCのIPが10.0.75.1だとしたら、下記のように10.0.75.%かもしくは10.0.75.1があるか)
の点を確認したいと思います。
```
+---------------+-------------+
| user         | host       |
+---------------+-------------+
| test_user    | 10.0.75.%  |
| test_user    | localhost  |
+---------------+-------------+
```
また、以下のshow grantsで接続したいユーザーが接続したいデータベースに権限が付与されているか確認したいです。
このsql文の'test_user'@'10.0.75.%'の部分は実際に接続したいユーザーに読み替えてください。
```
> show grants for 'test_user'@'10.0.75.%';
```
下記は一例ですが、GRANT ALL PRIVILEGES ON `test`.* TO 'test_user'@'10.0.75.%' のような行があるか確認したいです。
```
+-----------------------------------------------------------------------+
| Grants for test_user@10.0.75.%                                       |
+-----------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'test_user'@'10.0.75.%'                        |
| GRANT ALL PRIVILEGES ON `test`.* TO 'test_user'@'10.0.75.%'          |
+-----------------------------------------------------------------------+
```
#### MySQL serverが実行されているPCからの接続
上記のアクセス権限の確認結果にlocalhostが含まれている場合に、この確認を行って頂きたいです。
tohokukagakuさんのPCからmysql.exeでは接続できなかったということですが、MySQL serverが実行されているPCからの接続はどうでしょうか?
MySQL serverが稼働しているPCから、mysql.exeを使って接続したいユーザーでログインできるか確認してください。
test_userとtest_passの部分は実際に接続したいユーザー名とパスワードに読み替えてください。
```
> mysql.exe --host=localhost --port=3306 --user=test_user --password=test_pass --database=test
```
#### ローカルPCから接続できなかったときのエラーメッセージ
頂いたコメントで、ローカルPCからは接続できなかったということですが、このときのエラーメッセージはどのようなものでしょうか?
> > mysql.exe --host=接続先ホスト名 --port=3306 --user=ユーザー --password=パスワード --database=データベース名
> 試してみましたが接続することができませんでした。
また、データベース名の指定ですが、A5:SQL Mk-2の接続設定のデータベースの欄の名前です。この場合はデータベース名とスキーマ名は同じと考えてよいと思います。
> 自分は接続先データベース名は A5:SQL Mk-2 のスキーマと同じだと思い、"test" にしているのですがもしかして間違いでしたか?
A5:SQL Mk-2からは接続できるということですが、たとえば、A5:SQL Mk-2の接続設定が下図のようなものだとして、
![イメージ説明](be7e5fb0f3b19edb42b42e11583fa83f.png)
下記のように同じ設定でもmysql.exeからは接続できないということでしょうか?
設定は、tohokukagakuさんのPCのA5:SQL Mk-2の接続設定に読み替えてください。
```
> mysql.exe --host=10.75.0.200 --port=3306 --user=test_user --password=test_pass --database=test
```
#### ローカルPCにMySQL serverはインストールされていますか
mysql.exeで接続確認をされたということですが、ローカルPCにMySQL serverがインストールされているということでしょうか?
もしそうであれば、ローカルPCのMySQL serverが稼働していてA5:SQL Mk-2がそこへ接続しているということはないでしょうか?
以上、すこし項目が多いですがご確認ください。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る