Tengo archivos de datos MySQL en una memoria USB que se utilizan en dos hosts donde mysql
los UID del usuario difieren. Como resultado, MySQL no se inicia cuando sus archivos tienen 0700
permisos y un UID desconocido como propietario.
No pude encontrar cómo cambiar la máscara de usuario de MySQL (y en realidad no me gusta la idea de compartir estos archivos con todos), por lo tanto, quiero cambiar el UID del mysql
usuario en ambos hosts para que los archivos pertenezcan al mismo usuario.
Voy a cambiar el UID y chown
todos los archivos propiedad del antiguo UID de MySQL al nuevo usuario:
usermod --uid 900 --gid 900 mysql # assign the new uid
olduid=67 find / -user $olduid -group $olduid -print0 | xargs -0 chown "mysql:mysql"
¿Es esto suficiente para que una aplicación funcione en el caso general? ¿Quizás tengo mejores opciones?
Respuesta1
Investigué un poco y noté dos cosas que se deben tener en cuenta al cambiar los UID y GID:
- El UID numérico y el GID no siempre coinciden: en mi caso
id -u mysql
=120 yid -g mysql
=127 - No todos los archivos pertenecen al usuario 'mysql' y al grupo 'mysql' simultáneamente: estos archivos deben buscarse por separado.
Por tanto, primero cambiamos UID y 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
Luego, find
buscamos los archivos propiedad del último usuario y del grupo por separado: 'usuario=mysql' va a un archivo, 'grupo=mysql' va a otro archivo. También excluimos algunos directorios del find
árbol transversal:
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" \) \)
Y recién ahora está bien cambiar los propietarios y grupos de estos archivos encontrados:
cat "$chownlist" | xargs -0 sudo chown $user
cat "$chgrplist" | xargs -0 sudo chown :$group
sudo rm "$chownlist" "$chgrplist"
Finalmente, comprobamos si todo salió bien: buscamos archivos propiedad de UID o GID desconocidos:
sudo find / \( \( -path "/proc" -or -path "/sys" -or -path "/dev" \) -prune \) -or \( -nouser -or -nogroup -print \)
Espero que esto ayude a alguien.
Respuesta2
Sí, eso es prácticamente todo lo que necesitas hacer. Los únicos archivos que deberían cambiarse son los archivos de registros y de datos.
Es posible que desee utilizar buscar | Sin embargo, xargs en lugar de un bucle.