Limpieza de mysql tras una migración: permisos de host antiguos
Introducción
Cuando se realizan migraciones entre servidores, ya sea cPanel a Cpanel, cPAnel a Directamdin,, siempre quedan proquerías que hay que limpiar.
Una de ellas son las entradas en la tabla user
de mysql/maridab en la que se conservan los hosts remotos de antiguos servidores.
He visto alguna vez cuando me han contratado para un mantenimiento de un servidor y un tunning, servidores con mas de 1000 usarios mysql, y que llevaban arrastrando 4 o 5 hosts de distintos servidores, de migración en migración.
Luego, claro, mysql va lento.
Nota. No es precismanet la raíz del porblema, peoro cuando en el jardin dejas malas hierbas, al final caban poniendose feo.
Revisión
Accedemos a nuestro mysql
> mysql
SELECT User, Host FROM mysql.user;
+--------------------------+--------------------+
| User | Host |
+--------------------------+--------------------+
| cdbtnet | localhost |
| cdbtnet | old.server.com |
| cdbtnet | old2.server.com |
...
Cramos el script
El escript se ejecuta pasandole un parámetro:
- El nombre del host a eliminar
ATENCIÓN
ESTE COMO TODOS LOS COMANDOS DE ELIMINACION DEBE HACER LEYYENDOSE, ENTENDIENDOLO Y CON ... BACKUP
#!/bin/bash
# Verificar que se haya pasado un parámetro
if [ $# -eq 0 ]; then
echo "Debe proporcionar un host para eliminar los usuarios. Uso: $0 <host>"
exit 1
fi
# Guardar el parámetro proporcionado como el host a eliminar
delete_host=$1
# Variables de conexión a la base de datos
db_user="da_admin"
db_password=$(grep 'passwd' /usr/local/directadmin/conf/mysql.conf | awk -F= '{print $2}')
db_host="localhost" # Cambia si tu base de datos no está en localhost
# Comando para listar usuarios del host específico
list_users_command="SELECT user, host FROM mysql.user WHERE host='${delete_host}';"
# Conéctate a MySQL y obtiene la lista de usuarios
users=$(mysql -u "$db_user" -p"$db_password" -h "$db_host" -Bse "$list_users_command")
# Verificar si se obtuvieron usuarios
if [ -z "$users" ]; then
echo "No se encontraron usuarios con host '$delete_host'."
exit 0
fi
# Generar y ejecutar los comandos de eliminación de usuario
while IFS=$'\t' read -r user host; do
if [ ! -z "$user" ] && [ ! -z "$host" ]; then
drop_user_command="DROP USER '$user'@'$host';"
mysql_command="mysql -u \"$db_user\" -p\"$db_password\" -h \"$db_host\" -e \"$drop_user_command\""
echo "Ejecutando: $drop_user_command"
eval $mysql_command
# Verificar si el comando se ejecutó correctamente
if [ $? -ne 0 ]; then
echo "Error al ejecutar: $drop_user_command"
else
echo "Usuario eliminado con éxito: $user@$host"
fi
fi
done <<< "$users"
chmod +x nombre_script.sh
./nombre_script.sh 5.0.0.0
....
Ejecutando: DROP USER 'tblrmmll_root'@'5.0.0.0';
Comando que se ejecutará: mysql -u "da_admin" -p"ElPaSsWoRd" -h "localhost" -e "DROP USER 'tblrmmll_root'@'5.0.0.0';"
...
Aviso
Esta documentación y su contenido, no implica que funcione en tu caso o determinados casos. También implica que tienes conocimientos sobre lo que trata, y que en cualquier caso tienes copias de seguridad. El contenido el contenido se entrega, tal y como está, sin que ello implique ningún obligación ni responsabilidad por parte de Castris
Si necesitas soporte profesional puedes contratar con Castris soporte profesional.
No Comments