uzullaがブログ

uzullaがブログです。

mysqldumpのメモ

割とmysqldumpは便利なんだけど、割と単なるバックアップにしかつかわれていないので。(phpmyadminとかつかえばいいし…みたいな)
DBを色々書き換える作業前に、とりあえずデータ保存しておきたいな、バックアップは別にあるから、最悪のケースにそなえてちょっとだけとっておきたいな、という時の使い方のメモ

mysqldump -u root -p --disable-keys --order-by-primary -c --skip-extended-insert -w'category_id=9' database_name item_table > dump.sql

とか。

DB名と、テーブル名は勿論指定するとして、

とりあえず、戻す速度が遅いといわれようと、そんな用途ではないので、-cと--skip-extended-insert を指定しないと、エディタでサーチとか大変になるので指定したほうがよい

変更するデータのレンジが分かっているなら、-w'〜〜' を指定して、取得しておくデータのレンジをちゃんと指定しておく方がよい

--order-by-primary は趣味なんだけど、あったほうが便利じゃない??



絶対にCSVがいいよ!ということであれば(エクセル信者でもなければ、結局あんまりお勧めできないけど)

mysqldump -u root -p --order-by-primary -w'category_id=9' --fields-terminated-by=, --fields-optionally-enclosed-by=\" --lines-terminated-by="\n" --tab=/path/to/outputdir/ database_name item_table

でもよい。

でも、これめんどいのはSchemaとDataが別ファイルにでる都合上(Schemaいらなければ、-tオプションつける、でもCSVにはカラムネームとかでないので、一応出しておいた方が良いのでは?)、出力先にパイプが使えないのがだるい。
あと、-wオプションのWHERE指定がどこにも記載ないのが怖い。

まあ、SQLを置換でCSVデータに整形したほうが早いのでは…。NULLが\Nとかもキモいし



色々な理由で、というか文字コードUTF-8以外という悪夢の状態であれば、--default-character-set=binaryをつけたり、
今のサービスにあまり影響を与えたくないとか言うなら、 --lock-tables=false も必要か。(あれ、今はデフォルトFalseなんだっけ?)
あとは--disable-keys くらい?


以上。