Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

555
Views
Acceso denegado; necesita (al menos uno de) los privilegios SUPER para esta operación

Así que trato de importar el 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 sql real 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, así que lo hago:

 GRANT ALL PRIVILEGES ON db.* TO another_user@'localhost';

Todavía no hay suerte.

over 4 years ago · Santiago Trujillo
16 answers
Answer question

0

Quite la DEFINER=.. de su archivo sqldump o reemplace los valores de usuario con CURRENT_USER .

El servidor MySQL proporcionado por RDS no permite una sintaxis DEFINER para otro usuario (según mi experiencia).

Puede usar un script sed para eliminarlos del archivo:

 sed 's/\sDEFINER=`[^`]*`@`[^`]*`//g' -i oldfile.sql
over 4 years ago · Santiago Trujillo Report

0

Para importar un archivo de base de datos en formato .sql.gz , elimine el definidor e importe usando el siguiente comando

 zcat path_to_db_to_import.sql.gz | sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/' | mysql -u user -p new_db_name
  1. Anteriormente, exporte la base de datos en formato .sql.gz usando el siguiente comando.

    mysqldump -u user -p old_db | gzip -9 > path_to_db_exported.sql.gz;

  2. Importe esa base de datos exportada y elimine el definidor usando el siguiente comando,

    zcat path_to_db_exported.sql.gz | sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/' | mysql -u user -p new_db

over 4 years ago · Santiago Trujillo Report

0

Cuando restaure la copia de seguridad, asegúrese de probar con el mismo nombre de usuario para el anterior y el nuevo.

over 4 years ago · Santiago Trujillo Report

0

Solución completa

Todas las soluciones anteriores están bien. Y aquí voy a combinar todas las soluciones para que funcione en todas las situaciones.

  1. DEFINITOR fijo

Para Linux y Mac

 sed -i old 's/\DEFINER\=`[^`]*`@`[^`]*`//g' file.sql

Para ventanas
descargue atom o notepad ++, abra su archivo sql de volcado con atom o notepad ++, presione Ctrl + F
busque la palabra DEFINER y elimine la línea DEFINER= admin @ % (o puede ser un poco diferente para usted) de todas partes y guarde el archivo.
Como por ejemplo
antes de eliminar esa línea: CREATE DEFINER= admin @ % PROCEDURE MyProcedure
Después de eliminar esa línea: CREATE PROCEDURE MyProcedure

  1. Eliminar las 3 líneas Eliminar todas estas 3 líneas del archivo de volcado. Puede usar el comando sed o abrir el archivo en el editor Atom y buscar cada línea y luego eliminar la línea.
    Ejemplo: Abra Dump2020.sql en Atom, presione ctrl+F, busque SET @@SESSION.SQL_LOG_BIN= 0 , elimine esa línea.
 SET @@SESSION.SQL_LOG_BIN= 0; SET @@GLOBAL.GTID_PURGED=/*!80000 '+'*/ ''; SET @@SESSION.SQL_LOG_BIN = @MYSQLDUMP_TEMP_LOG_BIN;
  1. Hay un problema con su archivo generado. Es posible que tenga algún problema si su archivo dump.sql generado no es correcto. Pero aquí, no voy a explicar cómo generar un archivo de volcado. Pero puedes preguntarme ( _ )
over 4 years ago · Santiago Trujillo Report

0

Necesita configurar el parámetro del servidor "on" "log_bin_trust_function_creators" en el lado del servidor. Este se puede encontrar fácilmente en la hoja del lado izquierdo si es azul maria db.

over 4 years ago · Santiago Trujillo Report

0

Ninguna de las soluciones anteriores funcionó para mí. Tuve que hacer lo siguiente:

  • Use las siguientes banderas con mysqldump :

     mysqldump --databases <db1> <db2> --master-data=1 --single-transaction --order- by-primary --foce -r all.sql -h<host> -u<user> -p<password>
  • Elimina la línea que se parece a:

     CHANGE MASTER TO MASTER_LOG_FILE='binlog.....
    • En mi archivo, esa era la línea #22, así que ejecuté: sed -i '22d' all.sql
  • Importe los datos a su RDS:

     mysql -h<host> -u<user> -p<password> $ source all.sql
over 4 years ago · Santiago Trujillo Report

0

Cuando creamos una nueva instancia de base de datos de RDS, el usuario maestro predeterminado no es el usuario raíz. Pero solo obtiene ciertos privilegios para esa instancia de base de datos. Este permiso no incluye el permiso SET . Ahora, si su usuario maestro predeterminado intenta ejecutar los comandos SET de mysql, se enfrentará a este error: Acceso denegado; necesita (al menos uno de) los privilegios SUPER o SYSTEM_VARIABLES_ADMIN para esta operación

Solución 1

Comenta o elimina estas líneas

 SET @MYSQLDUMP_TEMP_LOG_BIN = @@SESSION.SQL_LOG_BIN; SET @@SESSION.SQL_LOG_BIN= 1; SET @@GLOBAL.GTID_PURGED=/*!80000 '+'*/ '';

Solución 2

También puede ignorar los errores usando la opción -f para cargar el resto del archivo de volcado.

 mysql -f <REPLACE_DB_NAME> -u <REPLACE_DB_USER> -h <DB_HOST_HERE> -p < dumpfile.sql
over 4 years ago · Santiago Trujillo Report

0

Si ayuda, cuando intenté restaurar un volcado de base de datos en mi AWS MySQL RDS, recibí este error:

 ERROR 1227 (42000) at line 18: Access denied; you need (at least one of) the SUPER, SYSTEM_VARIABLES_ADMIN or SESSION_VARIABLES_ADMIN privilege(s) for this operation

No tuve que cambiar el DEFINITOR o eliminar/comentar líneas. Lo acabo de hacer:

 GRANT SESSION_VARIABLES_ADMIN ON *.* TO myuser@'myhost'; GRANT SYSTEM_VARIABLES_ADMIN ON *.* TO myuser@'myhost';

Y pude hacer la restauración.

over 4 years ago · Santiago Trujillo Report

0

Emisión en basurero.

Intente obtener el volcado de la siguiente manera:

 mysqldump -h databasehost --user=databaseusername --password --single-transaction databasename | sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/' | gzip > /tmp/database.sql.gz

Luego, intente importar de la siguiente manera:

 zcat /tmp/database.sql.gz | mysql -h database_host -u username -p databasename
over 4 years ago · Santiago Trujillo Report

0

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 sobre el DEFINER.

over 4 years ago · Santiago Trujillo Report

0

* La respuesta solo puede ser aplicable a MacOS *

Al intentar importar un archivo .sql en un contenedor docker, encontré el mensaje de error:

Acceso denegado; necesita (al menos uno de) los privilegios SUPER para esta operación

Luego, mientras probaba algunas de las otras sugerencias, recibí el siguiente error en mi MacOS (osx)

sed: RE error: secuencia de bytes ilegal

Finalmente, el siguiente comando de este recurso resolvió mi problema de "Acceso denegado".

 LC_ALL=C sed -i old 's/\DEFINER\=`[^`]*`@`[^`]*`//g' fileName.sql

Entonces podría importar a la base de datos docker con:

 docker exec -i dockerContainerName mysql -uuser -ppassword table < importFile.sql

¡Espero que esto ayude! :)

over 4 years ago · Santiago Trujillo Report

0

Problema : está intentando importar datos (usando el archivo mysqldump) a su base de datos mysql, pero parece que no tiene permiso para realizar esa operación.

Solución : suponiendo que sus datos se migran, se siembran y actualizan en su base de datos mysql, tome una instantánea usando mysqldump y expórtelo a un archivo

 mysqldump -u [username] -p [databaseName] --set-gtid-purged=OFF > [filename].sql

De la documentación de mysql:

GTID : un identificador de transacción global (GTID) es un identificador único creado y asociado con cada transacción comprometida en el servidor de origen (maestro). Este identificador es único no solo para el servidor en el que se originó, sino que es único en todos los servidores en una configuración de replicación determinada. Hay un mapeo 1 a 1 entre todas las transacciones y todos los GTID.

--set-gtid-purged=OFF SET @@GLOBAL.gtid_purged no se agrega a la salida y SET @@SESSION.sql_log_bin=0 no se agrega a la salida. Para un servidor donde los GTID no están en uso, use esta opción o AUTO. Solo use esta opción para un servidor donde se usan GTID si está seguro de que el conjunto de GTID requerido ya está presente en gtid_purged en el servidor de destino y no debe cambiarse, o si planea identificar y agregar cualquier GTID que falte manualmente.

Luego, conéctese a su mysql con el usuario root, otorgue permisos, vacíelos y verifique que sus privilegios de usuario se hayan actualizado correctamente.

 mysql -u root -p UPDATE mysql.user SET Super_Priv='Y' WHERE user='johnDoe' AND host='%'; FLUSH PRIVILEGES; mysql> SHOW GRANTS FOR 'johnDoe'; +------------------------------------------------------------------+ | Grants for johnDoe | +------------------------------------------------------------------+ | GRANT USAGE ON *.* TO `johnDoe` | | GRANT ALL PRIVILEGES ON `db1`.* TO `johnDoe` | +------------------------------------------------------------------+

Ahora vuelva a cargar los datos y la operación debería estar permitida .

 mysql -h [host] -u [user] -p[pass] [db_name] < [mysql_dump_name].sql
over 4 years ago · Santiago Trujillo Report

0

Comenté que todas las líneas comienzan con SET en el archivo *.sql y funcionó.

over 4 years ago · Santiago Trujillo Report

0

Si su archivo de volcado no tiene DEFINER , asegúrese de que estas líneas a continuación también se eliminen si están allí, o se comenten 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;
over 4 years ago · Santiago Trujillo Report

0

Solo una actualización adicional de MacOS para la respuesta hjpotter92.

Para que sed reconozca el patrón en MacOS, deberá agregar una barra invertida antes del signo = , así:

 sed -i old 's/\DEFINER\=`[^`]*`@`[^`]*`//g' file.sql
over 4 years ago · Santiago Trujillo Report

0

Asunto

Debajo de la declaración o alinee su problema de creación de archivo de volcado

DEFINITOR= nombre de username @`%

Solución simple

La solución que puede solucionar es eliminar todas las entradas del archivo de volcado de SQL e importar datos desde la consola de GCP .

 cat DUMP_FILE_NAME.sql | sed -e 's/DEFINER=`<username>`@`%`//g' > NEW-CLEANED-DUMP.sql

El comando anterior ayudará a eliminar todas esas líneas del archivo de volcado y crear el nuevo archivo de volcado sin Definer .

Intente importar un archivo nuevo (NEW-CLEANED-DUMP.sql).

Si está en AWS RDS

Es posible que vea un problema de cara, si su archivo de volcado es más grande, puede verificar las primeras 20 líneas usando

 head -30 filename

una vez que pueda ver la salida, busque la línea y el número de línea

 SET @@SESSION.SQL_LOG_BIN= 0; SET @@GLOBAL.GTID_PURGED=/*!80000 '+'*/ ''; SET @@SESSION.SQL_LOG_BIN = @MYSQLDUMP_TEMP_LOG_BIN;

eliminaremos estas líneas por números de línea, por ejemplo, 17,18,24 número de línea

 sed -e '24d;17d;18d' file-name.sql > removed-line-file-name.sql
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!