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
- cmake . -i だと対話形式でオプションを決めていける
- MyISAM, MERGE, MEMORY, CSVは指定しなくてもデフォルトで入る。
- MySQL :: MySQL 5.5 Reference Manual :: 2.10.4 MySQL Source-Configuration Options
カラーが新鮮。進捗がでるし、それだけでちょっと楽しい。
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かっこいいな−。