データベースアクセスエラーの対処

スポンサーリンク
MySQL
この記事は約19分で読めます。
ランキングに参加しています。応援よろしくお願いします。
ブログランキング・にほんブログ村へ 人気ブログランキングへ FC2ブログランキングへ

前回にも少し書きましたが、先日にデータベースのアクセスエラーで当ブログへのアクセスができなくなっていました。
今回は、その際の対処要領の備忘録です。

スポンサーリンク
この記事が気に入ったら
フォローしよう
最新情報をお届けします。

ブログにアクセスすると「Error establishing a database connection」と表示されアクセスできませんでした。

サービスを確認すると「failed」となっており、動いていません。

# systemctl status mariadb
● mariadb.service - MariaDB 10.11.9 database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled)
  Drop-In: /etc/systemd/system/mariadb.service.d
           mqmigrated-from-my.cnf-settings.conf
   Active: failed (Result: exit-code) since 金 2024-08-23 10:14:11 JST; 13s ago
~ 略 ~

単純にサービスがダウンしただけで起動し直せば解決すると思い、起動してみましたが起動しませんでした。

データベース(MariaDB)のバージョンを最新版にアップデート
10.11.9 ⇒ 11.5.2

公式のドキュメントにあるようにMariaDBパッケージリポジトリセットアップスクリプトを使用して最新バージョンのリポジトリ構成にアップデートします。

# curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash
# cat /etc/yum.repos.d/mariadb.repo
[mariadb-main]
name = MariaDB Server
baseurl = https://dlm.mariadb.com/repo/mariadb-server/11.rolling/yum/rhel/7/x86_64
gpgkey = file:///etc/pki/rpm-gpg/MariaDB-Server-GPG-KEY
gpgcheck = 1
enabled = 1
[mariadb-maxscale]
# To use the latest stable release of MaxScale, use "latest" as the version
# To use the latest beta (or stable if no current beta) release of MaxScale, use "beta" as the version
name = MariaDB MaxScale
baseurl = https://dlm.mariadb.com/repo/maxscale/latest/yum/rhel/7/x86_64
gpgkey = file:///etc/pki/rpm-gpg/MariaDB-MaxScale-GPG-KEY
gpgcheck = 1
enabled = 1
[mariadb-tools]
name = MariaDB Tools
baseurl = https://downloads.mariadb.com/Tools/rhel/7/x86_64
gpgkey = file:///etc/pki/rpm-gpg/MariaDB-Enterprise-GPG-KEY
gpgcheck = 1
enabled = 1

1行目:リポジトリセットアップスクリプトの実行
3行目:リポジトリ構成の確認
6行目:MariaDBのバージョンが最新版をインストールするように「11.rolling」となっている

サービスは動いてはいないのですが、おまじないで停止します。

# systemctl stop mariadb

インストールされている現バージョンのMariaDBをアンインストールします。

# yum remove MariaDB-server.x86_64
削除しました:
  MariaDB-server.x86_64 0:10.11.9-1.el7.centos
完了しました!
# yum install -y MariaDB-server.x86_64
インストール:
  MariaDB-server.x86_64 0:11.5.2-1.el7.centos
依存性関連をインストールしました:
  MariaDB-client-compat.noarch 0:11.5.2-1.el7.centos          MariaDB-server-compat.noarch 0:11.5.2-1.el7.centos
依存性を更新しました:
  MariaDB-client.x86_64 0:11.5.2-1.el7.centos
完了しました!

インストール後のパッケージリストを確認します。

# yum list installed MariaDB*
読み込んだプラグイン:langpacks, versionlock
インストール済みパッケージ
MariaDB-backup.x86_64               10.11.9-1.el7.centos        @mariadb-main
MariaDB-client.x86_64               11.5.2-1.el7.centos         @mariadb-main
MariaDB-client-compat.noarch        11.5.2-1.el7.centos         @mariadb-main
MariaDB-common.x86_64               10.11.9-1.el7.centos        @mariadb-main
MariaDB-compat.x86_64               10.11.9-1.el7.centos        @mariadb-main
MariaDB-devel.x86_64                10.11.9-1.el7.centos        @mariadb-main
MariaDB-server.x86_64               11.5.2-1.el7.centos         @mariadb-main
MariaDB-server-compat.noarch        11.5.2-1.el7.centos         @mariadb-main
MariaDB-shared.x86_64               10.11.9-1.el7.centos        @mariadb-main

MariaDBのパッケージが一部アップデートされていないので、YUMアップデートを実行します。

# yum update
# yum list installed MariaDB*
読み込んだプラグイン:langpacks, versionlock
インストール済みパッケージ
MariaDB-backup.x86_64               11.5.2-1.el7.centos         @mariadb-main
MariaDB-client.x86_64               11.5.2-1.el7.centos         @mariadb-main
MariaDB-client-compat.noarch        11.5.2-1.el7.centos         @mariadb-main
MariaDB-common.x86_64               11.5.2-1.el7.centos         @mariadb-main
MariaDB-compat.x86_64               11.5.2-1.el7.centos         @mariadb-main
MariaDB-devel.x86_64                11.5.2-1.el7.centos         @mariadb-main
MariaDB-server.x86_64               11.5.2-1.el7.centos         @mariadb-main
MariaDB-server-compat.noarch        11.5.2-1.el7.centos         @mariadb-main
MariaDB-shared.x86_64               11.5.2-1.el7.centos         @mariadb-main

すべてのMariaDBインストール済みパッケージのバージョンが最新版にアップデートされた。

必要に応じて、設定ファイル(my.cnf)などを変更します。
※当サーバの環境では、「my.cnf」にはインクルード設定としており、「/etc/my.cnf.d/server.cnf」で設定している

# view /etc/my.cnf.d/server.cnf
~ 中略 ~
[mariadb]
socket=/var/lib/mysql/mysql.sock
character-set-server=utf8mb4
log-error=/var/log/mariadb/error.log
general_log=1
general_log_file=/var/log/mariadb/query.log
~ 略 ~

[mariadb]セクションに以下を追加
6行目:ソケットファイルを明示的に指定
7行目:文字セットを4バイト扱える「utf8mb4」に設定
8行目:エラーログの出力先指定
9行目:すべてのクエリログを出力する設定
10行目:クエリログの出力先指定

サービスを起動してみたが、変わらず起動せず。

# systemctl start mariadb
# systemctl status mariadb
● mariadb.service - MariaDB 11.5.2 database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled)
  Drop-In: /etc/systemd/system/mariadb.service.d
           mqmigrated-from-my.cnf-settings.conf
   Active: failed (Result: exit-code) since 金 2024-08-23 16:34:29 JST; 13s ago
     Docs: man:mariadbd(8)
           https://mariadb.com/kb/en/library/systemd/
  Process: 25211 ExecStart=/usr/sbin/mariadbd $MYSQLD_OPTS $_WSREP_NEW_CLUSTER $_WSREP_START_POSITION (code=exited, status=218/CAPABILITIES)
  Process: 25188 ExecStartPre=/bin/sh -c [ ! -e /usr/bin/galera_recovery ] && VAR= ||   VAR=`/usr/bin/galera_recovery`; [ $? -eq 0 ]   && systemctl set-environment _WSREP_START_POSITION=$VAR || exit 1 (code=exited, status=0/SUCCESS)
  Process: 25185 ExecStartPre=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
 Main PID: 25211 (code=exited, status=218/CAPABILITIES)
 8月 23 16:34:29 marusv.maruweb.jp.net systemd[1]: Starting MariaDB 11.5.2 database server...
 8月 23 16:34:29 marusv.maruweb.jp.net systemd[1]: mariadb.service: main process exited, code=exited, status=218/CAPABILITIESsi
 8月 23 16:34:29 marusv.maruweb.jp.net systemd[1]: Failed to start MariaDB 11.5.2 database server.
 8月 23 16:34:29 marusv.maruweb.jp.net systemd[1]: Unit mariadb.service entered failed state.
 8月 23 16:34:29 marusv.maruweb.jp.net systemd[1]: mariadb.service failed.

ここからが、本題のエラー対処になります。

MariaDBのジャーナルログをmariadb.logとして手動で出力してみます。

# journalctl -xeu mariadb > mariadb.log
# view journalctl mariadb.log
~ 抜粋 ~
-- Unit mariadb.service has begun starting up.
 8月 23 16:34:29 marusv.maruweb.jp.net systemd[1915]: Failed at step CAPABILITIES spawning /usr/sbin/mariadbd: Invalid argument
-- Subject: Process /usr/sbin/mariadbd could not be executed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- The process /usr/sbin/mariadbd could not be executed and failed.
--
-- The error number returned by this process is 22.
 8月 23 16:34:29 marusv.maruweb.jp.net systemd[1]: mariadb.service: main process exited, code=exited, status=218/CAPABILITIES
 8月 23 16:34:29 marusv.maruweb.jp.net systemd[1]: Failed to start MariaDB 11.5.2 database server.
-- Subject: Unit mariadb.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit mariadb.service has failed.
--
-- The result is failed.
 8月 23 16:34:29 marusv.maruweb.jp.net systemd[1]: Unit mariadb.service entered failed state.
 8月 23 16:34:29 marusv.maruweb.jp.net systemd[1]: mariadb.service failed.
 8月 23 16:54:17 marusv.maruweb.jp.net systemd[1]: Starting MariaDB 11.5.2 database server...
-- Subject: Unit mariadb.service has begun start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel

1行目:MariaDBのジャーナルログの出力
3行目:出力したジャーナルログの確認

ジャーナルログの中で「CAPABILITIES」に関して色々と調べていくと、あるサイトに辿り着き、MariaDBのサービスのある設定をコメントアウトすることで起動できたとあったので試してみました。

# vi /lib/systemd/system/mariadb.service
~ 中略 ~
# CAP_IPC_LOCK To allow memlock to be used as non-root user
# CAP_DAC_OVERRIDE To allow auth_pam_tool (which is SUID root) to read /etc/shadow when it's chmod 0
#   does nothing for non-root, not needed if /etc/shadow is u+r
# CAP_AUDIT_WRITE auth_pam_tool needs it on Debian for whatever reason
#AmbientCapabilities=CAP_IPC_LOCK CAP_DAC_OVERRIDE CAP_AUDIT_WRITE
~ 略 ~

9行目:コメントアウト

AmbientCapabilitiesは、プロセスが実行される環境で、プロセスがデフォルトで持つことができる特別な権限のことです。MariaDBのようなデータベースサーバーは、他のプロセスと通信したり、システムリソースにアクセスしたりするために、特定のcapabilitiesを必要とすることがあります。

Geminiに聞いてみた

CAP_AUDIT_WRITE: システム監査イベントを書き込むことを許可します。
CAP_IPC_LOCK: 共有メモリセグメントへのロック操作を許可します。
CAP_DAC_OVERRIDE: ファイルのアクセス許可をオーバーライドすることを許可します。

GEMINIに聞いてみた

サービスファイルを変更したのでデーモンを再読み込みします。

# systemctl daemon-reload

問題が取り除かれたため今度はエラー無く起動しました。

# systemctl start mariadb
# systemctl status mariadb.service
● mariadb.service - MariaDB 11.5.2 database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled)
  Drop-In: /etc/systemd/system/mariadb.service.d
           mqmigrated-from-my.cnf-settings.conf
   Active: active (running) since 金 2024-08-23 16:54:24 JST; 6s ago
     Docs: man:mariadbd(8)
           https://mariadb.com/kb/en/library/systemd/
  Process: 3502 ExecStartPost=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
  Process: 3461 ExecStartPre=/bin/sh -c [ ! -e /usr/bin/galera_recovery ] && VAR= ||   VAR=`/usr/bin/galera_recovery`; [ $? -eq 0 ]   && systemctl set-environment _WSREP_START_POSITION=$VAR || exit 1 (code=exited, status=0/SUCCESS)
  Process: 3458 ExecStartPre=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
 Main PID: 3484 (mariadbd)
   Status: "Taking your SQL requests now..."
   CGroup: /system.slice/mariadb.service
           mq3484 /usr/sbin/mariadbd
 8月 23 16:54:17 marusv.maruweb.jp.net systemd[1]: Starting MariaDB 11.5.2 database server...
 8月 23 16:54:17 marusv.maruweb.jp.net mariadbd[3484]: 2024-08-23 16:54:17 0 [ERROR] feedback plugin: failed to retrieve the MAC address
 8月 23 16:54:24 marusv.maruweb.jp.net systemd[1]: Started MariaDB 11.5.2 database server.

6行目:「Active: active (running)」となっているのを確認

MariaDBの起動後、MariaDBのバージョンをアップデートしたのでアップグレードツールを実行します。

# mariadb-upgrade -u root -p

データベース構造の調整: 新しいバージョンで変更されたデータベースの構造を自動的に調整します。
プラグインの更新: 古いバージョンのプラグインを新しいバージョンに置き換えます。
設定ファイルの調整: 新しいバージョンに対応するために、設定ファイルを変更します。
内部テーブルのチェックと修復: データベースの内部テーブルをチェックし、必要に応じて修復します。

GEMINIに聞いてみた

データベースへのログイン及びブログへのアクセスをそれぞれ確認します。

# mysql -u root -p
mysql: Deprecated program name. It will be removed in a future release, use '/usr/bin/mariadb' instead
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 23
Server version: 11.5.2-MariaDB-log MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> quit
Bye

ブログへのアクセスも問題なく確認できました。
対処後、1週間ほど経過しましたが、問題なく動作しているようです。

タイトルとURLをコピーしました