MySQL5で文字化けと格闘

まだ、自分の中では実績のないMySQL5ですがUTF8でページ作成していたときは問題なかったのがSJISでページ作成したら思ったとおり文字化け起こしました。結局は文字列の照合を全てbinaryにして解決しましたが、いろいろと改造してしまったので確定要素がない…。(ページ作成を落ち着いたらテーブル設定以外を元に戻してみます)

◆以下は落ち着いたら元に戻す項目

php.iniを導入して言語を日本語、システムの文字コードをSJISに設定して再起動
# cp php.ini-dist /usr/local/lib/php.ini
# ee /usr/local/lib/php.ini

編集項目
[mbstring]
mbstring.language = Japanese
mbstring.internal_encoding = SJIS

/etc/my.cnfにSJISの設定を追加

[mysqld]
default-character-set=sjis

[mysqldump]
default-character-set=sjis

[mysql]
default-character-set=sjis

と設定して再起動。
MySQLにログインしたあと下記のコマンドを発行して確認。

mysql> SHOW VARIABLES LIKE ‘character_set_%’;
+————————–+——-+
| Variable_name | Value |
+————————–+——-+
| character_set_client | sjis |
| character_set_connection | sjis |
| character_set_database | sjis |
| character_set_results | sjis |
| character_set_server | sjis |
| character_set_system | utf8 |
+————————–+——-+
6 rows in set (0.00 sec)

よくいろいろな薬を試して結果直ったけれど、どの薬が効いたのか分からない…そんな状況です。(多分、my.cnfやphp.iniの設定は不要だったきがしますが…)

MySQLのrootにパスワードを設定

面倒だったのでずっと放置気味でしたが、一応MySQLのrootにもパスワードを設定。PostgreSQLはインストール時に設定したので特に問題なし。

今回使用した方法はSETコマンド

SET PASSWORD FOR root@”localhost”=PASSWORD(‘****’);

****は伏字。これならリロード不要です。(5.0で確認)

パスワードを設定した以降は-pオプションをつけないと怒られます。

# /usr/local/mysql/bin/mysql -u root mysql -p

それとSHOW FIELDS FROM より楽な DESCRIBE というコマンドを知った。
単語的に直ぐ忘れそうだなぁ…。

mysql のバックアップ

MySQLのバックアップは以前ちょっとだけメモっていたが、今回crontabに登録するためシェルに書き込む。

例:
#!/bin/sh
cd /usr/local/mysql/bin/
date=`date +%Y-%m-%d`
./mysqldump -u root -q testdatabase > /home/user1/db_backup/backup-$date.sql
rmdate=`date –date ’10 day ago’ +%Y-%m-%d`
rmfile=/home/user1/db_backup/backup-$rmdate.sql

if [ -e $rmfile ]; then
rm -f $rmfile
fi

このシェルを毎日実行すると、日付を入れたバックアップファイルを生成し11日目からは古いファイルを削除します。mysqldump の -q はメモリを節約したいため。

尚、復元する時は予めDBを一旦削除して作り直してから
# cd /usr/local/mysql/bin/
# ./mysql -u root testdatabase < /home/user1/db_backup/backup-2006-07-31.sql
とコマンド発行して回復。

参考:MySQL講座 +++[smart]
http://www.rfs.jp/server/mysql/02/07.html