概要
spiderストレージエンジンはMyISAMやInnoDBと同じ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 installcmakeに渡すオプションについては、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