MySQL5.5をソースからインストール

CentOS5.6にて。ソースから入れてみたメモ。

折角なのでいったんキレイにしてみた

yumでMySQLを入れてる場合

yum remove mysql-server mysql


rpmでMySQLを入れてる場合

rpm -qa | grep -i mysql | xargs rpm -e

mysqlのユーザの登録

groupadd mysql
useradd -m mysql -g mysql -d /usr/local/mysql/data
passwd mysql

ソースをダウンロードしてきて展開

cd /usr/local/src
wget http://www-jp.mysql.com/get/Downloads/MySQL-5.5/MySQL-5.5.18-1.rhel5.src.rpm/from/http://ftp.iij.ad.jp/pub/db/mysql/
rpm -ivh MySQL-5.5.18-1.rhel5.src.rpm
cd /usr/src/redhat/SOURCES
tar xf mysql-5.5.18.tar.gz

MySQL5.5からAutotoolsではなくCMakeになった

cd /usr/src/redhat/SOURCES/mysql-5.5.18


configureがない。。。
mysql5.5.8から、ビルドシステムが変わったとのこと。


そもそもcmakeコマンドが入っていないので、いれる。

yum install cmake
cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DENABLED_LOCAL_INFILE=true \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_READLINE=OFF


カラーが新鮮。進捗がでるし、それだけでちょっと楽しい。

make
make test
make install

設定

/sr/local/mysql/support-files/の下から環境に適切な設定ファイルをコピー。

cp /usr/local/mysql/support-files/my-large.cnf /etc/my.cnf
vi /etc/my.cnf
...もろもろ設定。

[client]
default-character-set = utf8

[mysqld]
character-set-server = utf8
skip-character-set-client-handshake

thread_concurrency = 8

# error log
# 警告メッセージのエラーログに出力レベルを指定します。
# level:0  メッセージは記録されません。
# level:1以上 警告メッセージが記録されます。デフォルトは1
log-warnings = 1
log-error = /var/log/mysql/error.log

# query log
general-log = 1
general-log-file =  /var/log/mysql/query.log

# slow query log
slow-query-log = 1
slow-query-log-file = /var/log/mysql/slow.log
# 実行時間が指定時間(秒)以上の場合ログを出力
long_query_time = 2
# INDEXを指定しなかったクエリをスロークエリログを出力する
log-queries-not-using-indexes
# 管理用コマンド、OPTIMIZE TABLE、ANALYZE TABLE、ALTER TABLEなど
# 時間がかかる管理ステートメントをログに出力する
log-slow-admin-statements

# 5.1からは、システム変数log_outputでクエリログとスロークエリログをファイルに書き込むか、
# テーブル(mysql.general_log、mysql.slow_log)に書き込むか設定できるようになった。
# log-output = TABLE
# log-output = FILE
# 両方の場合
log-output = FILE,TABLE


### トランザクションログ
#log-bin = mysql-bin
# ログファイルの最大サイズ。サイズを超えた場合はローテートされる。
max-binlog-size = 1G
# ログの保持期間日数。期間を超えたログは削除されます。
expire_logs_days=7
#log-bin-index=mybin.index
# ログを取るデータベース名を指定
# binlog-do-db=hoge
# ログを取らないデータベース名を指定
# binlog-do-db=fuga


# InnoDB関連のコメントを外す
innodb_data_home_dir = /usr/local/mysql/data
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = /usr/local/mysql/data
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
innodb_buffer_pool_size = 256M
innodb_additional_mem_pool_size = 20M
# Set .._log_file_size to 25 % of buffer pool size
innodb_log_file_size = 64M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50

# 以下は追記。
# テーブルごとにデータファイル(tbl_name.idb)を作成する。
innodb_file_per_table


# mysqlシャットダウン時にトランザクションログに書かれていて、
# まだデータファイルに反映されていない更新内容をデータファイルに反映する。
innodb_fast_shutdown = 0


[mysqladmin]
user = root
password = xxx

初期設定

cd /usr/local/mysql/
/usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

パス通しておいた

vi /etc/profile.d/mysql.sh

PATH=$PATH:/usr/local/mysql/bin
export PATH

source /etc/profiled.d/mysql.sh

ログファイルを作成。

mkdir /var/log/mysql
cd /var/log/mysql
touch query.log error.log slow.log
chown mysql  . query.log error.log slow.log

ログローテーションの設定

cp /usr/local/mysql/support-files/mysql-log-rotate /etc/logrotate.d/mysql
vi /etc/logrotate.d/mysql

#/usr/local/mysql/data/mysqld.log {
/var/log/mysql/*.log {
		# create 600 mysql mysql
		notifempty
		daily
		rotate 3
		missingok
		compress
	postrotate
		# just if mysqld is really running
		if test -x /usr/local/mysql/bin/mysqladmin && \
		   /usr/local/mysql/bin/mysqladmin ping &>/dev/null
		then
		   /usr/local/mysql/bin/mysqladmin flush-logs
		fi
	endscript
}

ローテーションテスト

/usr/sbin/logrotate -dv /etc/logrotate.d/mysql

起動の設定

cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql

/sbin/chkconfig mysql on
/sbin/chkconfig mysql --list

起動。

/etc/init.d/mysql start

セキュアな設定。

/usr/local/mysql/bin/mysql_secure_installation
  • rootユーザーのパスワードを設定
  • 匿名ユーザーの削除
  • rootユーザーのリモート接続を禁止
  • testデータベースの削除

設定の確認 文字コード関連

mysql> show variables like 'char%';
+--------------------------+----------------------------------+
| Variable_name            | Value                            |
+--------------------------+----------------------------------+
| character_set_client     | utf8                             |
| character_set_connection | utf8                             |
| character_set_database   | utf8                             |
| character_set_filesystem | binary                           |
| character_set_results    | utf8                             |
| character_set_server     | utf8                             |
| character_set_system     | utf8                             |
| character_sets_dir       | /usr/local/mysql/share/charsets/ |
+--------------------------+----------------------------------+
8 rows in set (0.00 sec)

設定の確認 ログ関連

mysql> show variables like '%log%';

バージョンとかもろもろだしてみる。

mysql> status
--------------
mysql  Ver 14.14 Distrib 5.5.18, for Linux (x86_64) using  EditLine wrapper

Connection id:          1
Current database:
Current user:           root@localhost
SSL:                    Not in use
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server version:         5.5.18-log Source distribution
Protocol version:       10
Connection:             Localhost via UNIX socket
Server characterset:    utf8
Db     characterset:    utf8
Client characterset:    utf8
Conn.  characterset:    utf8
UNIX socket:            /tmp/mysql.sock
Uptime:                 4 min 43 sec

Threads: 3  Questions: 39  Slow queries: 4  Opens: 48  Flush tables: 1  Open tables: 41  Queries per second avg: 0.137
--------------

これでオッケー。
CMakeかっこいいな−。