MariaDB+PHP7.2のインストール (Amazon Linux 2)

amazon-linux-extrasを利用して、MariaDB+PHP7.2をインストールします。

1. miriadb-libs5.5のアンインストール

Amazon Linux 2でもmiriadb-libsの5.5がデフォルトでインストールされているので、削除します。

$ rpm -qa | grep -i "mariadb"
mariadb-libs-5.5.44-1.el7_1.x86_64
$ sudo yum remove mariadb-libs
※依存性関連で「postfix」も削除されてしまうので、MariaDBのインストール後に再インストールして下さい。

2. amazon-linux-extrasによるインストール

まずインストールすることのできるソフトウェアおよびバージョンを確認します。
$ sudo amazon-linux-extras
  0  ansible2                 available  [ =2.4.2 ]
  1  emacs                    available  [ =25.3 ]
  2  memcached1.5             available  [ =1.5.1 ]
  3  nginx1.12                available  [ =1.12.2 ]
  4  postgresql9.6            available  [ =9.6.6  =9.6.8 ]
  5  python3                  available  [ =3.6.2 ]
  6  redis4.0                 available  [ =4.0.5 ]
  7  R3.4                     available  [ =3.4.3 ]
  8  rust1                    available  [ =1.22.1  =1.26.0 ]
  9  vim                      available  [ =8.0 ]
 10  golang1.9                available  [ =1.9.2 ]
 11  ruby2.4                  available  [ =2.4.2  =2.4.4 ]
 12  nano                     available  [ =2.9.1 ]
 13  php7.2                   available  [ =7.2.0  =7.2.4  =7.2.5 ]
 14  lamp-mariadb10.2-php7.2  available  \
        [ =10.2.10_7.2.0  =10.2.10_7.2.4  =10.2.10_7.2.5 ]
 15  libreoffice              available  [ =5.0.6.2_15 ]
 16  gimp                     available  [ =2.8.22 ]
 17  docker=latest            enabled    [ =17.12.1  =18.03.1 ]
 18  mate-desktop1.x          available  [ =1.19.0  =1.20.0 ]
 19  GraphicsMagick1.3        available  [ =1.3.29 ]
 20  tomcat8.5                available  [ =8.5.31 ]
 

ここで14の「lamp-mariadb10.2-php7.2」の最新バージョンの「10.2.10_7.2.5」をインストールします。
$ sudo amazon-linux-extras install lamp-mariadb10.2-php7.2=10.2.10_7.2.5

次に以下のソフトウェアもインストールします。
$ sudo yum install mariadb-server
$ sudo yum install mariadb-devel

3. MariaDBの初期設定

(1) Ver.10.3.1まで
MariaDBの設定ファイルは「/etc/my.cnf」にありますが、「/etc/my.cnf.d」のファイルをインクルードしているだけなので、実体ファイルは「/etc/my.cnf.d」にあります。
初期にいくつかファイルはありますが、内容がほとんど書かれていないので、とりあえずバックアップフォルダを作成して、移動しておきます。
# mkdir /etc/my.cnf.d.bak
# mv /etc/my.cnf.d/*.* /etc/my.cnf.d.bak

「/usr/share/mysql」にスペック別に設定ファイルのひな型がありますので、これを「/etc/my.cnf.d」にコピーします。
  • my-huge.cnf
  • my-innodb-heavy-4G.cnf
  • my-large.cnf
  • my-medium.cnf
  • my-small.cnf
ここでは、「my-medium.cnf」をコピーします。
# cp /usr/share/mysql/my-medium.cnf /etc/my.cnf.d

コピーした設定ファイルを編集します。
# vi /etc/my.cnf.d/my-medium.cnf

■ InnoDBの使用
初期値はInnoDBが使用不可となっていますので、使用する場合には行頭の「#」を削除します。

【書き換え前】
# The MySQL server
[mysqld]
・・・(途中省略)・・・
# Uncomment the following if you are using InnoDB tables
#innodb_data_home_dir = /var/lib/mysql/
#innodb_data_file_path = ibdata1:10M:autoextend
#innodb_log_group_home_dir = /var/lib/mysql/
#innodb_log_arch_dir = /var/lib/mysql/
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
#innodb_buffer_pool_size = 16M
#innodb_additional_mem_pool_size = 2M
# Set .._log_file_size to 25 % of buffer pool size
#innodb_log_file_size = 5M
#innodb_log_buffer_size = 8M
#innodb_flush_log_at_trx_commit = 1
#innodb_lock_wait_timeout = 50

【書き換え後】
# The MySQL server
[mysqld]
・・・(途中省略)・・・
# Uncomment the following if you are using InnoDB tables
innodb_data_home_dir = /var/lib/mysql/
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = /var/lib/mysql/
innodb_log_arch_dir = /var/lib/mysql/
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
innodb_buffer_pool_size = 16M
innodb_additional_mem_pool_size = 2M
# Set .._log_file_size to 25 % of buffer pool size
innodb_log_file_size = 5M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50

※※※※「innodb_log_file_size」をコメント解除する場合の注意点※※※※

「/var/lib/mysql」ディレクトリに
・ib_logfile0
・ib_logfile1
が既に存在する場合に、これらのファイルサイズが「innodb_log_file_size」で指定したファイルサイズの範囲外の値となっていることがあります。
その場合には、mysqldのログファイルに「InnoDB: Error: log file /var/lib/mysql/ib_logfile0 is of different size 0 5242880 bytes」というように記録され、InnoDBエンジンにエラーが発生して、InnoDBが無効になってしまうケースがあります。
この場合には、既存の「ib_logfile0」「ib_logfile1」を削除して、MySQLを再起動して下さい。
新しいログファイルが作成されます。

また、InnoDBをデフォルトストレージエンジンにしたい場合は、以下のように記述します。
[mysqld]
・・・(途中省略)・・・
default-storage-engine=InnoDB

■ PHPの日本語文字化け対策
MySQL4.1以降、PHPからアクセスすると文字化けすることが多くなってきたので、文字化け対策を行います。
これは、[mysqld]の項目に、1行「skip-character-set-client-handshake」を追加すればOKです。
# The MySQL server
[mysqld]
・・・(途中省略)・・・
character-set-server=utf8
skip-character-set-client-handshake

■ バイナリログの自動削除
バイナリログは、実行したSQL文が記録されており、障害発生時の調査や障害復旧時に必要なものです。
ただし、このバイナリログは容量が大きく、サーバのHDDの容量を圧迫する原因ともなり、また自動で削除されません。
そこで、自動削除するためのオプションを追加します。

【書き換え前】
# The MySQL server
[mysqld]
・・・(途中省略)・・・
# Replication Master Server (default)
# binary logging is required for replication
log-bin=mysql-bin

【書き換え後】
# The MySQL server
[mysqld]
・・・(途中省略)・・・
# Replication Master Server (default)
# binary logging is required for replication
log-bin=mysql-bin
expire_logs_days = 30

「expire_logs_days」では、バイナリログを自動削除する日数を指定します。
デフォルトは「0」で自動削除しません。
なお、ログを削除するタイミングは、MySQLサーバの起動時、もしくはログローテート時となりますので、指定の日数を超えても直ぐに削除されるとは限りません。

■max_allowed_packet値の変更
「max_allowed_packet」は、クライアントからサーバへパケットを送ることのできる最大のデータサイズを指定します。
デフォルトでは1MBなので、ある程度大きなデータを送ろうとすると、
MySQL Error[2006] : MySQL server has gone away
のようなエラーが発生することがあります。
そこでこの値を大きくします。

【書き換え前】
max_allowed_packet=1M

【書き換え後】
max_allowed_packet=16M

■ログ関係
各種ログが必要な場合は、以下の項目を追記します。
#  Error log
log_error="mysqld.log"
log_warnings=1
 
#  Query log
general_log = ON
general_log_file="sql.log"
 
#  Slow Query log
slow_query_log=1
slow_query_log_file="slow.log"
log_queries_not_using_indexes
log_slow_admin_statements
long_query_time=5

(2) Ver.10.3.2移行
※設定ひな型ファイルは、10.3.2移行なくなりました。
公式では、以下のように発表されています。
This is intentional. We set generally useful defaults in the server. Configuration files are for the end user to modify the defaults, not for us to set them.(これは意図的なものです。 一般的に便利なデフォルトをサーバーに設定します。 構成ファイルは、エンドユーザーがデフォルトを変更するためのものであり、設定するためのものではありません。)

MariaDBのデフォルト値から変更する部分のみ [mysqld] セクションに記述します。
# vi /etc/my.cnf.d/server.cnf
[mysqld]
innodb_data_home_dir = /var/lib/mysql/
innodb_log_group_home_dir = /var/lib/mysql/
 
character_set_client=utf8
character_set_server=utf8
 
collation_server=utf8_unicode_ci
 
#  Error log
log_error="mysqld.log"
log_warnings=1
 
#  Query log
general_log = ON
general_log_file="sql.log"
 
#  Slow Query log
slow_query_log=1
slow_query_log_file="slow.log"
log_queries_not_using_indexes
log_slow_admin_statements
long_query_time=5

(3) 不要なプラグインを除外
「/etc/my.cnf.d/auth_gssapi.cnf」は不要なので、除外します。
$ sudo mv /etc/my.cnf.d/auth_gssapi.cnf /etc/my.cnf.d/auth_gssapi.cnf.bak

(4) MariaDBの起動
設定が完了したら、MariaDBのサービスを起動します。
$ sudo systemctl start mariadb.service

(5) 自動起動設定
サーバを再起動した場合に自動的にサービスが起動するようにします。
$ sudo systemctl enable mariadb.service

(6) mysql_secure_installationの実行
MySQLのセキュリティを向上させるために「mysql_secure_installation」を実行します。
$ sudo /usr/bin/mysql_secure_installation
このコマンドは、
  • rootユーザのパスワード文字列を設定する
  • anonymousユーザを削除する(Yes|No)
  • リモートからのrootログインを禁止する(Yes|No)
  • TESTデータベースを削除する(Yes|No)
  • 権限を再読み出しする(Yes|No)
という作業を対話式に順次実行します。

(7) rootパスワードの設定
インストール直後のMySQLは「root」ユーザにパスワードが設定されていないので、パスワードを設定します。
※前述の「mysql_secure_installation」を実行した場合には不要です。

MySQLにログインします。
$ sudo mysql -u root

パスワードを設定します。
mysql> SET PASSWORD FOR root@localhost=PASSWORD('xxxxxx');
mysql> exit;

パスワードなしでログインしてエラーが発生することを確認します。
$ sudo mysql -u root

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

設定したパスワードでログインできることを確認します。
$ sudo mysql -u root -p

パスワードを入力します。
Enter password:

ログインできればOKです。

4. PHPの設定

(1) PHPのモジュールのインストール
追加でPHPのモジュールをインストールします。
$ sudo yum install php-mbstring
$ sudo yum install php-gd
$ sudo yum install php-xml
$ sudo yum install php-xmlrpc
$ sudo yum install php-opcache
$ sudo yum install php-zip
$ sudo yum install php-pear

(2) エラーログファイルの作成
「/var/log/httpd/php_errors.log」というファイルを作成しておきます。
$ sudo touch /var/log/httpd/php_errors.log
$ sudo chmod 777 /var/log/httpd/php_errors.log

(3) php.iniの編集
$ sudo vi /etc/php.ini

expose_php = Off
error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT
error_log = /var/log/httpd/php_errors.log

post_max_size = 20M
upload_max_filesize = 20M
date.timezone = "Asia/Tokyo"
session.gc_divisor = 100
session.gc_maxlifetime = 3600
mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_input = pass
mbstring.http_output = pass

(4) Apacheの再起動
Apacheを再起動して、PHPを有効にします。
$ sudo systemctl restart httpd.service

(5) php-fpmサービスの起動
$ sudo systemctl enable php-fpm.service
$ sudo systemctl restart php-fpm.service


最終更新:2019年12月23日 15:20