10月 28 2005

MySQL-5.0のインスコで(正確にはその後のcactiで)はまった件について。

Tag: FreeBSD, MySQLTOSHI @ 21:56:10

小さく切った /var にdbを作ったのでディスクが圧迫しててまぁ別のところに移そうかって話で、ちょうど5.0.15でGAになったし入れてみようかということに。まぁこれが後々の悲劇を生むことに…

とりあえずmysqlはportupgradeで入れ替えるだけ。後は順々に依存してるもの入れ替え。

cd /var/db/pkg
# portupgrade -M 'WITH_CHARSET=utf8 WITH_XCHARSET=all BUILD_OPTIMIZED=yes' \
 -o databases/mysql50-client mysql-client-4.1.15
# portupgrade -M 'WITH_CHARSET=utf8 WITH_XCHARSET=all BUILD_OPTIMIZED=yes' \
 -o databases/mysql50-server mysql-server-4.1.15
# mysql_fix_privilege_tables <password>
# /usr/local/etc/rc.d/mysql-server.sh restart
# portupgrade -o databases/p5-DBD-mysql50 -f p5-DBD-mysql41-3.0002
# portupgrade -f databases/php4-mysql databases/p5-Class-DBI-mysql net/cacti
# pkgdb -F

MTも動いたし…アレ、cactiのグラフが表示されない。Graph ManagementやData Sourcesでは、Showing Rows 1 to xxみたいに数は表示されるのに、実際の中身がない。んじゃ新規にグラフ作成してみようとしても存在してるみたいな感じで跳ね返される。htmlにstaticに出してる分にはグラフが出てるので、データが取れてないということもない。うーん…
ちゃんと調べれば実に簡単なことで、cactiは現時点でMySQL-5.0未対応でしたよっと。svn trunkにすらまだ入ってなくて、最新のbranch持ってきて上書きして解決。ここまで2h(’A`)

教訓、依存アプリケーションの対応状況はちゃんとチェックしましょう。cacti使いの人は、デンジャーなsvn踏みたくなければ、次のリリースまで待つのが吉


9月 01 2005

mysql tableのcharacter setと、ujis character setの扱い

Tag: MySQLTOSHI @ 14:35:55

某鯖でMySQLを4.1.13にageてから、MySQLにユーザーを追加しようとしたら何故かusername,passwordフィールドが5byteくらいで切られてしまう。もちろんloginもできない。logには

[Warning] './mysql/user' had no or invalid character set, and default character set is multi-byte,
so character column sizes may have changed

てのをはじめ、mysqlにある全tableで同じようなWarnが。ちゃんと動いている他鯖のtable statusを比較してみると、どうもCOLLATEがutf8_general_ciではないらしい。

mysql> ALTER TABLE mysql.user DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;

みたいにmysql内の全tableにセットしてみる。上記Warnはなくなったけど、

[Warning] mysql.user table is not updated to new password format;
Disabling new password usage until mysql_fix_privilege_tables is run

と怒られたのでそのまま実行。
これにて、ようやく普通にユーザー作れるようになった。古い形式のデータをそのままひきづってて悪さしたのかな?

次にはまったのは、eucを基本に作ったDBでのデータやり取り。table自体はちゃんとujisで作ってあるのに、実際INSERTとかすると化ける。
調べたら、どうもMySQL4.1では内部をUTF-8で扱うっぽい?default-charset設定すれば悩まなくて済むんだろうけど、他にblog用にUTF-8なデータも使ってるのでいぢれないし。なんかスマートな方法ないかとさらに調べたら、

SET NAMES ujis;

をやりとりの最初に流しておくといいらしい。
というのをIRCで言ったら「誰もが通る道だな」とか返されてしまった人。ソウダッタノカorz