MySQL



2009 10月2日

2010-12-04追記
どうやらCentOS5.5ではRPMが用意されている模様
64bit http://ftp.riken.jp/Linux/centos/5.5/centosplus/x86_64/RPMS/postfix-2.3.3-2.1.centos.mysql_pgsql.x86_64.rpm
32bit http://ftp.riken.jp/Linux/centos/5.5/centosplus/i386/RPMS/postfix-2.3.3-2.1.centos.mysql_pgsql.i386.rpm
あれ?前からあったのか??

yumでインストールされていたらアンインストール

yum erase postfix

ダウンロード

最新版の確認(/5.x/centosplus/SRPMS/より)

rpm -ivh http://ftp.riken.jp/Linux/centos/5.4/centosplus/SRPMS/postfix-2.3.3-2.1.centos.mysql_pgsql.src.rpm

コンパイル前の下準備

Postfix をMySQL対応にするためpostfix.specを編集。

cd /usr/src/redhat/SPECS/
vi postfix.spec
..
%define MYSQL 1 ←確認(0なら1に修正)
%define PGSQL 0 ←postgreSQLを使わないなら1から0に修正
..

コンパイル

srpmからrpmを作成する。

エラー: ビルド依存性の失敗:
pcre-devel は postfix-2.3.3-2.1.centos.mysql_pgsql.i386 に必要とされています

などのエラーが出たら
yum install pcre-devel
でインストール後に再度実行。

rpmbuild -bb postfix.spec

インストール

出来上がったRPMをインストールする。

cd /usr/src/redhat/RPMS/i386/
rpm -ivh postfix-2.3.3-2.1.centos.mysql_pgsql.i386.rpm

yumの自動アップデートから外す

yum update で postfix* なパッケージがアップデートされなくなる。

これをしないとyumの自動アップデート時にMySQL非対応に戻ってしまう。

vi /etc/yum.conf
exclude=postfix* ←最終業に追記

↑手動でもやりましたけど
Postfixをyumでアップデートしてしまった orz…







2009 5月18日

MySQLのDATETIME型へインデックスをつける場合注意が必要。
例えばこんなSQLではインデックスが使用されない。

SELECT * FROM  `table` WHERE  `datetime` LIKE  '2009-05-17%'
検索結果は2009-05-17分全てが抽出されるが、フルスキャンがかかる。 この場合、以下のようなSQLが良い。
SELECT * FROM  `table`
WHERE  `date_time` BETWEEN '2009-05-17' AND '2009-05-17' + INTERVAL 1 DAY

実行時間計測の例
行数:13,776行
データ:2,935KB
インデックス:datetime


SELECT SUM(  `col` ) FROM  `table`
WHERE  `datetime` LIKE  '2009-05-17%'

フルスキャン
実行時間:0.0235 秒


SELECT SUM(  `col` ) FROM  `table`
WHERE  DATE(datetime) =  '2009-05-17'

フルスキャン
実行時間:0.0383 秒


SELECT SUM(  `col` ) FROM  `table`
WHERE `date_time` BETWEEN  '2009-05-17' AND  '2009-05-17' + INTERVAL 1 DAY

インデックス使用
実行時間:0.0009 秒







2009 4月11日

接続時

my $dbh = DBI->connect(
‘DBI:mysql:database=sandbox;host=localhost;mysql_read_default_file=/etc/mysql/my.cnf’,
qw/id password/,
);

または接続後に

$dbh->{ mysql_enable_utf8 } = 1;


この辺の記事
http://www.geminium.com/chiba_blog/2009/02/







2009 2月17日

phpmyadminインストール

yum install phpmyadmin

/usr/share/phpmyadmin にインストールされる。
/usr/share/phpmyadmin/config.inc.phpを編集
$cfg['blowfish_secret']を設定。

/*
* This is needed for cookie based authentication to encrypt password in
* cookie
*/
$cfg['blowfish_secret'] = ‘*************’; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */

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

yum -y install php-mbstring
yum -y install php-mcrypt

phpでマルチバイト処理をするには「php-mbstring」が必要.
CentOS5だと上記でよいが、CentOS4だとインストールされない。

CentOS4での手順
1.mcryptを組み込むのに必要なlibmcryptをrpmforgeからインストールします。

# yum -y –enablerepo=rpmforge install libmcrypt-devel

2.php用のmcrypt拡張モジュールをPHPRPMsよりダウンロードします。

# cd /usr/src/redhat/RPMS/i386/
# wget http://jaist.dl.sourceforge.net/sourceforge/phprpms/php-mcrypt-4.3.9-3.2.1.i386.rpm

最新版は http://phprpms.sourceforge.net/mcrypt で確認して下さい。
CentOSはRHEL互換なのでRHEL4の物を落としました。
X86_64で無いならばi386で問題ありません。

3.ダウンロードしたrpmをインストールします。

# rpm -Uvh php-mcrypt-4.3.9-3.2.1.i386.rpm

参考: http://centossrv.com/bbshtml/webpatio/364.shtml

・・・が、http://phprpms.sourceforge.net/mcryptは現在無い…。
しょうがないので、http://rpm.pbone.net/で探す。
キーワード「php-mcrypt」CentOS 4 とRedHat EL 4 にチェックを入れサーチ。

# php -v

でPHP 4.3.9dだったので、
RedHat EL 4 ftp.sourceforge.net/pub/sourceforge/p/project/ph/phprpms/RHEL4 PHP RPMs/4.3.9-3.2/php-mcrypt-4.3.9-3.2.1.i386.rpm
http://rpm.pbone.net/index.php3/stat/4/idpl/12753489/com/php-mcrypt-4.3.9-3.2.1.i386.rpm.html

が、見つかったのでこれを使ってみる。

# wget ftp://ftp.pbone.net/mirror/ftp.sourceforge.net/pub/sourceforge/p/project/ph/phprpms/RHEL4%20PHP%20RPMs/4.3.9-3.2/php-mcrypt-4.3.9-3.2.1.i386.rpm

rpm -ivh php-mcrypt-4.3.9-3.2.1.i386.rpm

成功した。

Apacheの設定。
/etc/httpd/conf.d/phpmyadmin.conf が作成されるので適時修正。
Apache再起動。







2009 2月17日

MySQL4.12が稼働しているサーバにMySQL5.0.67(Ttitonn)をインストールする
(MySQL4.12はYUMでインストール済)

my.cnf (MySQL4.12)

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1

[mysql.server]
user=mysql
basedir=/var/lib

[mysqld_safe]
err-log=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

1)mecabのインストール

mecabのインストール

2)sennaのインストール

senna 1.1.4のインストール

3)インストールするのはTritonn(MySQL5.0.67)
/usr/local/mysql5にインストールする
※mecab sennaはインストール済み

wget http://iij.dl.sourceforge.jp/tritonn/36449/tritonn-1.0.12-mysql-5.0.67.tar.gz
tar xzf tritonn-1.0.12-mysql-5.0.67.tar.gz
cd tritonn-1.0.12-mysql-5.0.67
su–
./configure –prefix=/usr/local/mysql5 –localstatedir=/usr/local/mysql5/data –with-unix-socket-path=/usr/local/mysql5/data/mysql5.sock –with-tcp-port=3307 –with-charset=utf8 –with-extra-charsets=all –with-mysqld-user=mysql –with-senna –with-mecab
make
mkdir /usr/local/mysql5
make install
cd /usr/local/mysql5
mkdir /usr/local/mysql5/data
chown -R mysql:mysql /usr/local/mysql5
su mysql
./bin/mysql_install_db –datadir=/usr/local/mysql5/data

複数インストールしない場合のconfigureオプションはこんな感じ

CC=’gcc’ CFLAGS=’-g’ CXX=’gcc’ CXXFLAGS=’-g’ LDFLAGS=” ASFLAGS=” \
./configure \
‘–prefix=/usr/local/mysql’ \
‘–localstatedir=/usr/local/mysql/data’ \
‘–libexecdir=/usr/local/mysql/bin’ \
‘–with-comment=MySQL Community Server (GPL)’ \
‘–with-server-suffix=’ \
‘–enable-thread-safe-client’ \
‘–enable-local-infile’ \
‘–enable-assembler’ \
‘–with-pic’ \
‘–with-fast-mutexes’ \
‘–with-client-ldflags=-static’ \
‘–with-mysqld-ldflags=-static’ \
‘–with-zlib-dir=bundled’ \
‘–with-big-tables’ \
‘–with-yassl’ \
‘–with-readline’ \
‘–with-archive-storage-engine’ \
‘–with-blackhole-storage-engine’ \
‘–with-ndbcluster’ \
‘–with-csv-storage-engine’ \
‘–with-example-storage-engine’ \
‘–with-federated-storage-engine’ \
‘–with-innodb’ \
‘–with-charset=utf8′ \
‘–with-extra-charsets=all’ \
‘–with-senna’ ‘–with-mecab’

configure時に以下のエラーが出た時の対処

checking for termcap functions library… configure: error: No curses/termcap library found

curses/termcapのライブラリが無いらしい

yum install ncurses-devel

4)データベースの初期化

/usr/local/mysql/bin/mysql_install_db –user=mysql

5)初期ユーザー作成
MySQL起動後に初期ユーザーrootでログイン。
このrootはローカルから接続出来るユーザー。

初期ユーザーを全て削除し、新規ユーザーを作成する。

./bin/mysqld_safe –defaults-file=/etc/my5.cnf –pid-file=/var/run/mysqld/mysqld5.pid &
/usr/local/mysql5/bin/mysql –user=root

MySQLに接続後、既存ユーザー削除

/usr/local/mysql5/bin/mysql –user=root
mysql> TRUNCATE TABLE mysql.user;

mysql> FLUSH PRIVILEGES;

管理ユーザー作成( 管理ユーザー:root パスワード:password)

mysql> GRANT ALL PRIVILEGES ON *.* TO ‘root’@'localhost’ IDENTIFIED BY ‘password’ WITH GRANT OPTION;

補足:シンボリックリンクを貼って「mysql5」でアクセスする

su –
ln -s /usr/local/mysql5/bin/mysql /usr/bin/mysql5

$ mysql5 –user=***** –password=************
でアクセス可能。