MySQLのmy.cnfでinnodb_log_file_sizeを変更したら怒られた
MySQLのmy.cnfでinnodb_log_file_sizeを変更したら怒られた
InnoDB: Error: log file ./ib_logfile0 is of different size 0 5242880 bytes
要は
innodbのログファイルサイズを変更しようとおもったけど既にあるログファイルとサイズ違うよ?
ってことらしい
安全に止めてやった上で、既存のログファイルを削除する
削除するのはib_logfile10とib_logfile1の二つ
mysql -u root -e'SET GLOBAL innodb_fast_shutdown=0;' /etc/rc.d/init.d/mysqld stop rm -f /var/lib/mysql/data/ib_logfile0 rm -f /var/lib/mysql/data/ib_logfile1 /etc/rc.d/init.d/mysqld start
すると新たにログファイルを作って立ち上げてくれる
後、ib_logfileは
/var/lib/mysql/dataにあったり/var/lib/mysqlにあったりしたので、
ちゃんと今使ってるディレクトリを確認すべし
ログのローテートとかに便利なファイルを空にするコマンド
simplexml_load_fileで属性を取得する
simplexml_load_fileを使っていて
<entry> <media url="http://hogehoge/fuga.jpg" type="image/jpeg"/> </entry>
からurl部分を取りたい時は
$entry->media->attributes()->url
と言う感じで取れる。
MySQL5.5をソースから入れつつmroonga3を入れる
各URLを参照しながらやったけど、バージョンが違ったり微妙にうまくいかなかったりしたのでメモ。
CentOS6.4にそのままコピペして流す自分用だったり。
# MySQL
# http://d.hatena.ne.jp/takjoe/20120109/1326052894
# http://kamip.jp/mysql/mysql5-5-28-%E3%82%92%E3%82%BD%E3%83%BC%E3%82%B9%E3%81%8B%E3%82%89%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB/
cd /usr/local/src/ groupadd mysql useradd -r -g mysql mysql wget http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.32.tar.gz/from/http://ftp.jaist.ac.jp/pub/mysql/ tar zxvf mysql-5.5.32.tar.gz cd mysql-5.5.32 cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.5.32 \ -DMYSQL_DATADIR=/var/lib/mysql/data \ -DENABLED_LOCAL_INFILE=1 \ -DWITH_EMBEDDED_SERVER=1 \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_unicode_ci \ -DWITH_EXTRA_CHARSETS=all \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DENABLE_DTRACE=0 \ -DENABLE_GCOV=1 \ -DWITH_DEBUG=0 \ -DENABLE_DEBUG_SYNC=0 make make install cd /usr/local/mysql-5.5.32/ chown -R mysql . chgrp -R mysql . scripts/mysql_install_db --user=mysql --datadir=/var/mysql/data chown -R root . chown -R mysql /var/mysql/data cp support-files/my-medium.cnf /etc/my.cnf cp support-files/mysql.server /etc/init.d/mysqld
# mroonga
# http://d.hatena.ne.jp/takjoe/20120109/1326114952
# http://y-ken.hatenablog.com/entry/mroonga-create-function
yum -y install pkgconfig cd /usr/local/src wget http://packages.groonga.org/centos/groonga-repository-1.0.1-0.noarch.rpm rpm -ivh groonga-repository-1.0.1-0.noarch.rpm yum -y install groonga yum -y install mecab-ipadic cd /usr/local/src/ wget http://packages.groonga.org/source/mroonga/mroonga-3.05.tar.gz tar zxvf mroonga-3.05.tar.gz cd mroonga-3.05 ./configure \ --with-mysql-source=/usr/local/src/mysql-5.5.32 \ --with-mysql-config=/usr/local/mysql-5.5.32/bin/mysql_config \ --with-default-parser=TokenMecab make nake install service mysqld restart /usr/local/mysql-5.5.32/bin/mysql
ここからMySQLのコマンド
INSTALL PLUGIN mroonga SONAME 'ha_mroonga.so'; CREATE FUNCTION last_insert_grn_id RETURNS INTEGER SONAME 'ha_mroonga.so'; CREATE FUNCTION mroonga_snippet RETURNS STRING SONAME 'ha_mroonga.so'; CREATE FUNCTION mroonga_command RETURNS STRING SONAME 'ha_mroonga.so'; show variables like 'mroonga_%'; show engines; use test; CREATE TABLE diaries ( id INT PRIMARY KEY AUTO_INCREMENT, content VARCHAR(255), FULLTEXT INDEX (content) COMMENT 'parser "TokenMecab"' ) ENGINE = groonga COMMENT = 'engine "innodb"' DEFAULT CHARSET utf8; INSERT INTO diaries (content) VALUES ("明日の天気は晴れでしょう。"); INSERT INTO diaries (content) VALUES ("明日の天気は雨でしょう。");
mysqlであいまい検索した時にメモリに乗り切ってなさそうだったので、
innodb_buffer_pool_sizeとか増やしたら早くなるかなーと思ったけど、
やってみたらそうでもなかった。
■現状
テーブル数は1,943,064件でデータ量は以下な感じ
データ 549.0 MiB
インデックス 98.8 MiB
合計 647.8 MiB
■手順
設定後に念のため設定値を確認
SHOW VARIABLES LIKE "innodb_%_size";
クエリキャッシュを使わない形で曖昧検索してみる。
SELECT SQL_NO_CACHE *
FROM `tweet`
WHERE `from_user` LIKE '%コミケ%'
LIMIT 0 , 30
それぞれ二回くらい計ってみる
■結果
innodb_buffer_pool_size = 8M
innodb_log_file_size = 5M
18.3秒
8.9秒
innodb_buffer_pool_size = 256M
innodb_log_file_size = 64M
9.2秒
10.3秒
innodb_buffer_pool_size = 512M
innodb_log_file_size = 128M
5.6秒
8.5秒
innodb_buffer_pool_size = 900M
innodb_log_file_size = 128M
12.6秒
8.1秒
全然変わらんね(´・ω・`)
それにしても、実アプリに載せちゃいけない遅さだな・・・