Server: 2006年11月アーカイブ

 またくだらないことに時間をつぶされた。orz
先日、レコードの照会を全てbinaryにすることで一応PHPからの入出力に文字化けの問題がなくなったのだが、相変わらずphpMyAdminがcharset=utf-8でページ出力するためにphpMyAdmin上でSJISデータが入力できないだけでなく、複数のレコードを選択したりすると画面上でタグが破壊されて操作不能に陥る。MySQL4.0の時はメインページのLanguageで『日本語 - Japanese(sjis)』を選択すればよかったのがMySQL5だと『日本語 - Japanese』しかなくそれがutf-8になっている。リストを見た感じ他の言語も全部utf-8しか選べないようになってるようだ。

 それでhttpヘッダの方charset設定はどこだろうとgrepを駆使して探していたらどうもconfigになくてlibraries/database_interface.lib.phpにそれらしき記述がある。でもconfigでないのであまり弄りたくないので、ググって見ることにしたら…。やっぱりここしかないのか…。

 要するにMySQL4.1以上はlibraries/database_interface.lib.phpを使用しないように分岐されていました。ということで以前のようにShift-JISやEUCを選択したときは、PMA_DBI_postConnect関数内のif (PMA_MYSQL_INT_VERSION >= 40100)を無効にしてelse部分だけを残しましょう。

function PMA_DBI_postConnect($link, $is_controluser = false)
{
   (省略)
/* ←バッサリとコメントアウト
if (PMA_MYSQL_INT_VERSION >= 40100) {
   (省略)
} else {*/
require_once('./libraries/charset_conversion.lib.php');
//}

こうすれば分岐無視でcharset_conversion.lib.phpを読み込みます。

追記:
『if (PMA_MYSQL_INT_VERSION >= 40100) {』を『 if (false) {』にするだけでよかったな…。

参考:cl.pocari.org - MySQL 4.1.x な環境で phpMyAdmin を EUC-JP で使う方法
http://cl.pocari.org/2006-06-17-1.html

sshログインの許可
# ee /etc/ssh/sshd_config

AllowUsersの項目に並べて追加
AllowUsers user1 user2

FreeBSDでの再起動
# kill -HUP `cat /var/run/sshd.pld`

 まだ、自分の中では実績のない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の設定は不要だったきがしますが…)

 ファイル改変を含む侵入検知を行う場合は、通常IDS(Intrusion Detection System:侵入検知システム)を使いますが、結構これがファイヤーウォール以上に負荷が高く導入するとパフォーマンスを維持するコストが跳ね上がります。

例えば/home/user/ 直下で24時間以内に変更されたファイルを検出するには

# find /home/user/ -maxdepth 1 -mtime -1

と打ちます。maxdepthで検索ディレクトリからfindで検索する階層を指定(1なら直下、2なら直下のサブディレクトリの下まで)、mtimeで-1は1日以内、+nにするとn日以上になります。

また、mtimeの代わりにmminを使用した場合は単位は分になります。

# find /home/user/ -maxdepth 1 -mtime -1440

これをcron等に登録して定期実行しメールで渡してあげればファイル変更を検出できます。
これは外部からの侵入よりもソーシャルハッキングの検知やオペレーションミスの早期発見によいかもしれません。

 1GB弱のsqlダンプを編集する必要があってterapadで開こうとしたのですが、デスクトップでもダメでした。一度どこかにダミーサーバーを立てて必要な部分だけ抽出という作戦もありましたがバージョン互換性のあるDBが無くて困っていたところUNIX上でsplitコマンドを使いテキスト分割できることを発見。

行を一区切りとする場合
# split -1000 filename SPLIT

こうするとfilenameを1000行ずつSPLITを先頭文字とした分割ファイルが生成されます。
これを行数ではなくバイト数で分割する場合は

# split -b 1048576 filename SPLIT
# split -b 1024k filename SPLIT
# split -b 1m filename SPLIT

のようにします。上記3つのコマンドは単位を替えて表記したもので全て同じ意味になります。
1m=1024k
1k=1024bytes
1m=1048576bytes

このアーカイブについて

このページには、2006年11月以降に書かれたブログ記事のうちServerカテゴリに属しているものが含まれています。

前のアーカイブはServer: 2006年10月です。

次のアーカイブはServer: 2007年1月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 4.1