PHP5.2 & mysql5.0

Back

 使ってみるとなかなかベンリーなPHPのコンパイルのメモ。mysql-5と連携。とりあえずapache2のDSO対応でコンパ イル インストール。



【mysql-5】
 まずmysqlインストール。PHP-5.2の仕様かmysqlのthread-safeクライアントというのをビルドしないといけないので--enable-thread-safe-clientを 付けて最適化。

 以前に古い分をインストールした/されている場合、/usr/local以下に以前の物が残っていることもあるので、削除 なり事後にリンク貼りなおし等をすること。

 以前のDBをダンプ出力して保存。手動で以下のようにする。もしくはphpMyAdminで抜き出したほうが色々出力設定もいじれて確実、かつ楽。

% mysqldump -A -uroot -pパスワード -Q --opt -rバックアップファイル名 #手動ダンプ

 で、最適化、コンパイル。
% sudo mkdir -p /usr/local/mysql-5.0.27
% sudo rm -rf /usr/local/mysql
% sudo ln -s /usr/local/mysql-5.0.18 /usr/local/mysql
% ./configure --prefix=/usr/local/mysql \
--localstatedir=/usr/local/mysql/data \
--with-charset=binary ¥\
--with-extra-charsets=binary,utf8,cp932,eucjpms,ujis,ucs2,latin1 \
CFLAGS="-O3" \
--enable-thread-safe-client
% make
% sudo make install
% sudo ln -s /usr/local/mysql/bin/mysql* /usr/local/bin #/usr/localにリンク貼り(古い分に注意)
% sudo cp -rf support-files/mysql.server /usr/local/mysql
% sudo chmod +x
/usr/local/mysql/mysql.server
% sudo ./scripts/mysql_install_db # 基本DB作成
% sudo chown -R mysql /usr/local/mysql/data #アクセス権変更
% sudo chgrp -R mysql /usr/local/mysql/*

SystemStarterの設定
% sudo mkdir /Library/StartupItems/MySQLCOM
% sudo cp -rf support-files/MySQLCOM /Library/StartupItems/MySQLCOM
% sudo cp -rf support-files/StartupParameters.plist /Library/StartupItems/MySQLCOM
/etc/hostconfigに
MYSQLCOM=-YES-
の一行を追加

% sudo SystemStarter start MySQL # mysql起動

以下mysql起動後の設定

% mysqladmin -u root password 'パスワード' #rootパスワード設定
% mysqladmin -u root -h localhost password 'パスワード' #rootパスワード設定

% mysql -uroot -pパスワード < バックアップファイル名 #手動でバックアップからインポート/又は phpMyAdminでインポートがお奨め
% mysql_fix_privilege_tables -uroot -pパスワード #必要なら実行(4.1以下のDBから移行時)

% mysql -uroot -pパスワード #mysqld にログイン
mysql> delete from mysql.user where user=''; #空ユーザ削除
mysql> grant select,insert,delete,update,create,drop,file,alter,index on *.* to ユーザ名 identified by 'パスワード'; #任意のユーザ追加
mysql> flush privileges; #仕上げ
mysql> exit


その他mysql内での操作例
#DB選択
mysql> use mydb;
#DB削除
mysql> drop mydb;
#使用可能なDB一覧
mysql> show databases;
#現在どのユーザで接続しているか確認
mysql> select user();
#ユーザ一覧
mysql> use mysql;
mysql> select host,user from user;
#ユーザ「myuser」について許可コマンド、 localhostからのみ受け付け、mydbのみ操作可能、パスワード「mypass」で認証、にする権限設定(grant)
mysql> grant select,insert,update,delete,index,create on mydb.* to myuser@localhost identified by 'mypass';

#接続者のパスワード変更
mysql> set password=password('パスワード');
#特定ユーザのパス ワード変更
mysql> set password for myuser@localhost=password('パスワード');

#全体に対する権限削除 (revoke)
mysql> revoke all on *.* from myuser@localhost;
#特定のDBに対する 権限削除(revoke)
mysql> revoke select,delete on mydb.* from myuser@localhost;
#ユーザの権限表示 (要チェック)
mysql> show grants for myuser@localhost;
#ユーザの削除
mysql> drop user myuser@localhost;




 /etc/my.cnfの設定。以下のような感じに設定。
[mysqld]
default-character-set = utf8

[mysqldump]
default-character-set = utf8

[mysql]
default-character-set = utf8

[client]
character-sets-dir=/usr/local/mysql/share/mysql/charsets




【phpMyAdmin】
 DBの管理はphpMyAdminでやる。非常にわかりやすくて 楽チン。というか必須アイテム。
phpMyAdminの設定要所(config.default.phpをconfig.inc.phpとしてコピー)は以下。
$cfg['Servers'][$i]['extension']     = 'mysqli';
$cfg['Servers'][$i]['user']          = 'root';
$cfg['Servers'][$i]['password']      = 'パスワード';




【PHP-5】
phpMyAdminから普通にベタに接続させるのに --with-mysqliをつけて最適化。

sqlインジェクション避けに magic_quotes_gpc = Off、SJISは使うな、だそう。

% ./configure --with-apxs2=/usr/local/apache2/bin/apxs ¥
--enable-roxen-zts ¥
--enable-zend-multibyte ¥
--with-mysql=/usr/local/mysql ¥
--enable-mbstring ¥
--enable-mbregex ¥
--disable-ipv6 ¥
--disable-cgi ¥
--disable-dom ¥
--with-mysqli=/usr/local/bin/mysql_config


% make
% sudo make install


 /etc/php.ini /usr/local/lib/php.ini の設定。うろ覚えで以下の設定あたりをいじる。
variables_order = "EGPCS"
register_globals = Off
magic_quotes_gpc = Off
mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_input = pass
mbstring.http_output = pass
mbstring.encoding_translation = On
mbstring.detect_order = auto
mbstring.substitute_character = none


 /etc/httpd/httpd.confの設定をいじる。phpを使いたい場所のディレクティブに設定追加。
AddType application/x-httpd-php .php
DirectoryIndex index.htm index.html index.shtml index.php

 以上。



【素人的phpにおけるDB操作 例】
 あくまで、素人的例。

MYDB---
食材---
なまえ、色、形 、味   (要素名)
リンゴ、赤、丸い、甘い
しし唐、緑、長い、辛い
梅干し、赤、丸い、すっぱい

というデータベースがあるとして、要素の中に「すっぱい」を含む「食材」を検索して表示。

$id = "すっぱい"; #検索語句
$dbcon = mysql_connect( "サーバ名" ,"接続ユーザ名","パスワード"); #接続
if ( $dbcon ) {
mysql_select_db ( 'MYDB' ); #DB 選択
$sql = "SET NAMES utf8"; #
mysqlに送信するコマンド(使用するエンコーディング指定)
$result = mysql_query ( $sql );
if ( $result ) {

$sql = "SELECT * FROM '食材' WHERE '味'='$id'"; #mysqlに送信するコマンド
$result = mysql_query ( $sql );
}
if ( $result ) {
$rownum = mysql_num_rows ( $result );
if ( $rownum ) {
$row = mysql_fetch_row($result);
($d1,$d2,$d3,$d4) = $row;
}
}
}
print "食材名:「".$d1."」<br>";
print "色:「".$d2."」 形:「".d3."」 味:「".d4."」";
exit;


実行結果(たぶんこうなる)

食材名:「梅干し」
色:「赤」 形:「丸い」 味:「すっぱい」




2006 11/11 updated / C's gallery OS X Tips