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にあったりしたので、
ちゃんと今使ってるディレクトリを確認すべし

ログのローテートとかに便利なファイルを空にするコマンド

CentOSでファイル空にするのはどうやってやるんだろう?

と思って調べたところ「:」を挿入することで空になるそうだ


こんな感じ
>||
:> foo.log
||<



手作業でログのローテートしたりする時に便利
>||
cp /var/log/nginx/error.log /var/log/nginx/error.log.201311221833
:> /var/log/nginx/error.log
||<

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 ("明日の天気は雨でしょう。");

symfony で変数をエスケープしないで取得する

あえてアンエスケープした値が欲しい時は良くある…はず



変数 $text をエスケープせずに取得する時

$sf_data->getRaw('text');


モデルかた引っ張ってくる時とか

$model->getText(ESC_RAW)

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秒



全然変わらんね(´・ω・`)


それにしても、実アプリに載せちゃいけない遅さだな・・・