2007.11.29 Thu

Cookieが使えない場合のSessionの使用方法

Sessionの使えないブラウザでアクセスしてくる端末に対して、Sessionを使用するには session.use_trans_sid を有効にしてあげましょう。

URLに自動的に

index.php?ssid=xxxxxxxxxxxxxxxxxxxxx

といったSessionIDをつけてくれます。

# vi /etc/php.ini
session.use_trans_sid = 0

session.use_trans_sid = 1

さてここまではごくごく一般的なSessionの持ち回りの話ですが、本日大きなカン違いに気づかされました。

今まで全てのアドレス、フォームに自動でSessionIDをつけてくれるものだと思っていたのですが、

session.use_trans_sid が有効な場合、相対URIは自動的にセッションIDを含むように変換されます。

という仕様をしりませんでした。

よく考えてみればそりゃそうですよね、外部リンクにもセッションをつけてしまうことになるので、それはそれで大問題です。

つまり絶対パスで記述しているアドレスにはSessionIDがつきません。
このおかげで全てのパスをチェックするはめになりました・・・

参考サイト

2007.11.28 Wed

Apache DocumentRoot を /home/ドメイン に変更

パッケージでインストールした場合、DocumentRootは/var/www/html/になっています。このままでは使い勝手が悪いので、/home/example_com に変更します。
example_com のようにサイトアドレスで作成しておけば、後でバーチャルホストで複数ドメインを使う場合も非常にわかりやすくなります。

example.com というアドレスでウェブにアクセスするサイトの場合の設定方法を記述しておきます。

DocumentRoot変更手順

ログイン不可のexample_comユーザを作成

# useradd -s /sbin/nologin example_com
# chmod 777 /home/example_com

Apache設定ファイルの編集

# vi /etc/httpd/conf/httpd.conf
DocumentRoot を /home/example_com に変更

<Directory "/var/www/html">

<Directory "/home/example_com">

設定を保存しApacheの再起動

# service httpd restart

これでDocumentRootの変更が終わりました。
ブラウザから正常にアクセスできることを確認してみてください。

作業途中で発生したエラー

client denied by server configuration:

<Directory "/home/example_com"> の設定を変更していなかったため、アクセスできないというエラーでした。

参考サイト

2007.11.28 Wed

ふと思ってしまった・・・たばこにまつわる話

ふと思ってしまった・・・たばこにまつわる話

システムを組んでいるとどうしても本数が多くなってしまうタバコ・・・
テレビを見ているとタバコの話をしていたので、興味心身で聞いていたら一本辺り10分寿命が縮むとか

最近では学校とかでもドラッグやタバコをすってわいけませんみたいな、内容で具体的にどうなるっていうのを教えてくれるんですね。私が見たのはそういった内容のテレビでした。

一本で10分 では私の寿命はどの程度減ったの

1日1,5箱(30本)×10分×5年=約380日

ん〜まだ1年か

さらに気になったので本当に体に悪いのだろうかということで
ガンの発生確率を調査

非喫煙者のそれぞれのガンになる確率

胃がん 1.5倍
喉頭がん 32倍〜100倍
食道がん 2.2倍
膵臓がん 2倍
肝臓ガン 1.5倍
膀胱がん 1.6倍
直腸がん 1.2倍
口腔ガン 2.6倍
子宮ガン 2倍
卵巣がん 1.2倍

さてこれはさすがにどうしようかなと・・・

一生でタバコに費やしそうなお金
これは一番興味があります。というかいくら投資することになるんだろう。
1箱320円で1,5箱なので1日の費用が480円 今後30年吸うとして

480円×365日×30年=525万6千円

・・・・・
真剣に喫煙を考えたくなります。

つまり結論からいうと30年吸うと525万払ってさらに寿命が6年短くなるという百害あって一理なしの状態ですが、やっぱりやめられない

2007.11.28 Wed

mysql_fetch_array VS mysql_fetch_assoc

mysql_fetch_array と mysql_fetch_assoc 添え字がつくかつかないかでどの程度速度に違いがでるのだろう・・・結果を見ないと夜も眠れないのでレッツチャレンジ

以下で実行したプログラムは単純にデータベースの値をselectして変数に格納するという処理を1万回ループさせた結果を比較してみました。

1回目

1.10664892197 秒 mysql_fetch_array
1.09572291374 秒 mysql_fetch_assoc

2回目

1.11120200157 秒 mysql_fetch_array
1.09469890594 秒 mysql_fetch_assoc

3回目

1.11140799522 秒 mysql_fetch_array
1.10241794586 秒 mysql_fetch_assoc

めっちゃ微妙ですが、mysql_fetch_assocがやはり早そうです。といっても誤差程度の速度差でした。

単純に配列に入るデータが多い分遅くなるということなんでしょうね。

var_dumpで表示した結果
mysql_fetch_array

array(2) {
[0]=> string(1) "1"
["KEY"]=> string(1) "1"
}

mysql_fetch_assoc

array(1) {
["KEY"]=> string(1) "1"
}

2007.11.28 Wed

フレッツ・光プレミアムにて固定IP(INTERLINK)を設定するには

フレッツ・光プレミアムにて固定IP(INTERLINK)を設定するには

自宅でサーバーを構築している人でプロバイダーが配布してる動的なアドレスをDDNSを使って通信していが、固定IPで運用してみたいという人のために、フレッツ・光プレミアムでインターリンクの固定IPを設定した時の手順を紹介しておきます。

なぜインターリンクなのか?

インターリンクを使おうと思った理由です。

  1. 1 IP 月額 2,100円 申し込みからIP発行までがとにかく早い
  2. 逆引きサービスが使える


設定手順

フレッツ・光プレミアムのサービスはNTTよりCTUという装置が設備されます。CTUに固定IPアドレスのサービスを開始する際に発行されるPPPoEを設定する事で利用する事ができます。

CTU管理画面にログインし

「詳細設定」 → 「接続先詳細設定」の編集ボタンをクリック

接続情報を入力してください。

このときインターリンクのセッションの優先順位を1にします。

※優先順位を1にしないといままで接続していたプロバイダーのアドレスになりました。

修正内容を反映されるために、CTUを再起動します。これで固定IPで運用できるようになります。ウェブサーバーなどを公開する場合は、「静的アドレス変換設定(ポート指定)」の項目で80番ポートへのアクセスをサーバーのローカルアドレスを見に行くように設定してあげましょう。

DNSの逆引きを設定する理由

逆引きの設定は行わなくても固定IPでサーバー運用することができますが、以下の理由で設定できたほうが便利がよいです。

  • 正引きと逆引きの内容が一致しない場合、メールをはじかれる場合がある。
  • 設定しない場合 固定IPのアドレス.static.zoot.jp という情報になるため、インターリックを使っているのがすぐにわかる

設定は非常に簡単で、インターリンクにログインして、設定したいIPアドレスの逆引きをウェブ上から設定することが出来ます。

参考サイト

2007.11.28 Wed

Linux ホスト名 ( hostname ) の変更方法

hostname の設定って最初設定した後どこで変えるんだっけ?ということが多々あったので、今後のためにもまとめておきます。

現在のホスト名の確認

# hostname

コマンドでホスト名変更

# hostname exsample.com(ホスト名)

変更後のホスト名の確認

# hostname

これだけのことなのに、よく忘れてしまいます・・・。

2007.11.27 Tue

APC Network Management CardにIPを設定する

APC Network Management CardにIPを設定する

APC Network Management Card を使うとUPSとの通信をネットワークで制御することが可能になります。

Network Management CardにIPを設定する方法としてWindowsから付属のAPC Network Management Card Utility Disc の中にあるソフトを使ってIPを設定します。

必要なもの

  • APC UPS の正規シリアルケーブル
  • 付属のAPC Network Management Card Utility Disc
  • Windows PC

設定手順

  • 1.UPS に Network Management Card を接続
  • 2.UPSとWindows PC をAPCの正規シリアルケーブルで接続
  • 3.APC Network Management Card Utility Disc の中のDeviceIPフォルダの中にある APC Device IP Configuration Wizard.exe をWindows PC にコピーする

APC Device IP Configuration Wizard.exe

APC Device IP Configuration Wizard 画面

  • 1. 次へ

  • 2. Loccaly(ローカルIPの設定)を選択する

  • 3. IP ネットマスク ゲートウェイを設定

  • 4. 設定完了

ウェブブラウザから管理画面へ

IPを設定するとブラウザで管理画面を表示することができます。

http://設定したIP/

デフォルトのid/pass

id : apc
pass : apc

IPが設定できたら各自環境に合わせて設定を行ってください。
設定例

2007.11.27 Tue

コマンド・関数・文字コード 参考サイト

システムを触っていると何かと良く使うコマンド&関数。全てを覚えているわけではないので、リファレンスブックを検索するのもありですが、今はウェブ上で掲載しているサイトも多いです。良く使うであろうコマンド&関数関連のサイトの紹介。

サーバー系コマンド


php 関数・参考サイト

MySQL 関数・正規化 参考サイト

文字コード表

2007.11.26 Mon

PHP5.1.6でeAcceleratorのインストール 2倍高速化

PHP5.1.6でeAcceleratorのインストール 2倍高速化

eAcceleratorについて

アクセラレータはスクリプトを解析した結果を中間コードの状態で共有メモリ上にキャッシュし、スクリプトの2回目以降の実行は構文解析を行わずに, キャッシュされた中間コードをダイレクトに読み込むことで処理を高速化しています。

巨大なソースファイルや多数のファイルをインクルードしているサイトなどでアクセラレータは絶大な威力を発揮します。

インストール環境

Centos 5
PHP 5.1.6 パッケージインストール版

php-develパッケージのインストール

# yum install php-devel
※パッケージインストールの場合のみ必要

eAcceleratorのインストール

# wget http://bart.eaccelerator.net/source/0.9.5.2/eaccelerator-0.9.5.2.tar.bz2
# tar jxvf eaccelerator-0.9.5.2.tar.bz2
# cd eaccelerator-0.9.5.2

※yumでphp-develを入れた場合

# /usr/bin/phpize
Configuring for:
PHP Api Version: 20041225
Zend Module Api No: 20050922
Zend Extension Api No: 220051025
# ./configure --enable-eaccelerator=shared --with-php-config=/usr/bin/php-config

※phpをソースからインストールしている場合

# /usr/local/bin/phpize
Configuring for:
PHP Api Version: 20041225
Zend Module Api No: 20050922
Zend Extension Api No: 220051025
# ./configure --enable-eaccelerator=shared --with-php-config=/usr/local/bin/php-config

# make
# make install

phpの設定変更

# vi /etc/php.ini

最終行に追加

[eAccelerator]
zend_extension = "/usr/lib/php/modules/eaccelerator.so"
eaccelerator.shm_size = "16"
eaccelerator.cache_dir = "/tmp/eaccelerator"
eaccelerator.enable = "1"
eaccelerator.optimizer = "1"
eaccelerator.check_mtime = "1"
eaccelerator.debug = "0"
eaccelerator.filter = ""
eaccelerator.shm_max = "0"
eaccelerator.shm_ttl = "0"
eaccelerator.shm_prune_period = "0"
eaccelerator.shm_only = "0"
eaccelerator.compress = "1"
eaccelerator.compress_level = "9"
eaccelerator.keys = "shm_and_disk"
eaccelerator.sessions = "shm_and_disk"
eaccelerator.content = "shm_and_disk"

キャッシュディレクトリの作成

# mkdir /tmp/eaccelerator
# chmod 0777 /tmp/eaccelerator

Apacheの再起動

# service httpd restart


動作確認・導入結果

<?php phpinfo(); ?> にてeAcceleratorの項目が表示されていることを確認する。

動作していることが確認できたらadベンチマークにて結果を確認


eAccelerator導入前

# ab -n 1000 -c 10 http://localhost/index.html

Concurrency Level: 10
Time taken for tests: 13.77777 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 23102000 bytes
HTML transferred: 22927000 bytes
Requests per second: 76.47 [#/sec] (mean)
Time per request: 130.778 [ms] (mean)
Time per request: 13.078 [ms] (mean, across all concurrent requests)
Transfer rate: 1725.06 [Kbytes/sec] received

eAccelerator導入後

# ab -n 1000 -c 10 http://localhost/index.html

Concurrency Level: 10
Time taken for tests: 6.798706 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 23102000 bytes
HTML transferred: 22927000 bytes
Requests per second: 147.09 [#/sec] (mean)
Time per request: 67.987 [ms] (mean)
Time per request: 6.799 [ms] (mean, across all concurrent requests)
Transfer rate: 3318.28 [Kbytes/sec] received

Requests per second: 1秒間に処理されたリクエスト数。


はまったところ・・・

/var/lib/php/session

ディレクトリに設定していた所有者の設定がrootに戻ってしまっていた。apacheを実行しているユーザーの権限を与えてやらないとsessionファイルが作れなくなりセッション変数が使えない状態ではまりました。

参考サイト

2007.11.26 Mon

カライ、カライ、カライ、うまい

カライ、カライ、カライ、うまい

現在はまっている激辛カレー
LEE×20
もう辛くて辛くて苦いんじゃないかってくらい辛くてうまいです。

なんでこんなにおいしいんだろう・・・
システムを組んでいる時の合間にたべるLEEは格別です。

2007.11.24 Sat

Apacheから送信するファイルを圧縮して3倍高速化

Apacheから送信するファイルを圧縮して3倍高速化

Apache 2.0でコンテンツの圧縮転送を行うとどの程度パフォーマンスがアップするのかを実際に計測してみました。

設定環境

  • Apache 2.2 パッケージインストール版
  • PHP 5

Apache 設定ファイルの編集

不要な圧縮は省くようにし、圧縮転送の機能を有効にします。

vi /etc/httpd/conf.d/deflate.conf

<Location />

# 圧縮転送の有効化
AddOutputFilterByType DEFLATE text/html text/plain text/xml

# Netscape 4.xの場合はtext/htmlのみ圧縮
BrowserMatch ^Mozilla/4 gzip-only-text/html

# Netscape 4.06-4.08の場合は圧縮しない
BrowserMatch ^Mozilla/4\.0[678] no-gzip

# MSIEの場合は全て圧縮
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html

# プロキシサーバーが圧縮未対応ブラウザへ圧縮ファイルを送信しない
Header append Vary User-Agent env=!dont-vary

</Location>

設定の反映

# service httpd reload

有効後の結果

全てのページでというわけではありませんが、3分の1から2分の1程度のファイルサイズで表示できるようになり、体感できるほどの表示速度のアップになりました。

圧縮転送の計測に使ったサイト

今回圧縮転送の計測に使ったサイト

URLを入力し、計測結果を確認します。
Compression statusの項目で

Compressed(gzip)

と表示されていれば、圧縮転送が正常に行えています。その下は転送結果なので、成果を確認することができます。

設定参考サイト

2007.11.19 Mon

HDDの命が消えそうです・・・

smartd からHDDがやばいですってエラーが出るようになりました
HDDも所詮消耗品 近々買い換えてあげようかなと思います。

Device: /dev/hda, 2 Currently unreadable (pending) sectors

5年間がんばってくれたHDDに感謝です。そして通知してくれたsmart最高

参考サイト

2007.11.18 Sun

MySQL レプリケーション の設定

動作環境

  • Centos 5
  • MySQL 5.0.22 (Master,Slave)

マスターサーバーにレプリケーション用ユーザ作成

通常レプリケーションを行う場合、レプリケーション専用のユーザーを作成します。このユーザーはスレーブがマスタに接続するためのユーザーになります。最低限、与えなければならないのはREPLICATION SLAVE権限です。

mysql> GRANT REPLICATION SLAVE ON *.* TO repl@'192.168.1.0/255.255.255.0' IDENTIFIED BY 'パスワード';

マスタサーバで更新ログを有効にする

# vi /etc/my.cnf

[mysqld]
#replication
# バイナリログを有効
log-bin=mysql-bin
# MySQL識別番号の設定
server-id = 1

設定修正後にmysqlを再起動しておきましょう。

# service mysqld restart

マスタデータのスナップショット作成

テーブル情報が更新されないようにマスタをロックします。

mysql> FLUSH TABLES WITH READ LOCK;

マスタデータのスナップショットの作成

# cd /var/lib/mysql
# tar cpf /var/tmp/mysql-snapshot.tar .

マスタのロック解除

mysql> UNLOCK TABLES;

マスタのバイナリログの位置情報を確認

mysql> SHOW MASTER STATUS;

| File | Position | Binlog_do_db | Binlog_ignore_db |
| mysql-bin.000001 | 1234 | | |

Positionの数字を確認しておきましょう。スレーブでレプリケーションを開始するためにどの状態からの同期かを設定するのに必要になります。

スレーブにマスタデータのスナップショットを設定

まずスレーブサーバーが起動しているようであれば、停止させてください。

# service mysqld stop

マスタからコピーしたtarファイルをMySQLのデータディレクトリと入れ替えるように展開します。

# cd /var/lib/mysql
# rm -fr *
# tar xpf /usr/local/src/mysql-snapshot.tar

スレーブサーバーの設定変更

# vi /etc/my.conf

[mysqld]
server-id=2
master-host=マスタサーバーIP
master-user=repl
master-password=パスワード

レプリケーションの開始

マスタのサーバーを起動した後に、スレーブのサーバーを起動してください。自動でスレーブが開始されるようになっている場合は、

mysql> stop slave;

でレプリケーションの処理をとめて、以下の処理を実行します。

mysql> CHANGE MASTER TO
-> MASTER_HOST = 'マスタサーバーIP',
-> MASTER_USER = 'repl',
-> MASTER_PASSWORD = 'パスワード',
-> MASTER_LOG_FILE = 'mysql-bin.000001',
-> MASTER_LOG_POS = 1234;

MASTER_LOG_POS には Position の番号を指定してください。
処理実行後に

mysql> start slave;
mysql> SHOW MASTER STATUS;

上記処理実行結果画面にてエラーが発生していない場合はレプリケーションが正常に開始されているので、マスタサーバーのデータを追加・修正して、リアルタイムに情報がスレーブに反映されるか確認してください。

レプリケーションについて参考サイト

2007.11.17 Sat

Centos5にてIPv6の停止作業

Centos5にてIPv6の停止作業

Centosのインストール時にIPv6サポートを有効にするのチェックを外してIPv6を停止したつもりでいたのですが、ifconfigで確認したところ

inet6 addr: aaaa::bbbb:cccc:dddd:eeee/64

IPv6のリンクローカルアドレスが表示されてるんですよね・・・。

これってIPv6が停止されていないのでは??

IPv6 を停止する

# vi /etc/modprobe.conf
alias net-pf-10 off ← 追加

# vi /etc/sysconfig/network
NETWORKING_IPV6=no ← yes から no に変更

でネットワークを再起動すれば反映されると思っていたのですが、

# service network restart

では反映されませんでした。OSレベルで再起動を行ってifconfig にてIPv6が無効になっていることを確認してください。

# init 6


ip6tablesのサービス停止

IPv6が無効になったらip6tablesも不要なので無効にしましょう。

# service ip6tables stop
# chkconfig ip6tables off

2007.11.17 Sat

phpMyAdmin インストールログ

phpMyAdmin インストールログ

phpMyAdminとは

WebブラウザからMySQLデータベースを管理するためのPHPで記述されたソフトウェアです。
phpMyAdminを使用してWebブラウザからMySQLのテーブル操作、インポート・エクスポートすることが出来ます。

Apacheのインストールの違いによるパスの確認

Apache + PHP + MySQLがインストールされていること
※ソース、パッケージどちらでもかまわない

ソースの場合のウェブ公開ディレクトリを

/usr/local/apache2/htdocs/

パッケージの場合のウェブ公開ディレクトリを

/var/www/htdocs

とする

今回はソース版のディレクトリパスでインストールを行います。

phpMyAdminインストール

# svn checkout https://phpmyadmin.svn.sourceforge.net/svnroot/phpmyadmin/tags/STABLE/phpMyAdmin phpmyadmin
# mv phpmyadmin/ /usr/local/apache2/htdocs/

phpMyAdmin設定

# cd /var/www/htdocs/phpmyadmin/
# cp config.sample.inc.php config.inc.php
# chmod 660 config.inc.php 

# vi config.inc.php

$cfg['blowfish_secret'] = '任意のパスワードを設定';
認証をクッキーにする
$cfg['Servers'][$i]['auth_type'] = 'cookie';

# chown -R root.daemon /usr/local/apache2/htdocs/phpmyadmin/
※*.daemon ←apacheの動作しているuser,groupに合わせる

動作確認

http://サーバーアドレス/phpmyadmin/

2007.11.15 Thu

Dell 純正 Raid SAS5iR(PCI Express) 運用について

Dell 純正 Raid SAS5iR(PCI Express) 運用について Dell 純正 Raid SAS5iR(PCI Express) 運用について

Raid を構成する場合は、同じハードディスク(同一の型番)をRaid Adapterに接続してください。Raidの再構築の場合も同じです。

※BIOSのバージョンによって設定手順が多少ことなります。

SAS BIOS起動

Raid Adapter搭載のサーバー起動時に

Press Ctrl-C to run SAS Configuretion Utility...

と表示されたら Ctrl + C でBIOS画面を起動させる

SAS BIOS設定ユーティリティが開くと、まず [Adapter List] 画面が表示されます。

Adapter list
Adapter PCI PCI PCI FW Revision Status
Bus Dev Fnc
SAS1068 03 01 00 1.15.00.00-IR Enabled

RAID1(ミラー)の新規構築

構成に使うHDDがすべて新品の状態のもので新規にRAID1を構成するときの手順

  • Adapter SAS1068 を選択しEnterキーを押すと [Adapter Properties] 画面が表示されます。
  • RAID Properties を選択しENTERキーを押します。
  • RAID1ボリュームを作成するので [create IM Volume] を選択して、[Enter]キーを押します。

Select New Array Type -- SAS1068
View Existing Array View the existing configuration.

Create IM Volume Create Integrated Mirror Array of 2
disks plus an optional hot spare. Data
on the primary disk may be migrated.

  • [Create New Array] メニューが表示されたら、アレイボリュームを構成させる1番目のディスク表示欄にある [RAID Disk] を矢印キーで選択し、[+]キーを押してStatus を Primary に変更しアレイメンバーとして選択します。
  • 引き続き2番目のディスク表示欄にある [RAID Disk] を矢印キーで選択し、[+]キーを押してStatus を Secondary に変更しアレイメンバーとして選択します。

Bay Device Identifier RAID Hot Drive Pred Size
Num Disk Spr Status Fail (MB)
1 HDD Yes No Primary No 12345
2 HDD Yes No Secondary No 12345

  • メンバーディスクを選択したら、[C]キーを押します。
  • [Create and save new array?] と表示されたら、[Save changes then exit this menu] を選択してEnterキーを押します。
  • アレイボリューム作成を実行するには[F3]キーを押します。
  • 設定ユーティリティがボリュームの設定をおこなっている間、画面には [processing...takes up to 1 minute] というメッセージが表示され、[Adapter Properties] 画面が表示されたら、ボリュームの作成は終了です。

ディスク容量にもよりますが、構成完了まで約1時間かかります。

  • 構成が完了したら [Exit the Configuration Utility and Reboot.] を選択し、[Enter]キーを押します。コンピュータは再起動されます。

RAID Properties 画面で

Status Optimal

となっていれば正常に同期が取れている状態です。

RAID構成について参考にさせていただいたページ

2007.11.14 Wed

ホームページの飾り付けに Lightbox 2

ホームページの飾り付けに Lightbox 2

ajaxが最近流行していますが、Lightbox 2もその一つ。ここまで高性能な機能をフリーで提供しているあたりが素晴らしい。

機能としては拡大画像をアクション付でかっこよく表示してくれるというやつです。

百聞は一軒にしかずということで、


参考サイト

2007.11.14 Wed

コピーライトの表示が簡単に変更できるちょっとした工夫

ホームページでは一番下にコピーライトを入れるのが常識ですが、運用年月を入れている場合、年が変わるたびに全ページ更新するのは大変ですよね?そんな人のためにコピーライトの簡単な表示方法を紹介します。

外部ファイルからコピーライトの文章を表示させる方法

<?php include('外部ファイル); ?>

外部ファイルに 「 Copyright &copy; 2004-2007 All Right Reserved. 」を記述しておき、表示させるだけ。年が変わるたびに外部ファイルの記述を変更すれば、最新のコピーライトが表示されるようになります。

phpで動的に表示させる場合

Copyright &copy; 2004- <?php echo date(Y); ?> All Right Reserved.

この方法で記述しておけば自動的に表示が変わるので、手間いらずです。

実際に表示されるコピーライト

Copyright &copy; 2004-2007 All Right Reserved.

2007.11.14 Wed

timestamp表記の日付を簡単にわかりやすい表現にするには

1192368596 といったtimestamp表記の日付では何年の何月なのかさっぱりわかりません。

システム上ではphpなどで変換をかけて見やすい書式に変更していると思うのですが、データベースを直接見ているときにこのtimestampって日付いつなんだろうと思うことがあります。

MySQLでtimestampを変更

SELECT FROM_UNIXTIME( 1192368596 );
結果 2007-10-14 22:29:56 が返ってきます。

phpでスクリプトを書かなくても、MySQLのクエリで確認可能です。

理想としてはphpなどでフォーム入力することで、日付を変換して表示してくれるプログラムを持っておくのが一番いいですが、場合によっては使えない場合もあるので、状況にあった使い方をしてください。

2007.11.13 Tue

PHP+MySQLのmysql関数をmysqliに自動変換するツール

PHP+MySQLのmysql関数をmysqliに自動変換するツール

PHP5では,従来から含まれているmysql拡張モジュールに加えて,MySQL 4.1以降で定義される新しいAPIをサポートする拡張モジュールmysqliが追加されています。

実際mysqliって何がすぐれているの?ということなのですが、

  1. オブジェクトAPIと関数APIの2種類のAPIを使用可能
  2. 実行処理を効率化・高速化できる。
  3. MySQLクライアント・ライブラリの高度な接続オプションを指定可能


全てのファイルを修正していくのは非常に時間のかかる作業です。そこで簡単にアップグレードできるスクリプトがないかと探してみたらやっぱりありました。

機能について

  • ディレクトリ内のファイルの一括置換
  • 特定のファイルのみの置換
  • 置換作業時の自動バックアップファイル作成機能

手動で更新作業をするより短時間で、しかもミスすることなく修正することが可能になります。

mysql から mysqli に移行を考えている人はこのスクリプトを使ってみるといいかもしれません。

参考サイト

2007.11.10 Sat

Apacheのエラーログについて

ふとApacheのエラーログを見てみるとfavicon.icoとrobots.txtが見つからないというエラーが大量にでているのを発見!

もちろん設定していないので、見つかるわけもありませんが、無駄なログなので、favicon.icoとrobots.txtを所定の位置に設定するかログを出力しない設定に変えましょう。


拡張子.icoのアクセスをエラーに出力しないようにするには、Apacheのhttpd.confに、

SetEnvIf Request_URI "\.(gif)|(jpeg)|(jpg)|(png)|(ico)$" no_log
CustomLog logs/error_log common env=!no_log

上記のようにicoファイルを出力しないよう指定する

参考サイト

2007.11.09 Fri

phpMyAdmin ログイン後に出るエラー対策

phpMyAdmin ログイン後に出るエラー対策

ログイン後に「mcrypt 拡張をロードできません。PHP の設定を確認してください。」というエラーがでたので、mcryptをインストールする。

# yum install php-mcrypt

インストール後にエラーが出ていないことを確認する。

関連サイト

2007.11.09 Fri

MySQL チューニングポイントをアドバイスツール

MySQL チューニングポイントをアドバイスツール

mMeasureは、MySQLの状態を常時測定し、MySQLのチューニングポイントをアドバイスする、MySQL専用モニタリングソフトです。



設定環境

  • CentOS5
  • php apache mysql パッケージインストール済み



rpmforgeリポジトリの設定

ダウンロード
# wget http://dag.wieers.com/rpm/packages/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
インストール
# rpm -Uvh rpmforge-release-0.3.6-1.el5.rf.i386.rpm
基本リポジトリとのパッケージ競合を避けるため、デフォルトは無効にする
# sed -i 's/enabled = 1/enabled = 0/g' /etc/yum.repos.d/rpmforge.repo

RRDtoolインストール

# yum -y --enablerepo=rpmforge install rrdtool

Jcodeパッケージのインストール

# cpan2rpm --install Jcode

mMeasureのインストール

# wget http://keihanna.dl.sourceforge.jp/mmeasure/18557/mmeasure-1.0.7.tar.gz
# tar vzfx mmeasure-1.0.7.tar.gz
# mv mmeasure /usr/local/

Apacheの設定

# vi /etc/httpd/conf.d/mmeasure.conf

Alias /mmeasure/ "/usr/local/mmeasure/web/"
<Directory /usr/local/mmeasure/web/>
order deny,allow
deny from all
allow from 127.0.0.1
allow from 192.168.0.0
</Directory>


mMeasureの設定

# cd /usr/local/mmeasure/
# cp mmeasure_template.conf mmeasure.conf

設定ファイルの編集

# vi mmeasure.conf
※最低限変更・確認が必要な箇所

#MySQL関連部分
#------------------------------------------------------
# MySQL
#------------------------------------------------------
MYSQL_HOST=localhost
MYSQL_USER=mmeasure
MYSQL_PASSWORD=****

#-------------------------------------------------------
# Mail
#-------------------------------------------------------
MAIL_HOST=mail.com
MAIL_FROM=info@mail.com
MAIL_TO=info@mail.com
MAIL_CC=info@mail.com
MAIL_BCC=

# RRDToolのパス
#----------------------------------------------------------
# Pathes
#----------------------------------------------------------

PATH_RRDTOOL="/usr/bin/rrdtool"

WEBDIR="$PATH_MMEASURE/web/images/graphs"
WIDTH="400"
WIDTH_SMALL="400"
WIDTH_LARGE="400"
HEIGHT="100"
HEIGHT_SMALL="100"
HEIGHT_LARGE="100"



MySQLにmMeasureユーザー作成

# mysql -u root -p
Enter password:
mysql> grant all on *.* to mmeasure@localhost identified by 'パスワード';
Query OK, 0 rows affected (0.03 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.02 sec)

mMeasure 起動

# cd /usr/local/mmeasure/daemon/
# ./mmeasure.sh start
Starting mMeasure daemon...
Checking
Configurations: '/usr/local/mmeasure/daemon/../mmeasure.conf'...
Evaluating arguments...
Entering daemon mode...


起動できなかった場合

Can't locate DBI.pmと出力された場合DBI.pmをインストール

yum -y install perl-DBI

インストール後に再度mMeasureを起動してみる

参考サイト

2007.11.08 Thu

ExpressCard(エクスプレスカード)について

PCカードに代わるパソコン用小型カード型インターフェース、およびその規格による拡張カードらしいです。

一般的に使われているPCカードのスロットと形状が違うためPCカードを挿入することが出来ません。



今日知り合いのノートパソコンをインターネットにつなげて欲しいということで出向いたのですが、見たこともないインターフェースに正直と惑いました・・・

未だ未対応のメーカーも多く、唯一発見したのがWillcomの

ExpressCardスロットでインターネットにつなぎたい方は上記のようなExpressCard対応のものを使うようにしましょう。

2007.11.08 Thu

phpinfoの色々な使い方

絶対パスがわからないときに・・・

レンタルサーバーなど自分で構築した環境でないサーバーにシステムを設置する場合、絶対パスがわからないことがあります。

そんな時便利なのが

<?php phpinfo(); ?>

phpinfo()を表示させたファイルまでの絶対パスがブラウザ上で確認できるので、非常に便利です。

パラメーターのチェックに

通常 <?php phpinfo(); ?> としてシステムの状態をチェックすることに使うことが多いと思いますが、phpinfo に引数を設定することで、パラメーターを表示してくれるようになります。

<?php phpinfo(32); ?>

環境変数・GET・POST・クッキー・サーバ変数から すべての 定義済みの変数を表示してくれます


 phpinfo

定数表示 関連サイト

 var_dump

2007.11.08 Thu

特定のファイル以外にベーシック認証をかける方法

.htaccessファイルに以下を記述

特定のファイル以外にベーシック認証をかける方法

AuthUserFile /絶対パス/.htpasswd
AuthGroupFile /dev/null
AuthName "Input ID and Password."
AuthType Basic
require valid-user
<Files "sample.html">
Satisfy Any
</Files>


参考サイト

2007.11.03 Sat

Smart-UPS 1000 について

Smart-UPS 1000 について Smart-UPS 1000 について

Smart-UPS 3000RM 2U 詳細

apcupsd を使ってShutdown 制御 (シリアルケーブル Centos5)

apcupsd インストール

# wget http://jaist.dl.sourceforge.net/sourceforge/apcupsd/apcupsd-3.12.3.tar.gz
# tar zvfx apcupsd-3.12.3.tar.gz
# cd apcupsd-3.12.3
# ./configure --enable-cgi --with-cgi-bin=/etc/apcupsd/cgi
# make
# make install



設定ファイルの編集

$ vi /etc/apcupsd/apcupsd.conf

  • シリアル接続の場合は設定を修正しなくても接続可能。



起動

# service apcupsd start



自動起動設定

# chmod 755 /etc/rc.d/init.d/apcupsd
# chkconfig --add apcupsd
# chkconfig --list apcupsd
apcupsd 0:off 1:off 2:on 3:on 4:on 5:on 6:off



状態確認

apcaccess status

  • 正常に通信している場合は、「 STATUS : ONLINE 」 と表示されます。



動作テスト

  • UPSのコンセントを抜くと「 Warning power loss detected on UPS UPS名 」と表示
  • TIMEOUTで設定した秒数 以内に復旧したら「 Power failure on UPS名. Running on batteries. 」と表示
  • TIMEOUTで設定した時間でシャットダウンすることを確認する


ブラウザからUPSの状況を確認

  • apacheの設定ファイルに以下を記述

ScriptAlias /apcupsd/ /etc/apcupsd/cgi/
<Directory /etc/apcupsd/cgi/>
Options ExecCGI
#order deny,allow
#deny from all
#allow from 127.0.0.1
allow from all
</Directory>

  • http://アドレス/apcupsd/multimon.cgi にアクセスして状態を確認
  • ※ apcupsd が正常に起動できていない場合は 「 Not available: upsfetch: tcp_open failed for 127.0.0.1 port 3551 」というエラーが表示されます。

バッテリ交換について

2007.11.03 Sat

MySQL パフォーマンスチューニング

現在実行中の mysqld サーバがある場合は、次のステートメントで変数に実際に使用されている値を調べることができます。

mysql> SHOW VARIABLES;

スロークエリをログに出力する

/etc/my.cnfの[mysqld]セクションに記述

long_query_time=2
log-slow-queries=/var/log/slow.log

設定例

2秒以上処理に時間がかかったクエリは指定したログファイルにクエリを出力する

MySQLのクエリキャッシュを有効にする

/etc/my.cnfの[mysqld]セクションに記述

query_cache_limit=1M
query_cache_min_res_unit=4k
query_cache_size=32M
query_cache_type=1

設定の確認

SHOW STATUS LIKE 'Qcache%'

設定確認時の項目の説明

Qcache_free_blocks:空きメモリブロック数
Qcache_free_memory:空きメモリ。
Qcache_hits:キャッシュにヒットしたクエリ数。
Qcache_inserts:キャッシュに保存したクエリ数。
Qcache_lowmem_prunes:メモリ不足で削除されたクエリ数。
Qcache_not_cached:キャッシュされなかったクエリ数。
Qcache_queries_in_cache:キャッシュに存在するクエリ数。
Qcache_total_blocks:合計ブロック数

クエリキャッシュのヒット率算出

query cache hit 率 = Qcache_hits / ( Qcache_hits + Qcache_inserts + Qcache_not_cached ) * 100

クエリキャッシュの動作

クエリは解析前に比較されるため、

SELECT * FROM table_name

Select * from table_name

は、クエリキャッシュで別のクエリとみなされます。完全に一致する(各バイトが)クエリ以外、同一とはみなされません。

参考サイト

システム構築に関する覚書トップページへ