いつも通り画像と内容は関係ありません [I]ただ、純粋に女子高生が好きなだけです。
さて、困ったことが起きてました。
- [課題]
- MySQL の default encoding character が “latin1“となめた設定になっていたまま、WordPress を導入してしまったのでした。とはいえ、それほどの問題にもなっていなかったので、そのときは全く気がついていなかったのです。
そこで登場、Counterize IIです。カウントというよりも、アクセス頻度や傾向を見るためだけに内部で使ってます。んが、困ったことに、検索キーワードが文字化けなんです・・・・
- [原因]
- 単純です。要するに MySQL の character set が “latin1” になっているためです。
- [対応手順]
- 次の流れになります。
- my.cnf を書き換えて、default の character set を utf8 とする。
- WordPress で使用しているDBの バックアップ (dump/export)
- MySQL の再起動
- WordPress DB の drop。
- WordPress DB の create。
- WordPress 用にユーザ権限の付与
- バックアップした 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
↑I | ただ、純粋に女子高生が好きなだけです |
---|
“MySQL バックアップ & リストア (export & import)” への3件の返信