MySQLのdumpとrestore Ubuntu/Debian

MySQLはそれ自体では非常に高速で非常に便利なのですが、CSVとか吐き出したり読み込んだりできる!なんて思って、CSVでバックアップ取ろうとすることにおのずとなるわけですが、あれ、正直いってダメですね。文字コードがなんちゃらでとかダブルクォートがなんかおかしくなったとか何とか。ダンプとリストアは、コマンドラインでとかっとやらないとダメです。PHPMyAdminなんてものができてから、これらのコマンドがあんまり使われなくなっているのかな...と思っていたら、PHPMyAdminにも同じことがWEBの画面からできましたのでコマンドラインで使ってみてください。私個人で言えば、SSHでもってダンプとリストアするのが一番安定してていいです。

mysqldump ダンプの方法

$ mysqldump -u [username] -p [dbname] [tablename] > table_backup.sql
localhostではこれでOKです。SSHでログインしているホームディレクトリにSQL文の書かれたファイルがダンプされます。mysqlにログインしなくてもできるので、かなりいいです。
テーブル名は省略可で省略するとデータベースすべてがダンプされます。実際は以下のような感じで実行します。
# mysqldump -u root -p DB1 > DB1.sql
passwd: ******

MySQLのホストがlocalhost以外にある場合にはホスト名明示的に書かないと接続できません。
$ mysqldump -h [hostname] -u [username] -p [dbname] [tablename] > table_backup.sql
またコマンドラインではパスワードをプロンプトで出して実行するので構わないのですが、バッチ処理とかだと全部自動で走らせないとダメなのでパスワードもコマンドの中に入れてあげます。この時オプション-pとパスワードの間に半角スペース開けると失敗します。hogeというパスワードの場合は、-phogeというような書き方になるのでご注意。
$ mysqldump -h [hostname] -u [username] -p[passwd] [dbname] [tablename] > table_backup.sql

dumpと文字化け

ダンプファイルはDB自体の文字コードの設定がきちんとしていないと文字化けします。特に共有レンタルサーバーなんかのDBですと文字コードの設定がこちらからできないのでアウト。そういう場合は、オプションを追加して文字化け回避します。オプションに--default-character-set=binaryを追加します。
$ mysqldump -h [hostname] -u [username] -p --default-character-set=binary [dbname] [tablename] > table_backup.sql
だいたいこれで文字化け回避ができます。

myswql リストアの方法

今度はその逆でダンプしたものをテーブルに差し戻して元に戻します。データをぐちゃぐちゃにしても元に戻るので安心です。
$ mysql -u [username] -p [dbname] < table_backup.sql
ダンプと違うのは、先頭のmysqlのところと、テーブル名が指定されていないところです。バックアップしたsql文の中にテーブル名が明記されているので、データベースだけ指定してやればそれでOK。元に戻ってます。
PHPMyAdminでやる場合は、エクスポート、インポートのフォーマットをsql文にしてやるといいです。ダンプとリストアなのでヘタにSHIFT_JISとかにしない方がいいでです。どうせバックアップで、MySQLに入れてなんぼという話なので。

詳しくは本家。
http://dev.mysql.com/doc/refman/5.1/ja/mysqldump.html