• ベストアンサー

テーブル破損チェックについて

perl(UNIX環境)において、mysqlの「myisamchk」コマンドでテーブル破損チェックを行おうとしています。 perlスクリプトにおいて @result = qx{/usr/local/mysql/bin/myisamchk テーブル名} と記述して、@resultに戻りメッセージを受けようとしていますが、@resultに戻り値がどうしても入りません。 (スカラー変数にしてもとれませんでした) 大変困っていますので、よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • angband
  • ベストアンサー率51% (86/168)
回答No.3

UNIXには「標準入出力」という考え方があります。 そして「標準入出力」の扱いはシェルによって違います。 今回は qx{} ですので自動的に /bin/sh が使われます。 2>&1 の意味は「ファイルハンドル2番(標準エラー出力) を、ファイルハンドル1番(標準出力)にリダイレクト する」ということになります。

その他の回答 (2)

  • angband
  • ベストアンサー率51% (86/168)
回答No.2

標準入力と標準エラー出力の処理についての話ですね。 qx{ myisamchk /your/foo.MYI 2>&1 } ではどうですか。

yokt
質問者

補足

迅速な回答、ありがとうございました。 2>&1 をつけてスクリプトを実行したところ うまく動き、感動しました。 さて、2>&1 というのは、どのような意味なのでしょうか。 参考書で調べてみたのですが、">&" がハンドルを コピーする程度しかのっていませんでした。 度々申し訳ございませんが、ご説明お願い致します。

  • angband
  • ベストアンサー率51% (86/168)
回答No.1

テーブル名が foo だとして、 # myisamchk /your/data/path/foo.MYI で、どうですか。

yokt
質問者

補足

# myisamchk /your/data/path/foo.MYI にて実行してみました。 変数には、 $VAR1 = 'Checking MyISAM        file: /usr/local/mysql/var/test/sample.MYI Data records: 2387 Deleted blocks: 0 - check file-size - check key delete-chain - check record delete-chain - check index reference - check data record references index: 1 - check data record references index: 2 - check record links’ が入っていますが、肝心なテーブルエラー部のメッセージ (下部のメッセージ)のみ、変数に格納されません。 /usr/local/mysql/bin/myisamchk: warning: Size of datafile is: 588450 Should be: 588400 /usr/local/mysql/bin/myisamchk: error: Found wrong record at 1244 MyISAM-table '/usr/local/mysql/var/test/sample.MYI' is corrupted Fix it using switch "-r" or "-o" どうしたらよいでしょうか。 教えてください。

関連するQ&A