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

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

ただいまの
回答率

87.48%

PowerShellでMySQL接続

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 6,664

score 24

初めての投稿で、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を削除し、変数に格納し、変数表示させても無反応。
読み込めたと仮定し、接続コマンドを入力しても同様のエラー。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • sazi

    2018/07/10 10:10

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

    キャンセル

  • sysjojo

    2018/07/10 12:21

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

    キャンセル

  • HelloWorld2

    2018/07/10 13:35

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

    キャンセル

  • sysjojo

    2018/07/12 15:06

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

    キャンセル

回答 2

checkベストアンサー

0

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/10 12:28

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

    キャンセル

  • 2018/07/10 12:34

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

    キャンセル

  • 2018/07/10 14:05

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

    キャンセル

0

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/10 23: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,○○○・・・(詳細は忘れました、たぶん項目名の羅列です)と出ていただけでした。

    キャンセル

  • 2018/07/11 05:06 編集

    >一回.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

    キャンセル

  • 2018/07/12 15:03

    connector/netのバージョンを、mysql5.6に対応している一番低いバージョンにしてみた結果、
    アセンブリの読み込みができました!

    長い間お付き合い、本当にありがとうございました!
    また詰まった時は、ぜひご教示の程よろしくお願いいたします。

    キャンセル

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

  • ただいまの回答率 87.48%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る