MySQL バックアップ & リストア (export & import)

Pocket

いつも通り画像と内容は関係ありません [I]ただ、純粋に女子高生が好きなだけです
女子高生とケッタ
さて、困ったことが起きてました。

[課題]
MySQL の default encoding character が “latin1“となめた設定になっていたまま、WordPress を導入してしまったのでした。とはいえ、それほどの問題にもなっていなかったので、そのときは全く気がついていなかったのです。
そこで登場、Counterize IIです。カウントというよりも、アクセス頻度や傾向を見るためだけに内部で使ってます。んが、困ったことに、検索キーワードが文字化けなんです・・・・

[原因]
単純です。要するに MySQL の character set が “latin1” になっているためです。
[対応手順]
次の流れになります。

  1. my.cnf を書き換えて、default の character set を utf8 とする。
  2. WordPress で使用しているDBの バックアップ (dump/export)
  3. MySQL の再起動
  4. WordPress DB の drop。
  5. WordPress DB の create。
  6. WordPress 用にユーザ権限の付与
  7. バックアップした dump データを元に、リストア (import)

こんな流れでいけました。実際のコマンドや流れについては、次に示します。

なお、今回実施した環境は次の通り。

  • WordPress : 2.6.2
  • MySQL : 5.0.32
my.cnfの変更
/etc/mysql/my.cnf (debianの場合)に次のように追加しますよ。

1
2
3
4
5
[client]
default-character-set = utf8
[mysqld]
default-character-set = utf8
skip-character-set-client-handshake
DBのバックアップ
1
$ mysqldump データベース名 -u root -p --opt > ダンプファイル名

パスワードを要求されますので、パスワードを入れてくださいませ。
なお、データベース名を ‘-a’ とすると、全部のデータベースのバックアップがとれます。

DBの削除(drop)と作成(create)
1
2
3
$ mysql データベース名 -u root -p
mysql> DROP DATABASE データベース名;
mysql> CREATE DATABASE データベース名;

ここで、ちゃんと utf8 のデータベースができているか、次のコマンドで確認しておきます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
mysql> SHOW VARIABLES LIKE 'character\_set\_%';
+--------------------------+--------+
| Variable_name            | Value  |
+--------------------------+--------+
| character_set_client     | utf8   |
| character_set_connection | utf8   |
| character_set_database   | utf8   |
| character_set_filesystem | binary |
| character_set_results    | utf8   |
| character_set_server     | utf8   |
| character_set_system     | utf8   |
+--------------------------+--------+
7 rows in set (0.00 sec)
 
mysql> SHOW VARIABLES LIKE '%collation%';
+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database   | utf8_general_ci |
| collation_server     | utf8_general_ci |
+----------------------+-----------------+
3 rows in set (0.00 sec)

まだ、どこかに “latin1” とか残ってれば、何かがおかしいですw

WordPress 用、権限の付与
インストールした時を思い出して、データベースに WordPress 用のユーザを GRANT してあげます。しなくても大丈夫かどうかは知りません。

1
2
mysql> GRANT ALL PRIVILEGES on *.* to USERNAME@"%" identified by 'PASSWORD' with grant option;
mysql> GRANT ALL PRIVILEGES on *.* to USERNAME@localhost identified by 'PASSWORD' with grant option;

WordPress で定義しているものにあわせて、ちゃんと定義してあげてくださいまし。

DBのリストア(import)
バックアップで取得した dumpは、そのままただの SQLコマンドの羅列されているファイルなので、mysql client に食わせてあげればよいです。ちなみに、”CREATE TABLE“の前に “DROP TABLE“がついているので、データベース上にデータやテーブルが残っていたとしても、すべて exportしたときの状態に戻ります。気をつけろ。

1
$ mysql -u root -p データベース名 < ダンプファイル名

‘-a’ つきでバックアップとっているときは、データベース名を指定する必要はないはずです。

きっとこれで大丈夫w (うちは一応うまくいったわけで)

参考にしたサイト
WebObjects 5.3.1 + MySQL 5.0.19 + Mac OS X 10.4.6 + Xcode 2.2.1
MySQLのデータをバックアップする(mysqldump)

References

References
I ただ、純粋に女子高生が好きなだけです

“MySQL バックアップ & リストア (export & import)” への3件の返信

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください