tohnishi’s blog

四国在住のアラフォーSE。見た目はオッサン、頭脳は大人。

mysqldumpの--whereオプションについて

仕事関係で久々にMySQL(4.0.xx)を使うことになり、とあるサーバー(telnet/sshftpのみ使用可)から別のサーバー(phpMyAdminのみ使用可)にデータをインポートするという作業を行ったのだが、移行元サーバーでのmysqldump実行結果ファイルが大きすぎるために移行先phpMyAdminでの取り込みが失敗するという問題が発生した。

そこでmysqldumpのオプション--whereを使って出力を指定数ごとに分割するスクリプトを書いてみたのだが、なんかどうも上手く動作しない。いろいろ調べたり試したりしているうち、参照していたmysqldumpマニュアルの--whereオプションの説明が変ではないか、ということに思い至った。

例えばdev.mysql.com4.1系のmysqldumpコマンドのマニュアルでは、--whereオプションの記述は以下のとおりである。

-w, --where='where-condition'
選択したレコードだけをダンプする。注意: 必ず引用符で囲むこと。
"--where=user='jimf'" "-wuserid>1" "-wuserid<1"


だが実際に上記のように"--where='id >= 1 and id <= 100'"みたいなオプションを与えて実行しても、1件もこの条件にマッチする出力が得られなかった(mysqldump出力の先頭コメントには、ここで指定した条件が埋め込まれていたにも関わらず)。そこで試しに次のように変更してみたところ、今度は意図したとおりの出力結果が得られた。

--where="id >= 1 and id <= 100"

どうやらMySQL 4系の日本語マニュアルがおかしいようで、dev.mysql.comの3.23,4.0,4.1 Reference Manualや、日本語5.1のマニュアルでは--where="〜"という記述になっていた。これ以上詳しくは調べていないが、4.1以前のマニュアルの記述を引用して"--where='〜'"形式の説明をしているサイトが結構多いので、ひょっとしたらそれでも動くやり方みたいなものがあるのかも知れないが、真相はよくわからず。