Server: 2006年2月アーカイブ

MySQLでデータベースを作成します。

> CREATE DATABASE [DB名];

作成したDBに切り替えた後テーブルを作成します。

CREATE TABLE user_master (
user_id varchar(10) BINARY,
user_name varchar(30) BINARY,
user_age numeric(3),
update datetime,
PRIMARY KEY(user_id)
);

テーブルの削除

> DROP TABLE user_master

データベースのバックアップ
# mysqldump --opt -u [ユーザ名] -p [データベース名] > [バックアップファイル名]

データベースのリストア
# mysql -u [ユーザ名] -p [データベース名] < [バックアップファイル名]

 MySQLの使い始めに確認するコマンドの一覧です。以下のコマンド以降は通常のSQL文で操作します。

MySQLにログイン

# /usr/local/mysql/bin/mysql [DB名] -u [ユーザー名]

データベースの一覧を表示

> SHOW DATABASES;

データベースの切り替え

> USE [DB名]

テーブルの一覧

> SHOW TABLES;

フィールドの一覧

> SHOW FIELDS FROM [テーブル名];

ログアウト

> QUIT

 PerlやPHPからではDBIや内蔵ライブラリ任せで良いのですが、C言語では直接MySQLのライブラリを使用します。

 まずは、必要なヘッダやライブラリがどこにあるかを調べる。
# find / -name mysql.h
/usr/local/src/mysql-5.0.18/include/mysql.h
/usr/local/mysql/include/mysql/mysql.h

# find / -name libmysqlclient.so
/usr/local/src/mysql-5.0.18/libmysql/.libs/libmysqlclient.so
/usr/local/mysql/lib/mysql/libmysqlclient.so

# find / -name libmysqlclient.a
/usr/local/src/mysql-5.0.18/libmysql/.libs/libmysqlclient.a
/usr/local/mysql/lib/mysql/libmysqlclient.a

コンパイル・リンク時に-Iや-Lで指定が必要になります。
# gcc -c -I /usr/local/mysql/include/mysql/ myclient.c
# gcc -o myclient -L /usr/local/mysql/lib/mysql/ -l mysqlclient

一気にやるならこっち
# gcc -o myclient \
-I /usr/local/mysql/include/mysql/ \
-L /usr/local/mysql/lib/mysql/ \
-l mysqlclient \
myclient.c

実際のプログラムに関してはメルマガで紹介しますが、Linuxの場合出来上がったプログラムを使用する際に/usr/local/mysql/lib/mysql/をldconfigで登録しないとだめだったので動的リンクだったかも。
FreeBSDにも同じコマンドがあるのでメルマガ発行前にもう一度検証してみます。

 MySQLの自動起動をRedHatLinuxとFreeBSDの場合ではどのようにするのか、MySQLの場合ソースの中の起動スクリプトmysql.serverを使用する。

Red Hat Linuxの場合(version4.0.20の時の記録)
# cd /usr/local/src/mysql-4.0.20/support-files
# cp mysql.server /etc/rc.d/init.d/mysqld
# chmod 755 /etc/rc.d/init.d/mysqld
# chkconfig --add mysqld
# cp my-medium.cnf /etc/my.cnf

FreeBSDの場合
# /usr/local/src/mysql-5.0.18/support-files
# cp mysql.server /usr/local/etc/rc.d/mysqld.sh
# chmod 755 /usr/local/etc/rc.d/mysqld.sh

 MySQLを起動するには以下のコマンドを利用します。因みにUNIX系であれば共通内容です。

初期化(ユーザーmysqlで初期化)
# /usr/local/mysql/bin/mysql_install_db --user=mysql

起動(ユーザーmysqlで起動)
# /usr/local/mysql/bin/mysqld_safe --user=mysql &

接続(ユーザーmysqlでtestデータベースに接続)
# /usr/local/mysql/bin/mysql test -u mysql

Apache+SSL

| | コメント(0) | トラックバック(0)

 Apache2を入れたり1.3を入れたりと普段は慌しいのですが、Apache2ではmod_sslを別途手に入れなくてもSSL実装可能だった。(そういえば2年前はApache1.3+mod_sslでインストールの仕方が分けわかんなくて2にした気がする)

# ./configure --prefix=/usr/local/apache --enable-ssl --enable-module=so \
# make
# make install

これが1.3だとApacheのバージョンに一致するmod_sslを手に入れてmod_ssl内でApacheのmakeも行う。別にsslが必要なくてもバイナリで配布されているEAPIモジュールを使用したいときもこれを行う必要があり苦労しました。1.3の場合はこんな感じです。

Apache+mod_SSLのインストール方法

mod_SSLのコンフィグ(mod_SSLのソース内で実行)

# ./configure \
--with-apache=../apache_1.3.33 \
--with-ssl=/usr/ \
--enable-module=so \
--prefix=/usr/local/apache \
--enable-module=ssl

# 説明
--with-apache=(Apacheソースのディレクトリ)
--with-ssl=(sslのライブラリが存在する場所)
--enable-module=so(Apache用のコマンド)
--prefix=(Apache用のコマンド)
--enable-module=ssl(Apache用のコマンド)

Apacheのインストール

# cd ../apache_1.3.33
# make
# make install

FreeBSDの場合はとても単純で
# cp /usr/local/apache/bin/apachectl /usr/local/etc/rc.d/httpd.sh

のみでOK。

Red Hat Linuxの場合は以下のようにします。

# cp /usr/local/apache/bin/apachectl /etc/rc.d/init.d/httpd

そしてコピーしたhttpdファイルの先頭部分に以下を追加します。
# chkconfig: 3 85 15

そしてchkconfigコマンドを実行。これはrootユーザーでないと使えなかったと思います。

# chkconfig --add httpd

追加できたかどうかlistで確認

# chkconfig --list httpd

chkconfigを使用しない場合は下記のコマンドを順番に実行することで可能です。
# cp /usr/local/apache/bin/apachectl /etc/rc.d/init.d/httpd
# cd /etc/rc.d/rc3.d/
# ln -s ../init.d/httpd S99httpd
# cd /etc/rc.d/rc0.d/
# ln -s ../init.d/httpd K99httpd

Sはスタート、KはKILLの意味です。その次の数字は実行優先度だったかな。

 MySQL5.0.18をインストール

# tar zxf mysql-5.0.18.tar.gz
# pw groupadd mysql
# pw useradd mysql -m -d /usr/local/mysql -mysql -s /bin/tcsh
# cd mysql-5.0.18
# ./configure \
--prefix=/usr/local/mysql \
--with-charset=ujis \
-with-extra-charsets=all \
--with-mysqld-user=mysql
# make
# make install

 メモリーが心配で拒んでいましたが、足りなくなったら買えばいいということでインストールしてみました。元々搭載しているのが128MBでスワップは1GBなのですがコンパイル中にスワップを全て使用されてしまいました。恐くて起動できません。 orz...
 今週中には512MB搭載して、JAVAを入れる予定です。テクニカルエンジニア情報セキュリティの試験範囲に書かれているプログラミング言語がC++、Java、Perlみたいなので急遽決めました。

 昨日はデフォルトでインストールしましたが、まず起動する前にconf/httpd.confの内容をチェックします。このときに不要な設定項目は省き、セキュリティホールになりそうな項目は修正します。
 私の場合、userとgroupをnobodyに設定し、OptionのIndexesは削除、ExecCGIの追加、CGIハンドラの追加を行いました。

 因みにApache2.2.0に関しては、標準の状態でエラー画面上へバージョン情報を載せたり、マニュアルページのエイリアスや、index.htmlが『It works!』とだけ表示するものだったり色々と考慮されています。(もしかすると現在だけかも知れませんが…)。また言語関係の設定等あまり弄ることの無い項目は別ファイルに分離されていてhttp.conf自体はかなりスッキリしています。バーチャルホストやSSLも別ファイルになっておりました。尚、それらの別ファイルはconf/extra/の下にあります。但しmagicとmime.typesだけはconf/の下に残っています。初期状態の設定のコピーはconf/original/の下にあります。

 これらの設定が完了したら、
# /usr/local/apache/bin/apachectl start
で起動します。

 因みにログのローテーションはrotatelogを使用しました。Linux等ではOSにインストールされているlogrotateを使用する方法もありますが、ローテーションの度にApacheを再起動する事になるのでこちらを選択。但しrotatelogは世代管理をしないので別途過去ログを処理するプログラムを設置しないとずっと溜まり続けてスペースを圧迫します。

rotatelogを使用して毎日ログを分ける場合の設定内容。ネットではTransferLogを使ってそれを分割する例が多いのですがそれでは元々の本体がそのまま残っていて2倍スペースを圧迫するだけなので直接CustomLogに記述します。

CustomLog "|/usr/local/apache/bin/rotatelogs -l /usr/local/apache/logs/access_log.%Y-%m-%d 86400" combined

 自動起動とログの区分けについてはまた明日設定します。
ログの区分けは、ワーム等からのリクエストや、favicon.ico、検索ロボット等アクセス解析には不要なアクセスを分離するために行います。

 最近2.1シリーズが開発されているなぁと見ていたが既に2.2.0がリリースされていたのでインストールをしてみることにしました。元々準備しているサーバーではメモリーも少なくスワップ行きになりそうで恐いのですがどの道必要になってくるので導入。

 最終構成としては、セキュリティレベルを上げるためのSUEXECとSSL通信(これはゲーム用アカウントの認証に使用)

 とは言っても新しいバージョンになるので最初は標準インストール。

# tar zxf httpd-2.2.0.tar.gz
# cd httpd-2.2.0
# ./configure --prefix=/usr/local/apache
# make
# make install

インストール終了後はどのような構成か確認。
# /usr/local/apache/bin/httpd -V
Server version: Apache/2.2.0
Server built: Feb 12 2006 00:39:58
Server's Module Magic Number: 20051115:0
Architecture: 32-bit
Server MPM: Prefork
threaded: no
forked: yes (variable process count)
Server compiled with....
-D APACHE_MPM_DIR="server/mpm/prefork"
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_FLOCK_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=128
-D HTTPD_ROOT="/usr/local/apache"
-D SUEXEC_BIN="/usr/local/apache/bin/suexec"
-D DEFAULT_PIDLOG="logs/httpd.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_LOCKFILE="logs/accept.lock"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="conf/mime.types"
-D SERVER_CONFIG_FILE="conf/httpd.conf"

# /usr/local/apache/bin/httpd -l
Compiled in modules:
core.c
mod_authn_file.c
mod_authn_default.c
mod_authz_host.c
mod_authz_groupfile.c
mod_authz_user.c
mod_authz_default.c
mod_auth_basic.c
mod_include.c
mod_filter.c
mod_log_config.c
mod_env.c
mod_setenvif.c
prefork.c
http_core.c
mod_mime.c
mod_status.c
mod_autoindex.c
mod_asis.c
mod_cgi.c
mod_negotiation.c
mod_dir.c
mod_actions.c
mod_userdir.c
mod_alias.c
mod_so.c

 LAMP構成も含めて、いろいろな組み合わせがあるが現状のサーバーに負荷にならない程度に独自の開発環境を導入して見ようと検討中。そもそもサーバーが440BXチップのノートPCということもあってメモリーの増設が非常に困難だったりします。

 もうだめかと思ったら、この前ツクモ電気に行ったときにプリンストンテクノロジーのコーナーがあってそこなら検索可能という。実際に商品を見ていたら使えそうな型番があり、ネットでも検索したらヒットしました。助かるなー。

 現在はサーバーに使用しているA22mが64+64の128MBなのでメモリー増設が必要になったときは256+256構成に変えてみる予定。i1800は元々256一枚搭載しているのでWin退役したら+256MBでこちらはLinuxサーバーにする予定。

 現在使用しているOSがFreeBSDなのでLAMPでは無いのですが、PerlよりPHPの方が更に楽なのでスクリプトはPHPを使用し、データベースは需要の関係でMySQL。まぁ既にPostgreSQLを入れて稼動させているのでメモリーが心配です、最終的には物理的に3台構成にしたいのですが予算が無いのでガマン。(物理的に違うサーバー同士でシステム構成するときはDBコネクションのインストールとか苦労しそう。)

MIDI音源用ラック位に収まるサーバーってないかなー?それなら4~5台構成になってもあまり場所を圧迫しなくて済みそう。

 日付をファイル名に含んだログファイルをバッチ処理する際に前日の計算が必要になります。最初は前日の計算でネット検索していましたが、今日の日付から閏年まで考慮して自前で計算するスクリプトばかり出てきたので、なんとかもっとスマートな方法は無いかとdateコマンドの仕様を探って見つけた方法を紹介。

Linuxの場合
date --date '1 day ago'

FreeBSDの場合
date -v -1d

で前日を取得できます。
これをログファイルのフォーマットに合わせてシェルスクリプトに定義すると、

Linuxの場合
date=`date --date '1 day ago' +%Y-%m-%d`
logfile=access_log.$date

FreeBSDの場合
date=`date -v -1d +%Y-%m-%d`
logfile=access_log.$date

で解決します。

このアーカイブについて

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

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

次のアーカイブはServer: 2006年3月です。

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

ウェブページ

Powered by Movable Type 4.1