У меня есть файлы данных MySQL на флэш-накопителе, которые используются на двух хостах, где mysql
UID пользователей различаются. В результате MySQL не запускается, когда файлы 0700
perms и неизвестный UID в качестве владельца.
Мне не удалось найти, как изменить umask MySQL (и на самом деле мне не нравится идея делиться этими файлами со всеми), поэтому я хочу изменить UID mysql
user на обоих хостах, поэтому файлы принадлежат одному пользователю.
Я собираюсь изменить UID и на chown
все файлы, принадлежащие старому 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"
Достаточно ли этого для работы приложения в общем случае? Может, есть варианты получше?
Я провел небольшое исследование и заметил две вещи, которые следует учитывать при изменении 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"
Наконец, проверяем, все ли в порядке: находим файлы, принадлежащие неизвестным UID или GID:
sudo find / \( \( -path "/proc" -or -path "/sys" -or -path "/dev" \) -prune \) -or \( -nouser -or -nogroup -print \)
Надеюсь, это кому-то поможет.
Да, это почти все, что вам нужно сделать. Единственные файлы, которые необходимо изменить, - это файлы журналов и данных.
Возможно, вы захотите использовать find | xargs, а не цикл.