サムドライブに MySQL データ ファイルがあり、ユーザーの UID が異なる 2 つのホストで使用されています。その結果、ファイルに権限があり、所有者として不明な UID があるmysql
場合、MySQL は起動に失敗します。0700
MySQL の umask を変更する方法を見つけることができませんでした (実際、これらのファイルを全員と共有するという考えは好きではありません)。そのため、mysql
両方のホスト上のユーザーの UID を変更して、ファイルが同じユーザーに属するようにしたいと考えています。
chown
UID と、古い mysql UID が所有するすべてのファイルを新しいユーザーに変更します。
usermod --uid 900 --gid 900 mysql # assign the new uid
olduid=67 find / -user $olduid -group $olduid -print0 | xargs -0 chown "mysql:mysql"
これは、一般的なケースでアプリケーションが動作するには十分でしょうか? おそらく、もっと良い選択肢があるのではないでしょうか?
答え1
調査したところ、UID と GID を変更するときに考慮すべき 2 つの点に気付きました。
- 数値UIDとGIDは常に一致するとは限りません。私の場合は
id -u mysql
=120とid -g mysql
=127です。 - すべてのファイルがユーザー「mysql」とグループ「mysql」によって同時に所有されているわけではありません。これらのファイルは個別に検索する必要があります。
したがって、まず UID と GID を変更します。
user=mysql new_uid=600 old_uid=$(id -u $user)
group=mysql new_gid=600 old_gid=$(id -g $user)
sudo usermod -u $new_uid $user
sudo groupmod -g $new_gid $group
次に、find
後から追加したユーザーとグループが所有するファイルを別々に検索します。「user=mysql」は 1 つのファイルに移動し、「group=mysql」は別のファイルに移動します。また、いくつかのディレクトリをfind
ツリーのトラバースから除外します。
chownlist=$(tempfile) chgrplist=$(tempfile) sudo find / \
\( \( -path "/proc" -or -path "/sys" -or -path "/dev" \) -prune \) -or \
\( \( -user $old_uid -fprint0 "$chownlist" \) , \
\( -group $old_gid -fprint0 "$chgrplist" \) \)
そして、見つかったこれらのファイルの所有者とグループを変更しても問題ありません:
cat "$chownlist" | xargs -0 sudo chown $user
cat "$chgrplist" | xargs -0 sudo chown :$group
sudo rm "$chownlist" "$chgrplist"
最後に、すべてが正常に行われたかどうかを確認します。不明な UID または GID によって所有されているファイルを検索します。
sudo find / \( \( -path "/proc" -or -path "/sys" -or -path "/dev" \) -prune \) -or \( -nouser -or -nogroup -print \)
これが誰かの役に立つことを願います。
答え2
はい、必要なことはほぼこれだけです。変更が必要なファイルは、ログとデータ ファイルだけです。
ただし、ループではなく find | xargs を使用することをお勧めします。