Acceso denegado; necesita (al menos uno de) los privilegios SUPER para esta operación
Entonces intento importar un archivo sql a rds (1G MEM, 1 CPU). El archivo sql es como 1.4G
mysql -h xxxx.rds.amazonaws.com -u usuario -ppass --max-allowed-packet=33554432 db < db.sql
Se quedó atascado en:
ERROR 1227 (42000) at line 374: Access denied; you need (at least one of) the SUPER privilege(s) for this operation
El contenido real de SQL es:
/*!50003 CREATE*/ /*!50017 DEFINER=`another_user`@`1.2.3.4`*/ /*!50003 TRIGGER `change_log_BINS` BEFORE INSERT ON `change_log` FOR EACH ROW
IF (NEW.created_at IS NULL OR NEW.created_at = '00-00-00 00:00:00' OR NEW.created_at = '') THEN
SET NEW.created_at = NOW();
END IF */;;
another_user
no existe en rds, entonces lo hago:
GRANT ALL PRIVILEGES ON db.* TO another_user@'localhost';
Todavía no hubo suerte.
Elimine la DEFINER=..
declaración de su archivo sqldump o reemplace los valores del usuario con CURRENT_USER
.
El servidor MySQL proporcionado por RDS no permite una DEFINER
sintaxis para otro usuario (en mi experiencia).
Puede utilizar un sed
script para eliminarlos del archivo:
sed 's/\sDEFINER=`[^`]*`@`[^`]*`//g' -i oldfile.sql
Elimine las 3 líneas a continuación si están allí, o coméntelas con --
:
Al principio:
-- SET @@SESSION.SQL_LOG_BIN= 0;
-- SET @@GLOBAL.GTID_PURGED=/*!80000 '+'*/ '';
Al final:
-- SET @@SESSION.SQL_LOG_BIN = @MYSQLDUMP_TEMP_LOG_BIN;
Tenga en cuenta que los caracteres de comentario son "espacio de guión", incluido el espacio.
Una mejor solución es evitar que estas líneas se escriban en el archivo de volcado incluyendo la opción --set-gtid-purged=OFF
en su mysqldump
comando.
Otro truco útil es invocar mysqldump con la opción --set-gtid-purged=OFF
que no escribe las siguientes líneas en el archivo de salida:
SET @@SESSION.SQL_LOG_BIN= 0;
SET @@GLOBAL.GTID_PURGED=/*!80000 '+'*/ '';
SET @@SESSION.SQL_LOG_BIN = @MYSQLDUMP_TEMP_LOG_BIN;
No estoy seguro del DEFINER.