J'essaye donc d'importer le fichier sql dans rds (1G MEM, 1 CPU). Le fichier sql est comme 1.4G
mysql -h xxxx.rds.amazonaws.com -u utilisateur -ppass --max-allowed-packet = 33554432 db <db.sql
Il est resté bloqué à:
ERROR 1227 (42000) at line 374: Access denied; you need (at least one of) the SUPER privilege(s) for this operation
Le contenu SQL réel est:
/*!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
n'existe pas dans rds, alors je fais:
GRANT ALL PRIVILEGES ON db.* TO another_user@'localhost';
Toujours pas de chance.
mysql
amazon-web-services
amazon-rds
Kenpeter
la source
la source
DEFINER
lorsque l'utilisateur connecté n'a pas leSUPER
privilège (qui lui-même n'est pas autorisé dans RDS) permettrait une élévation arbitraire des privilèges - les programmes stockés s'exécutent avec les informations d'identification et les privilèges de leurDEFINER
(par opposition à ceux de l'utilisateur appelant - leurINVOKER
), par défaut. Également à Server Fault .sed 's/\sDEFINER=`[^`]*`@`[^`]*`//' -i oldfile.sql
awk
ce qui pourrait être un peu plus rapide quesed
Si votre fichier de vidage n'a pas
DEFINER
, assurez-vous que ces lignes ci-dessous sont également supprimées si elles sont là, ou commentées avec--
:Au début:
-- SET @@SESSION.SQL_LOG_BIN= 0; -- SET @@GLOBAL.GTID_PURGED=/*!80000 '+'*/ '';
À la fin:
-- SET @@SESSION.SQL_LOG_BIN = @MYSQLDUMP_TEMP_LOG_BIN;
la source
--set-gtid-purged=OFF
à votremysqldump
commande. Trouvé ici: stackoverflow.com/a/56251925Une autre astuce utile consiste à appeler mysqldump avec l'option --set-gtid-purged = OFF qui n'écrit pas les lignes suivantes dans le fichier de sortie:
SET @@SESSION.SQL_LOG_BIN= 0; SET @@GLOBAL.GTID_PURGED=/*!80000 '+'*/ ''; SET @@SESSION.SQL_LOG_BIN = @MYSQLDUMP_TEMP_LOG_BIN;
pas sûr de celui de DEFINER.
la source
SET @@GLOBAL.GTID_MODE = OFF;
dans MySql Workbench du côté exportation à partir de la base de données sourceJuste une mise à jour supplémentaire MacOS pour la réponse hjpotter92.
Pour faire
sed
reconnaître le modèle sous MacOS, vous devrez ajouter une barre oblique inverse avant le=
signe, comme ceci:la source
Problème : vous essayez d'importer des données (en utilisant le fichier mysqldump) dans votre base de données mysql, mais il semble que vous n'avez pas l'autorisation d'effectuer cette opération.
Solution : en supposant que vos données sont migrées, semées et mises à jour dans votre base de données mysql, prenez un instantané à l'aide de mysqldump et exportez-le dans un fichier
mysqldump -u [username] -p [databaseName] --set-gtid-purged=OFF > [filename].sql
Ensuite, connectez-vous à votre mysql avec l'utilisateur root, donnez des autorisations, videz-les et vérifiez que vos privilèges d'utilisateur ont été correctement mis à jour.
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` | +------------------------------------------------------------------+
rechargez maintenant les données et l'opération devrait être autorisée .
la source
Pour importer un fichier de base de données au
.sql.gz
format, supprimez le définisseur et importez à l'aide de la commande ci-dessousAuparavant, exportez la base de données au format .sql.gz en utilisant la commande ci-dessous.
mysqldump -u user -p old_db | gzip -9 > path_to_db_exported.sql.gz;
Importez cette base de données exportée et supprimez le définisseur en utilisant la commande ci-dessous,
zcat path_to_db_exported.sql.gz | sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/' | mysql -u user -p new_db
la source
Lorsque vous restaurez la sauvegarde, assurez-vous d'essayer avec le même nom d'utilisateur pour l'ancien et le nouveau.
la source
Solution complète
Toutes les solutions ci-dessus conviennent. Et ici je vais combiner toutes les solutions pour que ça marche dans toutes les situations.
Pour Linux et Mac
Pour Windows
téléchargez atom ou notepad ++, ouvrez votre fichier sql de vidage avec atom ou notepad ++, appuyez sur Ctrl + F
recherchez le mot DEFINER et supprimez la ligne DEFINER =
admin
@%
(ou peut être un peu différente pour vous) de partout et enregistrez le fichier.Comme par exemple
avant de supprimer cette ligne: CREATE DEFINER =
admin
@%
PROCEDUREMyProcedure
Après avoir supprimé cette ligne: CREATE PROCEDURE
MyProcedure
Exemple: Ouvrez Dump2020.sql dans Atom, appuyez sur ctrl + F, recherchez SET @@ SESSION.SQL_LOG_BIN = 0 , supprimez cette ligne.
SET @@SESSION.SQL_LOG_BIN= 0; SET @@GLOBAL.GTID_PURGED=/*!80000 '+'*/ ''; SET @@SESSION.SQL_LOG_BIN = @MYSQLDUMP_TEMP_LOG_BIN;
la source
J'ai commenté toutes les lignes commençant par
SET
dans le*.sql
fichier et cela a fonctionné.la source
* La réponse ne peut s'appliquer qu'à MacOS *
En essayant d'importer un fichier .sql dans un conteneur docker, j'ai rencontré le message d'erreur:
Ensuite, en essayant certaines des autres suggestions, j'ai reçu l'erreur ci-dessous sur mon MacOS (osx)
Enfin, la commande suivante de cette ressource a résolu mon problème «Accès refusé».
Je pourrais donc importer dans la base de données docker avec:
J'espère que cela t'aides! :)
la source
Besoin de définir "on" le paramètre serveur "log_bin_trust_function_creators" côté serveur. Celui-ci que vous pouvez facilement trouver sur la lame latérale gauche s'il s'agit de maria db azur.
la source
Déclaration
est un problème dans votre sauvegarde de sauvegarde.
La solution que vous pouvez contourner consiste à supprimer toutes les entrées du fichier de vidage SQL et à importer les données de la console GCP.
Essayez d'importer un nouveau fichier (NEW-CLEANED-DUMP.sql).
la source