所以我尝试将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';
还是不走运。
*答案可能只适用于MacOS *
当尝试将.sql文件导入docker容器时,我遇到了错误消息:
拒绝访问;您需要(至少一个)SUPER特权
这个操作
然后,在尝试其他一些建议时,我在MacOS (osx)上收到了以下错误
sed: RE错误:非法字节序列
最后,该资源的以下命令解决了我的“访问被拒绝”问题。
LC_ALL=C sed -i old 's/\DEFINER\=`[^`]*`@`[^`]*`//g' fileName.sql
所以我可以导入到docker数据库:
docker exec -i dockerContainerName mysql -uuser -ppassword table < importFile.sql
希望这能有所帮助!:)
*答案可能只适用于MacOS *
当尝试将.sql文件导入docker容器时,我遇到了错误消息:
拒绝访问;您需要(至少一个)SUPER特权
这个操作
然后,在尝试其他一些建议时,我在MacOS (osx)上收到了以下错误
sed: RE错误:非法字节序列
最后,该资源的以下命令解决了我的“访问被拒绝”问题。
LC_ALL=C sed -i old 's/\DEFINER\=`[^`]*`@`[^`]*`//g' fileName.sql
所以我可以导入到docker数据库:
docker exec -i dockerContainerName mysql -uuser -ppassword table < importFile.sql
希望这能有所帮助!:)
完整的解决方案
以上所有的解决方案都是好的。这里我要把所有的解结合起来这样它就适用于所有的情况。
固定的定义者
Linux和Mac
sed -i old 's/\DEFINER\=`[^`]*`@`[^`]*`//g' file.sql
对于Windows
下载atom或notepad++,用atom或notepad++打开转储sql文件,按Ctrl+F
搜索单词DEFINER,并从所有位置删除行DEFINER=admin@%(或者可能对您来说稍有不同)并保存文件。
例如
CREATE DEFINER=admin@% PROCEDURE MyProcedure
删除这一行后:CREATE PROCEDURE MyProcedure
删除3条线
从转储文件中删除所有这3行。您可以使用sed命令或在Atom编辑器中打开该文件,搜索每一行,然后删除该行。
示例:打开Dump2020。sql在Atom,按ctrl+F,搜索SET @@会话。SQL_LOG_BIN= 0,删除该行。
SET @@SESSION.SQL_LOG_BIN= 0;
SET @@GLOBAL.GTID_PURGED=/*!80000 '+'*/ '';
SET @@SESSION.SQL_LOG_BIN = @MYSQLDUMP_TEMP_LOG_BIN;
生成的文件有问题
如果您生成的转储文件可能会遇到一些问题。SQL文件不正确。但在这里,我不打算解释如何生成转储文件。但是你可以问我(_)