コンテンツへスキップ

(CentOS7) mariadb 10.7.x で Errcode: 13 “Permission denied”

10.2 からアップデートしました

さらっと流しますがアップデートの方法は、/etc/yum.repos.d/mariadb.repo (があるはず。なければ作成) を編集して、

# MariaDB 10.7 CentOS repository list - created 2022-05-23 16:44 UTC
# https://mariadb.org/download/
[mariadb]
name = MariaDB
baseurl = https://tw1.mirror.blendbyte.net/mariadb/yum/10.7/centos7-amd64
gpgkey=https://tw1.mirror.blendbyte.net/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck=1
enabled=1

こんな感じのにして、yum update “MariaDB-*” とでもやればアップデートできます。(雑)
ただ、MariaDB-server だけはアップデートされなかった?ので、yum remove MariaDB-server した後、yum install MariaDB-server すればインストールされます。

ちなみに、元の server.cnf は /etc/my.cnf.d/server.cnf.rpmsave とリネームされてしまっているので、そのまま起動するとデフォ状態の mysql が起動するので注意。server.cnf.rpmsave -> server.cnf としましょう。

起動すると fail する?

# systemctl status mariadb.service
● mariadb.service - MariaDB 10.7.4 database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled)
  Drop-In: /etc/systemd/system/mariadb.service.d
           └─migrated-from-my.cnf-settings.conf
   Active: failed (Result: exit-code) since 火 2022-05-24 01:56:20 JST; 4s ago
     Docs: man:mariadbd(8)
           https://mariadb.com/kb/en/library/systemd/
  Process: 2259 ExecStart=/usr/sbin/mariadbd $MYSQLD_OPTS $_WSREP_NEW_CLUSTER $_WSREP_START_POSITION (code=exited, status=1/FAILURE)
  Process: 2130 ExecStartPre=/bin/sh -c [ ! -e /usr/bin/galera_recovery ] && VAR= ||   VAR=`cd /usr/bin/..; /usr/bin/galera_recovery`; [ $? -eq 0 ]   && systemctl set-environment _WSREP_START_POSITION=$VAR || exit 1 (code=exited, status=0/SUCCESS)
  Process: 2128 ExecStartPre=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
 Main PID: 2259 (code=exited, status=1/FAILURE)
   Status: "MariaDB server is down"

 5月 24 01:56:20 testserver.corp systemd[1]: Starting MariaDB 10.7.4 database server...
 5月 24 01:56:20 testserver.corp mariadbd[2259]: 2022-05-24  1:56:20 0 [Note] /usr/sbin/mariadbd (server 10.7.4-MariaDB-log) starting as process 2259 ...
 5月 24 01:56:20 testserver.corp mariadbd[2259]: 2022-05-24  1:56:20 0 [Warning] Can't create test file /home/mysql/data/testserver.lower-test
 5月 24 01:56:20 testserver.corp mariadbd[2259]: [94B blob data]
 5月 24 01:56:20 testserver.corp mariadbd[2259]: 2022-05-24  1:56:20 0 [ERROR] Aborting
 5月 24 01:56:20 testserver.corp systemd[1]: mariadb.service: main process exited, code=exited, status=1/FAILURE
 5月 24 01:56:20 testserver.corp systemd[1]: Failed to start MariaDB 10.7.4 database server.
 5月 24 01:56:20 testserver.corp systemd[1]: Unit mariadb.service entered failed state.
 5月 24 01:56:20 testserver.corp systemd[1]: mariadb.service failed.

これだけ見ると意味不明なので、/var/log/messages を確認してみる。

May 24 01:58:56 testserver mariadbd: 2022-05-24  1:58:56 0 [Note] /usr/sbin/mariadbd (server 10.7.4-MariaDB-log) starting as process 2408 ...
May 24 01:58:56 testserver mariadbd: 2022-05-24  1:58:56 0 [Warning] Can't create test file /home/mysql/data/testserver.lower-test
May 24 01:58:56 testserver mariadbd: #007/usr/sbin/mariadbd: Can't change dir to '/home/mysql/data/' (Errcode: 13 "Permission denied")
May 24 01:58:56 testserver mariadbd: 2022-05-24  1:58:56 0 [ERROR] Aborting

Permission denied? /home/mysql/data は mysql ユーザーなので問題無し。

解決方法

MariaDB はデータ位置をデフォから変えるとセキュリティが働いて起動しなくなるそうです。(フォーラムで調べました)
これは起動時の設定ファイルを編集する事で対応できるとの事。

# vi /usr/lib/systemd/system/mariadb.service

ProtectSystem=on -> off
PrivateDevices=false -> true
ProtectHome=true -> false

と書き換えます。
ご丁寧に Prevent accessing /home, /root and /run/user と書いてある…
データは /home 以下に置くというものが染み付いていると、こういうトラブルを生むようです。

あとは /usr/lib/systemd/system/mariadb.service を編集したので、daemon-reload します。

# systemctl daemon-reload
# systemctl start mariadb.service
# systemctl status mariadb.service

● mariadb.service - MariaDB 10.7.4 database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled)
  Drop-In: /etc/systemd/system/mariadb.service.d
           └─migrated-from-my.cnf-settings.conf
   Active: active (running) since 火 2022-05-24 01:59:04 JST; 16min ago
     Docs: man:mariadbd(8)
           https://mariadb.com/kb/en/library/systemd/
  Process: 2582 ExecStartPost=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
  Process: 2439 ExecStartPre=/bin/sh -c [ ! -e /usr/bin/galera_recovery ] && VAR= ||   VAR=`cd /usr/bin/..; /usr/bin/galera_recovery`; [ $? -eq 0 ]   && systemctl set-environment _WSREP_START_POSITION=$VAR || exit 1 (code=exited, status=0/SUCCESS)
  Process: 2437 ExecStartPre=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
 Main PID: 2567 (mariadbd)
   Status: "Taking your SQL requests now..."
   CGroup: /system.slice/mariadb.service
           └─2567 /usr/sbin/mariadbd

はい、起動しました。
こういう罠が待っていると怖いですねー。

コメントを残す

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

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください