我在mysql用户的UID不同的两个主机上使用的拇指驱动器上有MySQL数据文件。 因此,当文件的所有者为0700 perms和未知的UID时,MySQL无法启动。
我没有find如何更改MySQL的umask(实际上我不喜欢将这些文件共享给所有人的想法),所以我想在两台主机上更改mysql用户的UID,这样这些文件就属于同一个用户。
我将更改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"
对于一般情况下的应用程序来说,这足够了吗? 也许,我有更好的select?
我做了一些调查,发现在更改UID和GID时应该考虑两件事情:
id -u mysql = 120和id -g mysql = 127 因此,我们首先更改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'转到一个文件,'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"
最后,我们检查一切是否正常:find由未知的GIDs的UID拥有的文件:
sudo find / \( \( -path "/proc" -or -path "/sys" -or -path "/dev" \) -prune \) -or \( -nouser -or -nogroup -print \)
希望这有助于某人。
是的,这几乎是你所需要做的。 唯一需要更改的文件是日志和数据文件。
您可能想要使用find | xargs,而不是一个循环。