所以我尝试将sql文件导入rds (1G MEM, 1个CPU)。sql文件大约是1.4G

Mysql -h xx.rds.amazonaws.com -u user -ppass——max-allowed-packet=33554432 db < db.sql

它被卡在:

ERROR 1227 (42000) at line 374: Access denied; you need (at least one of) the SUPER privilege(s) for this operation

实际的sql内容是:

/*!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在rds中不存在,所以我这样做:

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

还是不走运。


当前回答

另一个有用的技巧是使用选项——set-gtid-purged=OFF调用mysqldump,它不会将以下行写到输出文件中:

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

我不确定DEFINER。

其他回答

转储中的问题。

请尝试通过以下方式转储:

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

然后,尝试按以下方式导入:

zcat /tmp/database.sql.gz | mysql -h database_host -u username -p databasename

问题

下面的语句或行转储文件创建问题

DEFINER = username@”%

简单的解决方案

您可以绕过的解决方案是从SQL转储文件中删除所有条目,并从GCP控制台导入数据。

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

上面的命令将帮助从转储文件中删除所有这些行,并创建新的没有Definer的转储文件。

尝试导入新文件(new - cleaned - dump .sql)。

如果您使用AWS RDS

你可能会看到问题,如果你的转储文件较大,你可以检查前20行使用

head -30 filename

看到输出后,查找行和行号

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

我们将按行号删除这些行,例如17、18、24行号

sed -e '24d;17d;18d' file-name.sql > removed-line-file-name.sql

以上的方法对我来说都没用。我必须做到以下几点:

在mysqldump中使用以下标志: Mysqldump——databases <db1> <db2>——master-data=1——single-transaction——order- By-primary, force -r all。SQL -h<主机> -u<用户> -p<密码> 删除如下一行: 更改MASTER为MASTER_LOG_FILE='binlog..... 在我的文件中,这是第22行,所以我运行:sed -i '22d' all.sql 将数据导入RDS: Mysql -h<主机> -u<用户> -p<密码> $ source all.sql

当您恢复备份时,请确保对旧备份和新备份尝试使用相同的用户名。

需要在服务器端设置“on”服务器参数“log_bin_trust_function_creators”。这一个你可以很容易地找到左侧刀片,如果它是蔚蓝玛丽亚db。