spiderストレージエンジンのインストール

概要

spiderストレージエンジンはMyISAMInnoDBと同じMySQLのストレージエンジンであり、斯波健徳氏によって開発されています。

spiderストレージエンジンは、それ自身ではデータを持たない変わったストレージエンジンです。代わりに、異なるMySQLインスタンスにあるテーブルへのデータリンクを持ちます。これにより、異なるMySQLインスタンスにあるテーブルを、同じMySQLインスタンスにあるテーブルのように扱うことができます。

ここではソースコードからMySQLとspiderストレージエンジンをインストールします。



構成

CentOS release 5.6 (Final)
MySQL Ver 14.14 Distrib 5.5.14, for Linux (x86_64) using EditLine wrapper
Spider for MySQL 2.26 for 5.5.14



依存パッケージのインストール

cmakeとBisonのインストール
# yum install cmake.x86_64 bison.x86_64
...
==================================================================================================
 Package             Arch                 Version                        Repository          Size
==================================================================================================
Installing:
 bison               x86_64               2.3-2.1                        base               549 k
 cmake               x86_64               2.6.4-5.el5.2                  epel               7.1 M
Installing for dependencies:
 m4                  x86_64               1.4.5-3.el5.1                  base               171 k

Transaction Summary
==================================================================================================
Install       3 Package(s)
Upgrade       0 Package(s)


ncurses-develのインストール
# yum install ncurses-devel.x86_64
...
==================================================================================================
 Package                   Arch               Version                      Repository        Size
==================================================================================================
Installing:
 ncurses-devel             x86_64             5.5-24.20060715              base             1.7 M

Transaction Summary
==================================================================================================
Install       1 Package(s)
Upgrade       0 Package(s)



MySQLのインストール

MySQL 5.5.14 + spiderストレージエンジン 2.26のソースコードをダウンロードして、インストールします。最新のソースコードSpider for MySQL in Launchpadからダウンロードできます。

# cd /usr/local/src
# wget http://launchpad.net/spiderformysql/spider-2.x/2.26-for-5.5.14/+download/mysql-5.5.14-spider-2.26-vp-0.15-hs-1.0.tgz
# tar zxvf ./mysql-5.5.14-spider-2.26-vp-0.15-hs-1.0.tgz
# cd ./mysql-5.5.14-spider-2.26-vp-0.15-hs-1.0
# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.5.14-spider \
        -DMYSQL_DATADIR=/var/lib/mysql/data \
        -DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock \
        -DDEFAULT_CHARSET=utf8 \
        -DWITH_EXTRA_CHARSETS=complex \
        -DDEFAULT_COLLATION=utf8_general_ci \
        -DWITH_PARTITION_STORAGE_ENGINE=1 \
        -DWITHOUT_ARCHIVE_STORAGE_ENGINE=1 \
        -DWITHOUT_BLACKHOLE_STORAGE_ENGINE=1 \
        -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \
        -DWITHOUT_FEDERATED_STORAGE_ENGINE=1 \
        -DWITH_PIC=1 .
# make
# make install

cmakeに渡すオプションについては、MySQL :: Building MySQL from Source :: 4 MySQL Source-Configuration Optionsを参照してください。



起動ユーザーとシンボリックリンクの作成

# useradd -s /sbin/nologin mysql
# chown -R mysql:mysql /usr/local/mysql-5.5.14-spider
# ln -s /usr/local/mysql-5.5.14-spider /usr/local/mysql



my.cnfの作成

FILE: /etc/my.cnf

#------------------------------------------------------------------------------
# mysqld
#
#------------------------------------------------------------------------------

[mysqld]

#
# layout
#

datadir=/var/lib/mysql/data
socket=/var/lib/mysql/mysql.sock
pid-file=/var/run/mysqld/mysqld.pid
user=mysql

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0



#
# plugins
#

# http://dev.mysql.com/doc/refman/5.5/en/performance-schema.html
;performance_schema



#
# Global Buffer Size
#

max_heap_table_size=128MB
tmp_table_size=128MB
query_cache_size=16MB
innodb_buffer_pool_size=512MB
innodb_log_buffer_size=16MB



#
# Thread Buffer Size
#

myisam_sort_buffer_size=1MB
read_buffer_size=1MB
join_buffer_size=256KB
read_rnd_buffer_size=1MB



#
# innnodb
#

innodb_file_per_table
innodb_flush_log_at_trx_commit=1
innodb_flush_method=O_DIRECT
innodb_log_file_size=128MB

max_connections=20
max_allowed_packet=16MB
thread_concurrency=16
skip-name-resolve

character-set-server=utf8



#
# slow query log
#

#log-output=TABLE,FILE
#slow_query_log
#slow_query_log_file=/var/log/mysql/slow.log
#long_query_time=0.5
#min_examined_row_limit=10000
#log-queries-not-using-indexes



#
# replication
#

server-id=1001
#binlog-format=MIXED
#log-bin=/var/lib/mysql/bin-log/log-bin
#expire_logs_days=7



#
# spider
#

#spider_internal_xa=1
#spider_semi_trx_isolation=2
#spider_support_xa=0



#------------------------------------------------------------------------------
# mysqld_safe
#
#------------------------------------------------------------------------------

[mysqld_safe]
log-error=/var/log/mysql/mysqld.log



#------------------------------------------------------------------------------
# mysql
#
#------------------------------------------------------------------------------

[mysql]
default-character-set=utf8



#------------------------------------------------------------------------------
# client
#
#------------------------------------------------------------------------------

[client]
socket=/var/lib/mysql/mysql.sock

spiderストレージエンジンをインストールするまで、関連する設定項目はコメントアウトしておきます。そうしないと、次のようにmysql_install_dbの実行に失敗するためです。

# ./scripts/mysql_install_db --datadir=/var/lib/mysql/data --user=mysql
Installing MySQL system tables...
110930 16:10:05 [ERROR] ./bin/mysqld: unknown variable 'spider_internal_xa=1'
110930 16:10:05 [ERROR] Aborting

110930 16:10:05 [Note] ./bin/mysqld: Shutdown complete


Installation of system tables failed!  Examine the logs in
/var/lib/mysql/data for more information.



my.cnfで指定したディレクトリの作成

# mkdir /var/lib/mysql; chown mysql:mysql /var/lib/mysql
# mkdir /var/lib/mysql/data; chown mysql:mysql /var/lib/mysql/data
# mkdir /var/lib/mysql/bin-log; chown mysql:mysql /var/lib/mysql/bin-log
# mkdir /var/lib/mysql/relay-log; chown mysql:mysql /var/lib/mysql/relay-log
# mkdir /var/log/mysql; chown mysql:mysql /var/log/mysql
# mkdir /var/run/mysqld; chown mysql:mysql /var/run/mysqld



起動スクリプトの作成

# cd /usr/local/mysql
# cp ./support-files/mysql.server /etc/rc.d/init.d/mysqld
# chmod 755 /etc/rc.d/init.d/mysqld

basedirを/usr/local/mysqlディレクトリにします。

FILE: /etc/rc.d/init.d/mysqld

--- /usr/local/mysql/support-files/mysql.server	2011-09-07 13:23:40.000000000 +0900
+++ /etc/rc.d/init.d/mysqld	2011-09-07 18:45:38.000000000 +0900
@@ -43,7 +43,7 @@
 # If you change base dir, you must also change datadir. These may get
 # overwritten by settings in the MySQL configuration files.
 
-basedir=
+basedir=/usr/local/mysql
 datadir=
 
 # Default value, in seconds, afterwhich the script should timeout waiting



データベースの初期化

mysql_install_dbはカレントディレクトリをMySQLのインストール先に移動してから実行します。

# ./scripts/mysql_install_db --datadir=/var/lib/mysql/data --user=mysql
# service mysqld start
# ./bin/mysql_secure_installation



spiderストレージエンジンのインストール

# cd /usr/local/src
# wget http://launchpad.net/spiderformysql/spider-2.x/2.26-for-5.5.14/+download/spider-init-2.26-for-5.5.14.tgz
# mkdir spider-init-2.26-for-5.5.14
# tar zxvf ./spider-init-2.26-for-5.5.14.tgz -C./spider-init-2.26-for-5.5.14
# cd /usr/local/mysql
# ./bin/mysql -uroot -p < /usr/local/src/spider-init-2.26-for-5.5.14/install_spider.sql
mysql> show engines;
+--------------------+---------+------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                    | Transactions | XA   | Savepoints |
+--------------------+---------+------------------------------------------------------------+--------------+------+------------+
| SPIDER             | YES     | Spider storage engine                                      | YES          | YES  | NO         |
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES          | YES  | YES        |
| CSV                | YES     | CSV storage engine                                         | NO           | NO   | NO         |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                         | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                      | NO           | NO   | NO         |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables  | NO           | NO   | NO         |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                      | NO           | NO   | NO         |
+--------------------+---------+------------------------------------------------------------+--------------+------+------------+
7 rows in set (0.00 sec)



spiderストレージエンジンの設定

コメントアウトしていた、spiderストレージエンジンの設定を有効にします。

--- /etc/my.cnf	2011-09-30 16:26:10.000000000 +0900
+++ /etc/my.cnf	2011-09-30 16:26:30.000000000 +0900
@@ -97,9 +97,9 @@ server-id=1001
 # spider
 #
 
-#spider_internal_xa=1
-#spider_semi_trx_isolation=2
-#spider_support_xa=0
+spider_internal_xa=1
+spider_semi_trx_isolation=2
+spider_support_xa=0
 
 

更新されたmy.cnfを反映するため、mysqldを再起動します。

# service mysqld restart

MySQLは現在2つ以上のxaトランザクションをサポートするストレージエンジンを利用できません。
 SpiderとInnoDBを併用する場合は、コンフィグファイルに「spider_support_xa=0」を記載し、Spiderのxaサポートを無効にしてください。
 Spiderのxaサポートが無効になっても、「internal_xa」は利用可能です。



パスの追加

バイナリファイルが置かれているディレクトリへのパスを追加します。

FILE: ~/.bashrc

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



備考

Warning: Bison executable not found in PATH

cmakeしたところ、次のようなエラーメッセージが表示されました。

...
-- Performing Test HAVE_PEERCRED - Success
Warning: Bison executable not found in PATH
-- Configuring done
-- Generating done
-- Build files have been written to: /usr/local/src/mysql-5.5.14-spider-2.26-vp-0.15-hs-1.0

Bisonが見つからないということなので、Bisonをインストールします。

# yum install cmake.x86_64 bison.x86_64

作業ファイルが残っていると再びcmakeしても同じエラーメッセージが表示されるので、ディレクトリを作り直します。

# cd ..
# rm -rf ./mysql-5.5.14-spider-2.26-vp-0.15-hs-1.0


Could NOT find Curses (missing: CURSES_LIBRARY CURSES_INCLUDE_PATH)

cmakeしたところ、次のようなエラーメッセージが表示されました。

...
-- MySQL 5.5.14
-- Could NOT find Curses  (missing:  CURSES_LIBRARY CURSES_INCLUDE_PATH)
CMake Error at cmake/readline.cmake:82 (MESSAGE):
  Curses library not found.  Please install appropriate package,

      remove CMakeCache.txt and rerun cmake.On Debian/Ubuntu, package name is libncurses5-dev, on Redhat and derivates it is ncurses-devel.
Call Stack (most recent call first):
  cmake/readline.cmake:126 (FIND_CURSES)
  cmake/readline.cmake:216 (MYSQL_USE_BUNDLED_LIBEDIT)
  CMakeLists.txt:257 (MYSQL_CHECK_READLINE)


-- Configuring incomplete, errors occurred!

Redhat系ならncurses-develをインストールするようにということなので、インストールします。

# yum install ncurses-devel.x86_64


Can't connect to local MySQL server through socket '/tmp/mysql.sock'

mysql_secure_installationを実行したところ、次のようなエラーメッセージが表示されました。

Enter current password for root (enter for none): 
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

mysql_secure_installationの中身を調べてみると、--defaults-fileに.my.cnf.$$が指定されています。そのため、/etc/my.cnfが読み込まれず、そこに記述したsocket=/var/lib/mysql/mysql.sockも反映されていないようです。

FILE: /usr/local/mysql/bin/mysql_secure_installation

config=".my.cnf.$$"
...
prepare() {
    touch $config $command
    chmod 600 $config $command
}
...
do_query() {
    echo "$1" >$command
    #sed 's,^,> ,' < $command  # Debugging
    $mysql_client --defaults-file=$config <$command
    return $?
}

ソケットファイルを見つけることができるように、cmakeに渡すオプションに以下を追加してビルドをやり直します。

        -DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock