Ich habe MySQL-Datendateien auf einem USB-Stick, die auf zwei Hosts verwendet werden, deren mysql
Benutzer-UIDs unterschiedlich sind. Daher kann MySQL nicht gestartet werden, wenn die Dateien 0700
Berechtigungen und eine unbekannte UID als Eigentümer haben.
Ich konnte nicht herausfinden, wie ich die Umask von MySQL ändern kann (und eigentlich gefällt mir die Idee nicht, diese Dateien mit allen zu teilen). Deshalb möchte ich die mysql
Benutzer-UID auf beiden Hosts ändern, sodass die Dateien demselben Benutzer gehören.
Ich werde die UID und chown
alle Dateien, die der alten MySQL-UID gehören, auf den neuen Benutzer ändern:
usermod --uid 900 --gid 900 mysql # assign the new uid
olduid=67 find / -user $olduid -group $olduid -print0 | xargs -0 chown "mysql:mysql"
Reicht das im Allgemeinen aus, damit eine Anwendung funktioniert? Vielleicht habe ich bessere Optionen?
Antwort1
Ich habe einige Nachforschungen angestellt und festgestellt, dass beim Ändern von UIDs und GIDs zwei Dinge berücksichtigt werden sollten:
- Numerische UID und GID stimmen nicht immer überein: in meinem Fall
id -u mysql
=120 undid -g mysql
=127 - Nicht alle Dateien sind gleichzeitig Eigentum des Benutzers „mysql“ und der Gruppe „mysql“: Nach diesen Dateien sollte separat gesucht werden.
Dazu ändern wir zunächst UID und 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
Dann suchen wir find
separat nach Dateien, die dem letzten Benutzer und der letzten Gruppe gehören: „user=mysql“ geht zu einer Datei, „group=mysql“ geht zu einer anderen Datei. Außerdem schließen wir einige Verzeichnisse aus dem find
Durchlauf des Baums aus:
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" \) \)
Und erst jetzt ist es in Ordnung, Besitzer und Gruppen für die folgenden gefundenen Dateien zu ändern:
cat "$chownlist" | xargs -0 sudo chown $user
cat "$chgrplist" | xargs -0 sudo chown :$group
sudo rm "$chownlist" "$chgrplist"
Zum Schluss prüfen wir, ob alles richtig gelaufen ist: Suchen Sie nach Dateien mit unbekannten UIDs oder GIDs:
sudo find / \( \( -path "/proc" -or -path "/sys" -or -path "/dev" \) -prune \) -or \( -nouser -or -nogroup -print \)
Hoffe, das hilft jemandem.
Antwort2
Ja, das ist so ziemlich alles, was Sie tun müssen. Die einzigen Dateien, die geändert werden müssen, sind die Protokoll- und Datendateien.
Möglicherweise möchten Sie jedoch anstelle einer Schleife „find | xargs“ verwenden.