Update log: Chap. 2 --MySQL backup
- Date
- 2005-11-13 (Sun)
- Category
- MovableType | Tech | Web | php
大した量ではないけれど、無くなったり、文字化けしたりしたら悲しいので、慎重に行きたい database の backup 。MySQL 自体もアップデートしたいので、これを機に db ファイル群全部再構築しようと言う魂胆。
結構良くある、と思うんだけど、MySQL は良く解ってないけど、MovableType のバックエンドでは動かしてて、そろそろ理解も深めてアップデート、なと人のために…なるかもしれません。
MovableType って結構偉いのか、バカすぎんのかよくわかりませんが、MySQL が 4.1 になってサポートした(Server サイドの)“文字コードの自動変換機能”をまったく使ってないし、使うと問題が起こる。前から 日本MySQLユーザ会 FAQ などを見て仕様変更の問題は知っていたし、理解して使えば結構使えると思っているのだけれど、MovableType の MySQL 接続はその部分決め打ち。database の内側が UTF-8 だろうとなんだろうと、Latin1 であるもんだと思ってるから、ちゃんとした UTF-8 でデータを溜めておいても、それを Latin1 で読み込んで(此の時点で文字化け)、全部 UTF-8 にさらに符号化してくれるという…この仕組みを理解するのには結構時間かかりました。まぁ下位互換性ってことかしら。
さて上でちらっと触れたように MySQL 4.1 になって“文字コードの自動変換機能”が追加されました。それまでは MovableType のように符号変換しないで(Latin1 のまま)符号化データを入れて、というのはアリだったのですし、MySQL のあらゆるパーツがそのように出来てましたが、4.1 以降はそうは行きません。全てのデータやり取りが発生する点で文字コードを気にしなくてはいけません。というわけで前回触れた本サーバーの /etc/my.cnf に以下の様な内容を書き込みます。
[mysqld]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqldump]
default-character-set=latin1
skip-opt
create-options
set-charset
hex-blob
single-transaction
master-data
わかると思いますが、簡単に書式を説明すると、カギ括弧[]内が MySQL 関連のサービス名で、その下に設定を書いて行きます。詳しくは本家 reference manual my.cnf オプション設定ファイル をどうぞ。
ポイントは mysqldump の default-character-set=latin1 ですな(後半の方は僕もよく解ってない。MyNA より引っ張りました。)。やはり。これを付けないとおそらく system 設定の utf-8 に勝手になるみたい。
これで本サーバーに溜まってるデータ(Latin1 で格納された UTF-8 のデータ)を、符号変換無しで引き出す準備完了。あとは
mysqldump -u USER -p -Q -d 'DB_NAME' > DB_NAME-tables.sql
mysqldump -u USER -p -Q -t 'DB_NAME' > DB_NAME-data.sql
として、引き出し完了。-Q オプションはテーブル名およびカラム名をクォート文字(‘`’)で囲むってやつと、-d は table 情報のみ、-t はデータのみ。詳しくは本家 reference manual mysqldump をどうぞ。なんで tables と data を分けたかと言えば、深い意味は無いですけど、その方が、後で直接いじる時に便利だから、かな。普通はしなくてもいいかも。
そうやって取り出したデータを tar なり gzip なり bzip2 なり zip なりして scp で Mac OS X にダウンロード。そのデータを伸長して、すぐにでも import したい気持ちですが、その前に check point が2点。
僕の場合、mysqlimport がどうしてもうまく行かず、mysql コマンドを使うことにした(あとで解ったけど、テキストエディタで開いた時に UTF-8 の Byte Order Mark である EF BB BF が勝手についてて、それを読めなかったっぽい。ま、いいけど。)。この章の最初に触れたように、MySQL 4.1 以降は全てのデータやり取りが発生する点で文字コードを気にしなくてはいけません。今回は UTF-8 のデータを、Latin1 に符号変換無しで入れたいので、まずは入れる側のソフト mysql の設定を、/etc/my.cnf に書きます。
[mysql]
default-character-set=latin1
そして、入れ物である database を作りますが、普通 mysqld の Default Charset は Latin1 な場合が多いです。ので database を作る際に、DEFAULT CHARACTER SET latin1 を忘れずにちゃんと選びましょう。
そして以下のコマンドを入力。
mysql -u USER -p -D 'DB_NAME' < DB_NAME-tables.sql
mysql -u USER -p -D 'DB_NAME' < DB_NAME-data.sql
これで、データのバックアップと移動のテストは出来ました。phpMyAdmin で確認してみましょう。
Comment:0
Trackback:0
- TrackBack URL for this entry
- http://blogs.grf-design.com/mt/mt-tb.cgi/125
- Listed below are links to weblogs that reference
- Update log: Chap. 2 --MySQL backup from The Croton