2012-05-12 13 views
8

Tengo una base de datos con cientos de conexiones activas en cualquier momento. Cuando uso la declaración SQL de DROP USER para eliminar una cuenta de usuario, demora ~ 4 segundos, durante los cuales todas las demás conexiones tienen el estado "Verificación de permisos". Esto significa que para eliminar 1000 usuarios, efectivamente bloquearé la base de datos durante una buena parte de 4000 segundos, lo cual es inaceptable. Sin embargo, me doy cuenta de que la eliminación de una fila de usuario de la tabla mysql.users es instantánea.Diferencia entre DROP USER y eliminación de una fila de la tabla mysql.user

Está borrando una fila de mysql.users kosher? ¿Cuáles son los inconvenientes en comparación con el uso de DROP USER? ¿Dejo filas obsoletas en otro lado? ¿Hay problemas de propagación? Probablemente tendré que seguir esta ruta, pero quiero saber qué otra limpieza tendré que hacer.

+0

Si emite sus declaraciones 1000 DROP USER dentro de una sola transacción, ¿supera los 4000 segundos? (Me doy cuenta de que es un número absurdo que se usa para ilustración, pero tengo curiosidad si la penalización de tiempo se puede tomar solo una vez, incluso para varias caídas ...) – sarnold

+1

Gran pregunta. De hecho, lo probé. Lamentablemente, no, el tiempo empleado crece proporcionalmente al número de usuarios que se descartan. Editar: Este es también el caso si se especifican múltiples usuarios en un solo comando DROP USER. – BrainCore

Respuesta

3

depende de su versión de MySQL

usuario gota en MySQL <= v5.0 sólo se elimina el registro de usuario, pero no privilegios. MySQL >= v5.0.2 hace ambas cosas de una sola vez.

También se pueden pasar varios usuarios.

+0

¿Sería correcto decir que DROP USER solo elimina filas de mysql.user y mysql.tables_priv, y no hace nada más? – BrainCore

+1

Por encima de todo, el usuario Drop reemplazó la necesidad de revocar privilegios, eliminar registros de la tabla de usuario y privilegios de vaciado – codemonkee

Cuestiones relacionadas