respaldar importar exportar example datos copiar consola automaticamente mysql mysqldump

importar - respaldar base de datos mysql



¿Cómo puedo usar mysqldump para replicar vistas entre cuentas? (4)

Estoy usando mysqldump para replicar una base de datos entre cuentas en una máquina en particular. Todo funciona muy bien, excepto cuando llegamos a nuestros puntos de vista definidos. Porque el volcado incluye una línea como la siguiente ...

/*!50013 DEFINER=`user_a`@`localhost` SQL SECURITY DEFINER */

... al cargar el volcado en mysql en user_b recibimos un error:

ERROR 1227 (42000) at line 657: Access denied; you need the SUPER privilege for this operation

No hace falta decir que no tengo SUPER privilegio en esta instancia de mysql. ¿Hay alguna manera de convencer a mysqldump de volcar las vistas de una manera independiente del usuario? No puedo encontrar nada en el manual sobre este punto. ¿Debo analizar realmente el archivo de volcado para reemplazar los nombres de usuario? ¿O me estoy perdiendo algo?


Las cláusulas de SQL SECURITY determinan qué cuenta de MySQL usar cuando se verifican los privilegios de acceso para la vista (como probablemente ya se haya dado cuenta).

Cuando crea una vista, puede definir un par de opciones para la seguridad de esa vista. Puede leer más aquí , pero esencialmente, por defecto, el acceso está restringido al ''definidor'' de la vista, es decir, el usuario que lo creó.


Tendrá que procesar el archivo de copia de seguridad y cambiar el DEFINER:

DEFINER = user_a @ localhost

Me gusta cambiarlo a:

DEFINER = CURRENT_USER

Luego se asociará automáticamente a la cuenta que lo carga.


Ejecute mysqldump con la opción "--skip-triggers"


el mismo problema. Lo solucioné de esa manera:

mysqldump -uuser1 -ppassword1 database1 > backup.sql sed ''/^///*/!50013 DEFINER/d'' backup.sql > backup_without_50013.sql mysql -u user2 -ppassword2 -D database2 < backup_without_50013.sql

Lo interesante es el comando sed que, aquí, elimina todas las líneas que comienzan con / *! 50013.

Heidy