したがって、SQLファイルをrds(1G MEM、1 CPU)にインポートしようとします。 SQLファイルは1.4Gのようなものです
mysql -h xxxx.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';
まだ運がありません。
DEFINER=..
ステートメントをsqldumpファイルから削除するか、ユーザー値をCURRENT_USER
に置き換えます。
RDSが提供するMySQLサーバーは、(私の経験では)DEFINER
構文を別のユーザーに許可しません。
sed
スクリプトを使用して、ファイルからそれらを削除できます。
sed 's/\sDEFINER=`[^`]*`@`[^`]*`//g' -i oldfile.sql