• 締切済み

MySQL のプロンプトをグラブなりトラップなりしたい

Perl スクリプトからシェル コマンドなどを発行しています。 まずは、MySQL へパスワードつきでログインするコマンドを発行します。 これは難なくうまくいきました。 これに連続して MySQL のコマンドなりクエリなどを発行するように記述すると、(Perl のエラではないため) スクリプトは無事に完結するものの、コマンド (あるいはクエリ) が効いていません (コンソールから確認済み)。 ところが、スクリプトのほうでログインとクエリとの間に無理矢理に数秒の時間を作ると、その後に来るクエリが成功しています (コンソールから確認済み)。 MySQL どころか RDBMS ではありませんが、ウェブで検索したところ、プロンプトを待たずとも連続してコマンドを発行 (例では print でやっていました) すればよい、みたく書かれていました。実際は、上記のように私の MySQL のプロンプトの例ではうまくいきませんでした。3 秒くらい待てば十分なのですが、200/1,000 秒くらいの間隔で MySQL のプロンプトをグラブできるか否か、同一スクリプトの中から確認する方法はないでしょうか。 (DBI などは無関係の質問です)

  • -ROM
  • お礼率19% (78/407)
  • Perl
  • 回答数2
  • ありがとう数2

みんなの回答

  • kumoz
  • ベストアンサー率64% (120/185)
回答No.2

前回の回答は単なる秒未満のスリープとして示しましたが、繰り返し文に組み込む ことができます。MySQL は知らないので、別の例を挙げてみます。 select undef, undef, undef, 0.2 until flock ...; 上の例では flock が真を返すまで (すなわちファイルロックに成功するまで) 繰り 返し実行します。質問者の実行する文はわかりませんが、戻り値をチェックしながら 繰り返し実行するのはだめですか? select undef, undef, undef, 0.2 until system(command ...);

-ROM
質問者

お礼

新たな質問ができないので、いったん閉じます。 お読みいただき、ありがとうございます。

-ROM
質問者

補足

返り値を調べてみましたが、Perl からコマンド、ないしクエリを発行した時点で真となり、結果として MySQL が何らかの反応を返す/返さないのとは無関係のようです。

  • kumoz
  • ベストアンサー率64% (120/185)
回答No.1

秒未満の端数を指定するには、4項の select を利用することができます。 (非 UNIX 環境では、うまくいかないかもしれません)。次のコマンドは、 0.2 秒間スリープします。 select undef, undef, undef, 0.2;

-ROM
質問者

お礼

もっとも、DBI を使えば SQL クエリは発行できますが、先に書きましたとおり、本来の目的はそれではなく、どうしても「生」でコマンド発行の必要があるのです。

-ROM
質問者

補足

ありがとうございます。 ただ、希望はインターバルを取ることではなく、MySQL のプロンプトを捕まえたいのです。 少し乱暴ですが、自分のサーバなのでダミー プロセスを多数発生させてシステムをビジー状態にさせ、コンソールから MySQL のプロンプトを出させるのを遅らせ、それまでのあいだにクエリを入力すると、クエリが無効になることに気づきました (その後にプロンプトは立ち上がります)。 つまり、MySQL はプロンプトが出るまではコマンドやクエリを受け付けないので、これを待ち、その後できるだけ早くコマンドを発行したいのです。

関連するQ&A

  • MySQLを使うと逆に処理が遅くなってしまった・・。

    質問があるのですがよろしくお願いします。 CGIを使ったサイトを運営しているのですが、テキスト形式のデータベースよりRDBMSを使ったデータベースの方がいいと周囲から言われ、perlのDBIを経由してMySQLと連携する仕様のCGIを作りました。ローカルサーバで試運転して問題なく動くのを確認してから、ロリポップのサーバに上げてまた試運転してみたのですが、今度はなぜか、ローカルで走らせたときより明らかに処理速度が遅くなってしまいました。ローカルで走らせた時は、テキスト形式のデータベースのCGIと変わらない速度で動いてくれたのですが、ロリポのサーバ上ではMySQLを使用するとなぜか遅くなってしまうようなのです。perlのDBIを使用しているのが原因なのかとも考えてみましたが、ローカルでの試行時ももちろんDBIを使って試行しており、その時はスムーズに早く動いたので、DBIのせいではないような気がするのですが・・ perlのDBIは処理速度が遅い、なんてことありませんよね? ロリポ上にアップすると処理が遅くなってしまう原因、どなたかご存知の方いらっしゃいましたらご教授よろしくお願いします。

    • ベストアンサー
    • MySQL
  • mySQLについて

    mySQLについての質問です。 コマンドプロンプトで起動コマンドmysqldを実行し、DBのサーバが立ち上がり、プロンプトからの入力が不可能になるのですが、数秒後サーバがダウンするせいか、プロンプトが元に戻ってしまいます。↓ C:\>mysqld C:\> なぜなのでしょうか?前まではこんなことは起きませんでした。 mySQLに詳しい方よろしくお願いします。

  • MySQL5でコマンドプロンプトでの起動/停止が出来ない

    お世話になります。 今日、MySQL5.0.21をインストールしました。 ※インストール中、パスワードを設定しました。 [コントロールパネル]-[サービス]で MySQLを自動起動または、手動で起動している場合は MySQL Administratorでログイン出来ますが、 [コントロールパネル]-[サービス]を起動していないと MySQL Administratorでログインできません。 とても不便なので、 [コントロールパネル]-[サービス]で”手動”のままで MySQLを起動しないで、コマンドプロンプトで 起動できないものかと調べると、 コマンドプロンプトで mysql[ENTER] または mysql -u root -p[ENTER]後パスワード入力 とすると、起動できると知り行ってみると、 ERROR 2003: Can't connect to MySQL server on 'localhost' (10061) と表示され起動できません。 MySQL Command Line Clientを起動し Enter password:パスワードを入力 しても、全く起動されません。 net start mysql[ENTER] と起動としても、起動できません。 MySQL5.0.21では、コマンドプロンプトでの 起動/停止は出来ないのでしょうか? Pathは C:\Program Files\MySQL\MySQL Server 5.0\bin となっています。 ご教授お願い致します。

  • DBD::Mysql が使用する標準のsocketはどこから得ているか?

    以下のようなスクリプトで、以下のようなエラーになっています。 port(socket)を指定しているにもかかわらず使用されない理由も分からないのですが、エラーメッセージのsocketはどこで設定されているのでしょうか? /etc/my.cnf で /tmp/mysql.sock を指定し、サーバーとクライアントは問題なく通信できています。 よろしくお願いします。 ■perlスクリプト ---------------------------------------- #!/usr/local/bin/perl use DBI; $user = 'usr'; $passwd = 'password'; $ds = 'DBI:mysql:db_name;host=localhost;port=/tmp/mysql.sock'; $db = DBI->connect($ds, $user, $passwd); (以下略) ■perlスクリプトのエラー ---------------------------------------- $ ./script_name.pl DBI connect('db_name;host=localhost;port=/tmp/mysql.sock','root',...) failed: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) at ./script_name.pl line 9 ■環境 ---------------------------------------- mysql:バイナリの(rpmでないやつ)4.0.24-standard OS:Linux 2.4.20-31.9(REDHAT) DBD:DBD-mysql-2.9004

    • ベストアンサー
    • Perl
  • XAMPPのMYSQLでスロークエリの出力

    WindowsXP上のXAMPPでMySQL+PHPを使用したサイト開発を行っていますが、 PHP内で実行されるSQLコマンドが正しくMYSQLへ投入されていることを確認したいと考えています。 スロークエリの機能を用いることで、MYSQLに発行されたSQLコマンドを表示できると思いますが、 XAMPPのMYSQLに対して、どのような設定を行えばよいのかわかりません。 いろいろ調べたところだと、単純にLinux上のスロークエリ設定をでは動作しないようです。 どのような設定を行えば、XAMPP上でスロークエリをファイル出力できるのでしょうか。

    • ベストアンサー
    • MySQL
  • PerlでMYSQLのデータを読む

    PerlスクリプトからMySQLのデータを読むわけですが、仮にトータル1万行のデータがある場所で9000行から100行分だけ読み込みたい場合はどのようなコーディングになるのでしょうか?(先頭から読むと効率が悪いかな) 条件は以下の通りです。 Perl:5.005-02 MYSQL:3.22.23b DBI.pm:1.5

  • RPMのmysqlとmysql-serverの違い

    レッドハットにmysqlを入れたのですが、よく使い方が分かりません^^ いつものサーバーを起動するコマンド(/etc/init.d/httpd start等)も見当たりません もう1つmysql-serverというRPMがあるのですが、こちらを入れないとダメなのでしょうか。 ひょっとして両方のRPMを入れて初めて動くとか!? mysqlとmysql-serverの違いについて分かる方教えてください。 SQLを発行して行を検索したりしたいのです。 RDBMSというのは1個のパッケージとして提供されるものだと思い込んでおったのですが、いろいろ入れないといけないのでしょうか・・・

    • ベストアンサー
    • MySQL
  • Perl DBD::Mysql

    はじめて質問いたします。 現在MovableType導入しようとしています。 ですが、ActivePerlとMYSQLを接続させる為のDBD::Mysqlが インストールができません。どなたか詳細な方法を 教えてください。 ActivePerl:5.10 windows XP Apache 2.0.63 DBIはインストールできています。 コマンドプロンプトで ppm-shell install DBD-mysql 上記を試すと下記のエラーがでます。 ppm 4.02Copyright (C) 2007 ActiveState Software Inc. Allrights reserved. ppm> install DBD-mysql Downloading ActiveState Package Repository packlist...not modified ppm install failed: Can't find any package that provides DBD-mysql Perl package managerで確認すると DBD::Mysqlはありませんでした。 よろしくお願いします。

  • DBIモジュールのインストール

    perlはインストールできています。 データベースにDBIモジュールをインストールしたいのですができません。マニュアルどおりにしてますが コマンドプロンプト→ c:\>ppm→ No Perl script found in input と表示されます。 どゆうことでしょうか? よろしくお願いします。

  • GUIアプリスタート後コマンドプロンプトのウィンドウを隠したい

    コマンドプロンプトから次のようなコマンドを入力して、 GUIアプリ(スクリプト)をスタートさせています。 (Perl/TkによるGUIアプリが起動します)    perl hoge.pl ここでhoge.plが立ち上がった後はコマンドプロンプトの 黒いウィンドウは目障りで出来れば消したいのですが そんなことはできるのでしょうか? どなたかお分かりになる方いらっしゃいましたら お教え願えませんでしょうか? どうぞよろしくお願いします。

専門家に質問してみよう