RedHat互換LinuxでPHPやMariaDBをアップデートする方法

RedHat互換LinuxでPHPやMariaDBをアップデートする方法

Linux上でWebサーバーを運営している場合、PHPやMariaDBといったミドルウェアの定期的な更新は、セキュリティ対策として必須の作業の一つです。

そこでここでは、RedHat互換のLinuxで稼働しているWebサーバー(Nginx)で、PHPやMariaDBといったミドルウェアをアップデート(更新)する手順を紹介します。

動作環境

この記事は、以下の環境での動作結果を基にしています。他のディストリビューションやバージョンでは、動作結果が異なる場合があることをご了承ください。

ソフトウェアバージョン
Alma Linux9.3

MariaDBのアップデート

以下で紹介しているアップデート手順は、MariaDBをバージョン5系から10系にアップデートした際の手順ですが、同系のバージョンアップもおおむね同じ手順で実施できます。

repoファイルの作成

まず、以下のサイトへアクセスして、自分のプラットフォーム応じたリポジトリ情報を生成します。

MariaDB - repository generator

RedHat互換LinuxでPHPやMariaDBをアップデートする方法

つぎに、Linuxにログインして生成したリポジトリ情報をrepoファイルとして、所定の場所「/etc/yum.repos.d/」に保存します。

# vi /etc/yum.repos.d/mariadb.repo

# MariaDB 10.11 RedHatEnterpriseLinux repository list - created 2024-02-19 18:33 UTC
# https://mariadb.org/download/
[mariadb]
name = MariaDB
# rpm.mariadb.org is a dynamic mirror if your preferred mirror goes offline. See https://mariadb.org/mirrorbits/ for details.
# baseurl = https://rpm.mariadb.org/10.11/rhel/$releasever/$basearch
baseurl = https://mirrors.xtom.jp/mariadb/yum/10.11/rhel/$releasever/$basearch
# gpgkey = https://rpm.mariadb.org/RPM-GPG-KEY-MariaDB
gpgkey = https://mirrors.xtom.jp/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck = 1

既存データのバックアップ

万が一に備え、アップグレード実施前に、既存データと設定ファイルをバックアップしておきます。

データベースについては、以下のコマンドでバックアップできます。

# mysqldump -u root -p --all-databases > /tmp/all_db_backup.sql 

サービスの停止

つぎに、mariadbを利用しているソフトウェアをすべて停止させ、最後にmariadbを停止させます。

たとえば、Webサーバーとしてnginx、PHPとしてphp-fpmを利用している場合は、以下の順でサービスを停止します。

# systemctl stop nginx
# systemctl stop php-fpm
# systemctl stop mariadb

既存のMariaDBをアンインストール

つぎに、既存のMariaDBをアンインストールします。

# dnf remove mariadb-server

MariaDBをアップデート

つぎに、先ほど作成したrepoファイルを指定しMariaDBをインストールします。

# dnf install --enablerepo=mariadb mariadb-server

設定ファイルの統合

インストールが完了したら、設定ファイルの場所「/etc/my.cnf.d/」に移動し、rpmnewファイルやrpmsaveファイルが生成されている場合は、既存の設定ファイルと新しい設定ファイルを1つのファイルに統合します。

Linuxでアップデート後にrpmnew、rpmsaveファイルが生成されたときの対処方法
ここでは、CentOS 7でパッケージアップデート時生成されることがあるrpmnew、rpmsaveファイルとはなにかや、生成されていたときの対処方法を紹介します。

サービスの開始

設定ファイルを作成できたら、サービスを停止させたときと逆の順序でサービスを開始します。

# systemctl start mariadb
# systemctl start php-fpm
# systemctl start nginx

サービスの状態を確認

サービスを起動したら、エラーなどが発生していないことを確認します。

# systemctl status mariadb

サービスの自動起動設定

つぎに、システム起動時にサービスが自動起動するよう設定します。

# systemctl enable mariadb

更新結果の確認

最後に、MariaDBのバージョンが更新されているか確認します。

# mysql --version
mysql Ver 15.1 Distrib 10.2.13-MariaDB, for Linux (x86_64) using readline 5.1
Memo

データベースに接続して確認するときは以下のコマンドで

# mysql -u root -p'password' -e 'status'

以上で、アップデート完了です。

補足情報

MariaDBをアップデートした後にサービスを起動すると、以下のようなエラーや警告が出力されることがあります。

[ERROR] Missing system table mysql.roles_mapping; Please run mariadb_upgrade to create it.
[WARNING] InnoDB: Table mysql/innodb_table_stats has length mismatch in the
colum name table_name. Please run mariadb_upgrade

上のようなメッセージが表示されている場合は、ログに記述されている指示に従い「mariadb_upgrade」コマンドを実行し、処理が完了したらサービスを再起動します。

# mariadb_upgrade -u root -p

mariadb_upgradeコマンドは、データベースのシステムテーブルを更新するツールで、おおむね数秒程度で完了します。

mariadb-upgrade - MariaDB Knowledge Base

PHPのアップデート

以下で紹介しているアップデート手順は、PHP8.0を8.3へアップデートした際の手順ですが、そのほかのバージョンでもおおむね同じ手順で実施できます。

リポジトリの更新確認

まずは、リポジトリの更新がないか確認します。

# dnf -y update https://rpms.remirepo.net/enterprise/remi-release-9.rpm

サービスの停止

つぎに、PHPを利用しているサービスを停止します。(ここでは、Nginxとphp-fpm)

# systemctl stop nginx
# systemctl stop php80-php-fpm

既存のPHPをアンインストール

つぎに、既存のPHPをアンインストールします。

# dnf remove php80 php80-*

PHPをアップデート

つぎに、PHPと関連ライブラリをインストールします。(必要なライブラリは環境によって調整してください。)

# dnf install php83 php83-php-{bcmath,cli,common,devel,fpm,gd,intl,mbstring,mysqlnd,opcache,pdo,pear,pecl-apcu,pecl-imagick-im6,pecl-mcrypt,pecl-zip,process,sodium,xml}

設定ファイルの統合

インストールが完了したら、設定ファイルの場所(「/etc/」「/etc/php-fpm.d/」や「/etc/opt/remi/php83/」「/etc/opt/remi/php83/php-fpm.d」)に移動し、rpmnewファイルやrpmsaveファイルが生成されている場合は、既存の設定ファイルと新しい設定ファイルを1つのファイルに統合します。

Linuxでアップデート後にrpmnew、rpmsaveファイルが生成されたときの対処方法
ここでは、CentOS 7でパッケージアップデート時生成されることがあるrpmnew、rpmsaveファイルとはなにかや、生成されていたときの対処方法を紹介します。

サービスの開始

正常にアップデートできたら、サービスを停止させたときと逆の順序でサービスを開始します。

# systemctl start nginx
# systemctl start php83-php-fpm

サービスの状態を確認

サービスを起動したら、エラーなどが発生していないことを確認します。

# systemctl status php83-fpm

サービスの自動起動設定

つぎに、システム起動時にサービスが自動起動するよう設定します。

# systemctl enable php83-php-fpm

更新結果の確認

最後に、PHPが更新されたか確認しておきます。

# php83 -v
PHP 8.3.3 (cli) (built: Feb 13 2024 15:41:14) (NTS gcc x86_64)
Copyright (c) The PHP Group
Zend Engine v4.3.3, Copyright (c) Zend Technologies
with Zend OPcache v8.3.3, Copyright (c), by Zend Technologies

関連ライブラリが正常に認識されているかまで確認したいときは、Webサーバーのドキュメントルートに「phpinfo.php」ファイルを作成し、ブラウザで表示させて確認するとよいでしょう。

# vi phpinfo.php

<?php
phpinfo();
?>

https://<ドメイン名>/phpinfo.php

RedHat互換LinuxでPHPやMariaDBをアップデートする方法

以上でアップデート完了です。

あとがき

ソフトウェアの更新後は、表面上の動作だけでなく、面倒でもログなどにいつもと違う警告やエラーが発生していないか確認しましょう。