MySQL 起動エラー バッファプール メモリ 不足 設定

今回は、MySQLのバッファプールを設定するメモです。

具体的には、以下の設定方法をメモしたいと思います。

  • swap領域の設定
  • バッファプールサイズ増強

前置き

以前、AWS LightsailでAmazonLinux2に、

MySQLをインストールして起動しようとしたところ、以下の様なエラーに遭遇しました。

MySQL Cannot allocate memory for the buffer pool

ec2-user@ip-172-26-0-220 ~]$ sudo cat /var/log/mysqld.log 

2024-01-07T07:51:52.474820Z 0 [System] [MY-013169] [Server] /usr/sbin/mysqld (mysqld 8.0.35) initializing of server in progress as process 2900

2024-01-07T07:51:52.503901Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.

2024-01-07T07:51:53.026747Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.

2024-01-07T07:51:57.851209Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.

2024-01-07T07:51:57.859705Z 0 [Warning] [MY-012681] [InnoDB] page_aligned_alloc mmap(137236480 bytes) failed; errno 12

2024-01-07T07:51:57.859760Z 1 [ERROR] [MY-012956] [InnoDB] Cannot allocate memory for the buffer pool

2024-01-07T07:51:57.859781Z 1 [ERROR] [MY-012930] [InnoDB] Plugin initialization aborted with error Generic error.

2024-01-07T07:51:57.859802Z 1 [ERROR] [MY-010334] [Server] Failed to initialize DD Storage Engine

2024-01-07T07:51:57.859896Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed.

2024-01-07T07:51:57.859922Z 0 [ERROR] [MY-010119] [Server] Aborting

2024-01-07T07:51:57.861440Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.35)  MySQL Community Server - GPL.

ログの内容を確認すると、

Cannot allocate memory for the buffer poolとあり、

メモリ割り当て不足が原因で正常に起動できなかった様です。

※少なくともこちらに表示されている数値以上は割り当てが必要

page_aligned_alloc mmap(137236480 bytes) failed; errno 12

こういったケースもスペック増強する前に、

割り当てを正しく行えば、エラー解消できます。


swap領域作成

まずは、swap領域の作成についてです。

ddコマンドを利用して、swap領域に設定する空ファイルを作成します。

sudo dd if=/dev/zero of=/swapfile bs=1M count=256

続けて、mkswapコマンドでswap領域を設定します。

sudo mkswap /swapfile

その後、メッセージで促された通り、swap領域のパーミッションを調整します。

change swap file permission

sudo chmod 600 /swapfile

以下のコマンドなどで、割り当て状況を確認して、

指定した数値分割り当てられていれば、設定できています。

free

free memory

設定をMySQLに反映させるために、MySQLを再起動します。

sudo service mysqld restart

バッファプールサイズ増強

次に、バッファプールサイズの設定方法です。

ここでのメモは、innodb_buffer_pool_sizeの割り当てを増やす方法となります。

通常、innodb_buffer_pool_sizeは、my.cnfというMySQLの設定ファイルで定義されているため、

my.cnfの設定値を変更することで変更可能です。

現状のバッファプールサイズ確認方法

現在のプールサイズは、my.cnfの内容で確認できますが、

現状のサービスが認識しているサイズは、SQLコマンドで確認できます。

SHOW VARIABLES LIKE 'innodb_buffer_pool_size'

バッファプールサイズ変更

my.cnfの内容を変更して、サイズを変更します。

ただし、my.cnfは複数配置が可能なため、

事前作業として、配置されているmy.cnfを確認します。

mysql --help | grep my.cnf

優先順位が高いファイル順に左から表示されます。

check my.cnf

my.cnfを確認できたら、innodb_buffer_pool_sizeの数値を任意の数値に変更します。

[mysqld]

innodb_buffer_pool_size = 256M

my.cnf innodb_buffer_pool_size

その後、MySQLを再起動して設定を反映させます。

systemctl restart mysqld

my.cnf after MySQL restart


今回のメモは以上となります。

個人開発や演習目的でスペックの低いサーバーに、

MySQLを立てようとすると、起きやすい問題かと思います。

ある程度余裕のある数値を設定しておきたいところです。

都内でエンジニアをやっています。 2017年に脱サラ(法人設立)しました。 仕事で調べたことや、気になったことをメモしています。
投稿を作成しました 172

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


関連投稿

検索語を上に入力し、 Enter キーを押して検索します。キャンセルするには ESC を押してください。

トップに戻る