# インストール済みの MySQL を確認 yum list installed | grep mysql # インストール済みの MariaDB を確認 yum list installed | grep mariadb # MariaDB のアンインストール sudo yum remove mariadb-libs # インストールされる MySQL のバージョンを確認 yum info mysql # MySQL のバージョンが古い場合やパッケージがない場合は、リポジトリを追加 sudo yum install -y https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm # インストールされるバージョンを確認 sudo yum info --enablerepo=mysql80-community mysql-community-server # MySQL のインストール sudo yum install -y --enablerepo=mysql80-community mysql-community-server # バージョン確認 mysql --version # 起動 sudo systemctl start mysqld.service # 自動起動 sudo systemctl enable mysqld.service # ステータスの確認 systemctl status mysqld.service # ログディレクトリの作成 sudo mkdir /var/log/mysql sudo chown mysql:mysql /var/log/mysql # my.cnfの編集 sudoedit /etc/my.cnf log-error=/var/log/mysql/mysqld.log slow_query_log=1 slow_query_log_file=/var/log/mysql/slow_query.log long_query_time=0.1 validate_password.policy=LOW # root ユーザのパスワード確認 sudo cat /var/log/mysqld.log | grep "temporary password" # セキュリティ&パスワード設定 # 全てy sudo mysql_secure_installation # MySQL の再起動 sudo systemctl restart mysqld.service # 不要になったログファイルの削除 sudo less /var/log/mysqld.log sudo rm /var/log/mysqld.log # MySQL にログイン mysql -u root -p # パスワードポリシーの確認 show variables like 'validate_password%'; # ログ設定の確認 show variables like '%log%'; # 文字コードの確認 show global variables like 'character%'; # ユーザの作成 create user USER_NAME@'localhost' identified by 'PASSWORD'; select user, host from mysql.user; create database DB_NAME; # 権限の付与 grant all on DB_NAME.* to USER_NAME@'localhost'; flush privileges; show grants for USER_NAME@'localhost'; exit; # 接続テスト mysql -u USER_NAME -p -D DB_NAME
とあるサーバで、MySQL の再起動に失敗し、MySQL接続エラーが発生しました。
ログを確認したところ、以下のように表示されました。
mmap(137363456 bytes) failed; errno 12
Cannot allocate memory for the buffer pool
Plugin initialization aborted with error Generic error.
Failed to initialize DD Storage Engine
Data Dictionary initialization failed.
Aborting
/usr/sbin/mysqld: Shutdown complete (mysqld 8.0.22) MySQL Community Server - GPL.
原因は buffer pool のメモリが足りてないということでした。
デフォルトでは 128M になっているので、my.cnf を編集して適当な値に増やします。
# innodb_buffer_pool_size の変更 sudoedit /etc/my.cnf [mysqld] innodb_buffer_pool_size = 512M # MySQL 再起動 sudo service mysqld restart # MySQL に接続して、値が増えているのを確認 SHOW VARIABLES LIKE 'innodb_buffer_pool_size'; +-------------------------+-----------+ | Variable_name | Value | +-------------------------+-----------+ | innodb_buffer_pool_size | 536870912 | +-------------------------+-----------+ 1 row in set (0.01 sec)
コメント