2012年11月11日日曜日

テーブルスペース初期化で大きいサイズ指定の際の注意点

テーブルスペースの初期化は大きめに取っておいた方が
自動拡張の回数が減るからI/Oが発生しにくくなってパフォーマンスが(・∀・)イイ!!

と、前の記事やどこかの記事でみたので試してみた際のφ(`д´)メモメモ...
■テーブルスペースを30Gで初期化した場合について

あまり大きいサイズを指定すると、
起動した際にテーブルスペースの初期化で時間がかかってしまって、
MySQLが起動に失敗したように見えるらしいです。

たとえば次の設定を行って起動してみると、
#
innodb_data_file_path = ibdata1:30G:autoextend

# /etc/init.d/mysqld start
MySQL Daemon failed to start.
Starting mysqld:                                           [FAILED]
起動できない!!どうしようどうしよう!って慌ててプロセスを見てみると、
# ps axu|grep -i [m]ysql
root     11810  0.1  0.0 106108  1496 pts/1    S    00:37   0:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock --pid-file=/var/run/mysqld/mysqld.pid --basedir=/usr --user=mysql
mysql    12691  0.6  4.4 5057200 363608 pts/1  Sl   00:37   0:01 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/data/mysql-log/mysql-error.log --open-files-limit=8192 --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock --port=3306
プロセスが残っていて起動している事に・・・ついにMySQLの霊的な何かががががっ:(;゛゜'ω゜'):

ではなくて、MySQLさんがバックグラウンドで何か頑張っている模様ですガン( ゜д゜)ガレ
ただログインを試してみるけどエラーにはなる。
# mysql -u root
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
ibdataを見てみると設定したサイズより小さいファイルが作られているけど、
時間が経過すると少しずつ大きくなっている。

# ls -alt /var/lib/mysql/|grep ibdata
-rw-rw---- 1 mysql mysql 1258291200 Nov 10 21:43 ibdata1
# ls -alt /var/lib/mysql/|grep ibdata
-rw-rw---- 1 mysql mysql 2306867200 Nov 10 21:47 ibdata1
# ls -alt /var/lib/mysql/|grep ibdata
-rw-rw---- 1 mysql mysql 2831155200 Nov 10 21:48 ibdata1
# ls -alt /var/lib/mysql/|grep ibdata
-rw-rw---- 1 mysql mysql 4194304000 Nov 10 21:52 ibdata1
# ls -alt /var/lib/mysql/|grep ibdata
-rw-rw---- 1 mysql mysql 5567471616 Nov 10 21:57 ibdata
このまま待っていると、設定したサイズになり完了して、ログインも行えるようになります。
ただ、待っている時間が・・・なんと約2時間ほどかかりました:(;゛゜'ω゜'):
長すぎて寝てしまうところでした(つд⊂)ゴシゴシ

その時のMySQLのログはこちらになります。
121110 20:33:33 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
121110 20:33:33 [Note] Plugin 'FEDERATED' is disabled.
121110 20:33:33 [ERROR] Function 'rpl_semi_sync_master' already exists
121110 20:33:33 [Warning] Couldn't load plugin named 'rpl_semi_sync_master' with soname 'semisync_master.so'.
121110 20:33:33 InnoDB: The InnoDB memory heap is disabled
121110 20:33:33 InnoDB: Mutexes and rw_locks use GCC atomic builtins
121110 20:33:33 InnoDB: Compressed tables use zlib 1.2.3
121110 20:33:33 InnoDB: Using Linux native AIO
121110 20:33:33 InnoDB: Initializing buffer pool, size = 4.0G
121110 20:33:34 InnoDB: Completed initialization of buffer pool
121110 20:33:34 InnoDB: highest supported file format is Barracuda.
"/data/mysql-log/mysql-error.log" [readonly] 509L, 33378C
InnoDB: Database physically writes the file full: wait...
InnoDB: Progress in MB: 100 200
121111  0:37:20  InnoDB: Log file ./ib_logfile1 did not exist: new to be created
InnoDB: Setting log file ./ib_logfile1 size to 256 MB
InnoDB: Database physically writes the file full: wait...
InnoDB: Progress in MB: 100 200
InnoDB: Doublewrite buffer not found: creating new
InnoDB: Doublewrite buffer created
InnoDB: 127 rollback segment(s) active.
InnoDB: Creating foreign key constraint system tables
InnoDB: Foreign key constraint system tables created
121111  0:40:04  InnoDB: Waiting for the background threads to start
121111  0:40:05 InnoDB: 1.1.8 started; log sequence number 0
121111  0:40:05 [Note] Semi-sync replication initialized for transactions.
121111  0:40:05 [Note] Semi-sync replication enabled on the master.
121111  0:40:06 [Warning] 'user' entry 'root@db03' ignored in --skip-name-resolve mode.
121111  0:40:06 [Warning] 'user' entry '@db03' ignored in --skip-name-resolve mode.
121111  0:40:06 [Warning] 'proxies_priv' entry '@ root@db03' ignored in --skip-name-resolve mode.
121111  0:40:06 [Note] Event Scheduler: Loaded 0 events
121111  0:40:06 [Note] /usr/libexec/mysqld: ready for connections.
Version: '5.5.22-log'  socket: '/var/lib/mysql/mysql.sock'  port: 3306  MySQL Community Server (GPL) by Remi
起動時にエラーが起きないようにするには、起動スクリプトのSTARTUPTIMEOUTの値を変更すれば良いかも?
view /etc/init.d/mysqld

# Set timeouts here so they can be overridden from /etc/sysconfig/mysqld
STARTTIMEOUT=120
STOPTIMEOUT=60
MYOPTIONS=
(`・ω・´)ゞビシッ!!

0 件のコメント:

コメントを投稿