サーバ

MySQLダウン/データベース接続確立エラー その1

→MySQLダウン/データベース接続確立エラー その1
GCPでWordPressを立ち上げて半日後くらい、Jetpack(WordPressでいろいろやってくれるプラグイン/サービス)から、ブログにアクセスできない旨の通知がメールで届きました。
あれ?っとアクセスしてみるとこう
MySQLが死んでいるみたいです。コンソールにアクセスしてログを見てみたらこう
$ cat /var/log/mysql/error.log
171215 7:30:07 [Warning] Using unique option prefix myisam-recover instead of myisam-recover-options is deprecated
and will be removed in a future release. Please use the full name instead.
171215 7:30:07 [Note] Plugin 'FEDERATED' is disabled.
171215 7:30:07 InnoDB: The InnoDB memory heap is disabled
171215 7:30:07 InnoDB: Mutexes and rw_locks use GCC atomic builtins
171215 7:30:07 InnoDB: Compressed tables use zlib 1.2.8
171215 7:30:07 InnoDB: Using Linux native AIO
171215 7:30:07 InnoDB: Initializing buffer pool, size = 128.0M
InnoDB: mmap(137363456 bytes) failed; errno 12
171215 7:30:07 InnoDB: Completed initialization of buffer pool
171215 7:30:07 InnoDB: Fatal error: cannot allocate memory for the buffer pool
171215 7:30:07 [ERROR] Plugin 'InnoDB' init function returned error.
171215 7:30:07 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
171215 7:30:07 [ERROR] Unknown/unsupported storage engine: InnoDB
171215 7:30:07 [ERROR] Aborting
171215 7:30:07 [Note] /usr/sbin/mysqld: Shutdown complete

MySQLのエンジンであるInnoDBで何か問題が発生し、リカバーしようと試みたけれどもメモリを確保出来ず死んだようです。解決策として手っ取り早いのはVMのメモリを増やすこと。vmタイプを「g1-small(vCPU x 1、メモリ 1.7 GB)」に設定したら落ちなくなりました。

 

が、小さいフットプリントで動かしてみたいので簡単にチューニングしてみることに。

不要データの削除

<a href=”https://wordpress.org/plugins/wp-optimize/”>WP-Optimizeプラグイン</a>を使うと、投稿の古いリビジョンやスパム投稿などをまとめて削除してDBをクリーンアップできます。古いリビジョンやスパム投稿がDBのメモリ上に乗ることがあるのかどうかはわからないけど・・・。

消したいものを選択して”Run all selected optimizations”を押すだけ。

MySQLをチューニング

たぶん128MBとか必要ないので、メモリ確保量を減らします。

参考にしたサイト:
MySQL最低限のメモリ設定 – Qiita
MySQL のキャッシュサイズ変更で高速化

GCPでMySQLの設定は/etc/mysql/my.cnfに書かれており、また/etc/mysql/conf.d/ディレクトリ内に.cnfという拡張子がついているファイルで設定を上書きしてくれるみたい。
/etc/mysql/my.cnfより抜粋:

#
# * IMPORTANT: Additional settings that can override those from this file!
#   The files must end with '.cnf', otherwise they'll be ignored.
#
!includedir /etc/mysql/conf.d/

innodb_buffer_pool_sizeとinnodb_log_file_sizeを指定している箇所はどうも見当たらなかったけど、
/etc/mysql/conf.d/yusuke.cnf というファイルを作って明示的に指定してみました

innodb_buffer_pool_size = 32M
innodb_log_file_size = 8M

f1-micro(vCPU x 1、メモリ 0.6 GB)のインスタンスで起動直後のメモリ使用量はこんな感じ。

$ free
             total       used       free     shared    buffers     cached
Mem:        608676     405508     203168      41568      15708     149872
-/+ buffers/cache:     239928     368748
Swap:            0          0          0

これでちょっと様子を見てみます。

Comments are closed.