質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

Q&A

解決済

2回答

3496閲覧

PowerShellでMySQL接続

HelloWorld2

総合スコア32

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

0グッド

0クリップ

投稿2018/07/09 13:11

編集2018/07/10 02:44

初めての投稿で、PowerShellも初心者なので、拙い文章ですが、ご回答頂けると幸いです。

--------------------以下本文--------------------

PowerShellでAWSサーバ上のMySQLからデータを取得したいです。

AWSサーバ上のSQL Serverからはデータを取得できましたが、MySQLではどうもうまくいきません。(そもそも接続がうまくいきません)

SQLServerのデータは下記のコードで取得しております(接続情報・クエリは省略します)
$objConnection = New-Object -TypeName System.Data.SqlClient.SqlConnection;
$objConnection.ConnectionString = $strConnectionString;
$objCommand = $objConnection.CreateCommand();
$objCommand.CommandText = $strSQL;
$objAdapter = New-Object -TypeName System.Data.SqlClient.SqlDataAdapter $objCommand;
$objDataset = New-Object -TypeName System.Data.DataSet;
[void]$objAdapter.fill($objDataSet);

もちろん上記はSQLServer用のメソッドなので、コネクションを以下にしてみたり、アセンブリをインストールして読み込んでみたりしましたが、接続できません。
New-Object MySql.Data.MySqlClient.MySqlConnection

PowerShellを用いてPowerShellに接続する場合、どのクラスのどのメソッドを用いるのがスタンダードなのでしょうか?
また、アセンブリのインストール・読み込み等は、MySQLでは必須なのでしょうか?

できれば初心者にもわかりやすい解説だと幸いです。
よろしくお願いいたします。

Windowsバージョン7
PowerShellバージョン2.0
アセンブリ:MySQL.data.dll

--------------------以下追記--------------------
実行したコマンドと、エラーの内容を下記に記載しました。

■New-MySQLConnection -User "" -Password "" -HostAddress ""
用語 'New-MySQLConnection' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識さ
れません。名前が正しく記述されていることを確認し、パスが含まれている場合はそのパスが正しいことを確認してから、再試行し
てください。

■[void][System.Reflection.Assembly]::LoadFile(~\~\~\MySQL.Data.dll)
"1" 個の引数を指定して "LoadFile" を呼び出し中に例外が発生しました: "このアセンブリは現在読み込まれているランタイムより
新しいランタイムでビルドされているため、読み込むことができません。 (HRESULT からの例外: 0x8013101B)"

■New-Object MySQL.Data.MySqlClient.MySqlConnection
New-Object : 型 [MySQL.Data.MySqlClient.MySqlConnection] が見つかりません。この型を含むアセンブリが読み込まれていること
を確認してください。

■ [void][System.Reflection.Assembly]::LoadWithPartialName("~\~\~\MySQL.Data.dll")
"1" 個の引数を指定して "LoadWithPartialName" を呼び出し中に例外が発生しました: "指定されたアセンブリ名またはコードベー
スは無効です。 (HRESULT からの例外: 0x80131047)"

■ [void][System.Reflection.Assembly]::LoadWithPartialName("MySQL.Data.dll")
※エラーは発生しないが、voidを削除し、変数に格納し、変数表示させても無反応。
読み込めたと仮定し、接続コマンドを入力しても同様のエラー。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sazi

2018/07/10 01:10

上手くいかないだけでは分からないので、エラーメッセージなどを追記されたほうが良いですよ。
sysjojo

2018/07/10 03:21

追記された内容はhttp://tech.guitarrapc.com/entry/2013/05/02/230551を使おうとしてますか?元々の質問内容はSQLServerでのコードはこう書いていました、なので追記の中で使っているコマンドがやりたいこと、でよいですか?
HelloWorld2

2018/07/10 04:35

ご質問ありがとうございます。参照しているサイトは複数あり、ご指摘頂いたサイトも含みます。質問の趣旨としては、とにかくMySQLに接続したい、データを取得したい、というところで、SQLServerのコードと類似した形で書けたら理想的ですので、参考までに記載しました。よろしくお願いいたします。
sysjojo

2018/07/12 06:06

バージョン変更で解決したのであればsaziさんの回答をベストアンサーにされた方がよいですよ。
guest

回答2

0

エラーの内容からは、環境が構築されていないように思えます。
やってみたことはないのでアレですが、「PowerShell MySQL」というキーワードだけでも結構サンプルはHITします。
取り敢えず以下などはどうでしょうか。
Connector/NetとPowerShellでMySQLのデータ取得

投稿2018/07/10 03:06

sazi

総合スコア25173

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sysjojo

2018/07/10 03:48

これがないので >New-Object : 型 [MySQL.Data.MySqlClient.MySqlConnection] が見つかりません。この型を含むアセンブリが読み込まれていることを確認してください。 これが出ている気がしますね。
sazi

2018/07/10 04:43 編集

そうですね。 接続方法を模索している感じの質問なので、取り敢えず繋がれば良いのかな、って感じです。
HelloWorld2

2018/07/10 04:58

ご回答ありがとうございます。 >接続方法を模索している感じの質問なので、取り敢えず繋がれば良いのかな おっしゃる通りです。 環境とは、Connector/Netとアセンブリの読み込みのことですかね? Connector/Netに関しては、インストールしました。(フォルダ内にMySQL.Data.dllなどのファイルが存在しました) ご教示頂いたサイトの、「[reflection.assembly]::LoadWithPartialName("MySQL.Data")」コマンドを入力したのですが、無反応です。 その後「New-Object MySql.Data.MySqlClient.MySqlConnection($connStr)」コマンドを入力しましたが、下記エラーが発生しました。 New-Object : 型 [MySql.Data.MySqlClient.MySqlConnection] が見つかりません。この型を含むアセンブリが読み込まれていることを確認してください。
sysjojo

2018/07/10 05:47

>ご教示頂いたサイトの、「[reflection.assembly]::LoadWithPartialName("MySQL.Data")」コマンドを入力したのですが、無反応です。 ちゃんとインストールできてないんじゃないですかね? 入れてないPCで叩くと無応答ですが、入れるとGAC/Version/Locationの出力が返ってくるようになるので。
HelloWorld2

2018/07/10 05:50

現在、インストールされたデフォルトのフォルダ内にモジュールが格納されているのですが、 どこか特定の場所に格納する必要ってありますか? 現在の格納場所(Connector/Netをインストールされた際に作成されたフォルダ) \MySQL Connector Net 8.0.11\Assemblies\v4.5.2
sazi

2018/07/10 06:02

Set-Location でインストール先にカレントディレクトリを変更してみてはどうですか
HelloWorld2

2018/07/10 07:02 編集

>saziさん カレントディレクトリを\MySQL Connector Net 8.0.11\Assemblies\4.5.2に変更してみましたが、LoadWithPartialNameは無反応でした。 [System.AppDomain]::CurrentDomain.GetAssemblies() | % { $_.GetName().Name }で、ロードされているアセンブリを見てみましたが、MySQL.Dataは存在していません。 >sysjojoさん そうなんですね。。。 私も、同じサイトからダウンロードして、同じ格納場所にアセンブリが存在しています。 Connector/Netのバージョンの関係とかですかね・・・?
sazi

2018/07/10 07:16

次に進んだなら、インストールに失敗してるんでしょうね。 別のクリーンな環境でインストールから行ってみたほうが悩まなくて済むかもしれません。
sysjojo

2018/07/10 07:19 編集

パス見る限りまったく同じバージョンのように思いますが、私はPoweershellのバージョンが3ですね。 > PS C:\Users\sysjojo> $PSVersionTable > > Name Value > ---- ----- > PSVersion 3.0 > WSManStackVersion 3.0 > SerializationVersion 1.1.0.1 > CLRVersion 4.0.30319.42000 > BuildVersion 6.2.9200.22198 > PSCompatibleVersions {1.0, 2.0, 3.0} > PSRemotingProtocolVersion 2.2 Powershellのバージョンというよりは.NETのバージョンが関係してそうですが。
HelloWorld2

2018/07/10 09:00

>saziさん 非常に苦しいことに、別の環境から行うのは難しいんですよね。。。 もう少しもがいてみます!ありがとうございます。 >sysjojoさん やはりその可能性はありますかね。 一回.NETのバージョンを下げて、実行してみます。 ちなみに私の端末からPowerShellのバージョン調べた結果です。 >$PSVersionTable Name Value ---- ----- CLRVersion 2.0.50727.5466 BuildVersion 6.1.7601.17514 PSVersion 2.0 WSManStackVersion 2.0 PSCompatibleVersions {1.0, 2.0} SerializationVersion 1.1.0.1 PSRemotingProtocolVersion 2.1
HelloWorld2

2018/07/10 14:22

知人にお願いして、同じ動作を試してみました。 結論から述べると、connector/netのversion8.0.11をインストールして、LoadWithPartialNameを実行したところ、適切にアセンブリを読み込めました。 戻り値は以下です。(途中から省略) GAC Version Location --- ------- -------- True v4.0.30319 C:\windows\Microsoft.Net\assembly\GAC_MSIL\MySQL.Data\v4.0_8.0.11.... 知人のPCの環境は以下の通りでした。 ほぼ購入時と同じ状態(インストールファイル等がかなり少ない) PowerShellのversionが3.0 windows8(私のPCはwindows7) まだ原因は特定できず、事象の解決には至りませんが、 いったん、進んでる方向が正しい確証を得ることができました。 今後は、原因の特定に努めます。
HelloWorld2

2018/07/10 14:30

ふと思ったのですが、 get-item 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full' 上記コマンドを実行した際、私のpcでは、戻り値はあるものの、バージョン等が表示されていませんでした。これが関係あるんですかね? 知人PCで実行すると以下のようになります。 Hive: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4 Name Property ---- -------- Full Version : 4.5.50709 CBS : 1 TargetVersion : 4.0.0 Install : 1 InstallPath : C:\Windows\Microsoft.NET\Framework64\v4.0.30319\ Servicing : 0 Release : 378389 私のpcだとpropertyが1行だけ、version,○○○・・・(詳細は忘れました、たぶん項目名の羅列です)と出ていただけでした。
sysjojo

2018/07/10 20:12 編集

>一回.NETのバージョンを下げて、実行してみます。 ? ここに上がった上手くいってる環境は、.NET4.0以降な気がしますが、HelloWorld2さんの環境は.NET3.5以前なので、むしろ上げるべきなんじゃ? .NET4.0以降を入れてみては? Powershell2では.NETも3.5以前が使われるようなのでPowershellも上げてみては? https://qiita.com/miyamiya/items/95745587ced2c02a1966 https://cheshire-wara.com/powershell/ps-textbooks/basic-knowledge/powershell-started2/ そもそも.NET3.5以前じゃ要件満たしてないですね。 https://dev.mysql.com/doc/connector-net/en/connector-net-versions.html
HelloWorld2

2018/07/12 06:03

connector/netのバージョンを、mysql5.6に対応している一番低いバージョンにしてみた結果、 アセンブリの読み込みができました! 長い間お付き合い、本当にありがとうございました! また詰まった時は、ぜひご教示の程よろしくお願いいたします。
guest

0

ベストアンサー

手元のWindowsPCからEC2上のMySQLに接続する、という話だと思いますが、まずMySQL側で外部ホストからの接続を許可されていますか?
許可していたとして、AWSのセキュリティグループの設定およびEc2上のゲストのファイアウォールで接続ポートを開放していますか?
これらが行われていなければ、手元のPCから接続することはできないかと。

ただ、DBへの接続ポートを直接開放するのは私はあまりお勧めしません。

投稿2018/07/09 21:07

sysjojo

総合スコア325

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

HelloWorld2

2018/07/10 02:53

ご回答ありがとうございます。 まだ設定の確認ができていないのですが、 A5から該当MySQLのDBに接続する際は、 ユーザID,パスワード,ホスト名,データベース,ポート番号の入力のみで接続できるので、 外部ホストからの接続の許可・接続ポートの解放はされているのではないかと考えています。 見当違いでしたら申し訳ございません。
sysjojo

2018/07/10 03:01

A5ってなんですか? FUJITSU Cloud Service A5 for Microsoft Azure? 回答の前提(手元のWindowsからAWS)ってあってますか? どこからどこの接続の問題か、など前提条件を質問に書かれた方がよいかと。 あと同じことが違う環境からならできるのであれば、出来ている環境についても書かれた方がよいかと。
sysjojo

2018/07/10 03:06

A5がFujitsu Cloudと仮定して補足しますが、A5から接続ができるのはA5に対してFW等を許可しているからで、他のところから接続しようとしたときにはそこに対しても許可してやる必要が普通はあります。どこからでも接続できるように設定されている場合は別ですが。
HelloWorld2

2018/07/10 03:28

説明不足で申し訳ございません。 A5とは、A5:SQL Mk-2のことで、SQL開発ツールのことです。 接続は、ご認識の通り、ローカルのwindowsからAWSです。 A5からの接続も同じマシンから行っております。
sysjojo

2018/07/10 03:34

同じ環境からツールの違いで接続できる、出来ないが変わるのであれば、サーバー側の問題の可能性は低いですね。saziさんご指摘の通り、Powershellから接続するための環境に不備があるのでしょう。質問のコメントに挙げたツールを使おうとしているのであれば、githubからダウンロードしてこないと使えないと思いますがそのあたりは大丈夫です?
HelloWorld2

2018/07/10 05:05

質問のコメントにあるサイトに関してですが、勘違いをしておりました。 githubからのダウンロードが必要なのですね。 できれば、Powershel以外のモジュールはシンプルにしたいので、ツールを使用しての実現は一度保留とさせてください。 お手数お掛けして申し訳ございません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問