• 締切済み

mysqldumpのwhereテーブル指定について

約1億レコードあるテーブルをWhere条件で絞ってダンプしたいのですが、下記方法でダンプすると、DBのすべてのテーブルに対応してしまう為、エラーとなってしまします。 Where条件設定時に、テーブルを指定する事は可能でしょうか? OS:CentOS6.7(64Bit) Mysql Ver:5.1.73(yumインストール) テーブル構成 テーブル名:systemevents ID : int(10) DeviceTime:datetime FromHost: varchar(60) Message:txet ◎絞り込み条件 mysqldump -uroot -p --where 'DeviceTime between '開始日' And '終了日' and FromHost Like '%ホスト名%'' 上記を実行すると、syslog以外のテーブルにも実行されるようで、下記エラーが表示されます。 mysqldump: Couldn't execute 'SELECT /*!40001 SQL_NO_CACHE */ * FROM `SystemEventsProperties` WHERE DeviceTime between 2015/08/01 and 2015/08/31': Unknown column 'DeviceTime' in 'where clause' (1054) where 条件指定じに、テーブルを指定する事は出来ないか? mysqldumpのほかに、DB構造を含めたデータを出力する方法はないか? いずれかの方法をお教え頂けましたら幸いです。

みんなの回答

  • h271015
  • ベストアンサー率71% (62/87)
回答No.3

sujino様 No1,2です。 再度のご確認ありがとうございます。 > ただ、どうも BETWEEN句が使えないみたいで、下記エラーとなります。 > mysqldump: Got error: 1049: Unknown database 'between' when selecting the database エラーメッセージの「Unknown database 'between'」からは、「between」というデータベースを参照しに行っているように見えます。 mysqldumpの構文指定に問題がある可能性もあると思いますが、念のため再度見直してみていただければと思います。 もし可能であれば、再度実行コマンド(DB名、テーブル名等の情報は伏せていただいて)をご教示いただきたいと思います。

  • h271015
  • ベストアンサー率71% (62/87)
回答No.2

No1 です。 ご確認ありがとうございます。 > 指定を、DB名.テーブル名 or DB名テーブル名 > 区切りの"."を付けるつけないで実施しましたが、上記DBが無いとのエラーとなりました。 DB名とテーブル名の間にスペースを入れて DB名 テーブル名 の形式だといかがでしょうか。

sujino
質問者

お礼

h271015様 DB名、テーブル名を半角スペースでOKでした。 有難うございます。 ただ、どうも BETWEEN句が使えないみたいで、下記エラーとなります。 mysqldump: Got error: 1049: Unknown database 'between' when selecting the database mysqldump -u root -p --where 'DeviceReportedTime' >= ’2015/08/01' and <= '2015/08/01' FromHost '%機器名称%' でも、For more options, use mysqldump --help となり ほか、’でWhere句全体をくくってみたりしたのですが、解決せきませんでした。 もし、お分かりになるようでしたら、アドバイス頂けましたら幸いです。

  • h271015
  • ベストアンサー率71% (62/87)
回答No.1

mysqldump 実行時にデータベース名&テーブル名を指定する、というやり方だといかがでしょうか? $ mysqldump -u ユーザ名 -p データベース名 テーブル名 "--where=条件'" > 出力ファイル名

sujino
質問者

お礼

h271015様 回答有難うございます。 実行してみたのですが、下記エラーでうまく行きません。 mysqldump: Got error: 1049: Unknown database 'DB名テーブル名' when selecting the database 指定を、DB名.テーブル名 or DB名テーブル名 区切りの"."を付けるつけないで実施しましたが、上記DBが無いとのエラーとなりました。 私のやり方が間違っていればお教え頂けると幸いです。

関連するQ&A