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