2017-05-17 12 views
14

Bu yüzden sql dosyasını rds (1G MEM, 1 CPU) içine almaya çalışıyorum. sql dosyası 1.4GErişim reddedildi; Bu işlem için SUPER ayrıcalıklarına (en az bir tane) gereksiniminiz var

gibi de saplanıp

mysql -h xxxx.rds.amazonaws.com -u kullanıcının -ppass --max-izin-paket = 33554432 db < db.sql

geçerli:

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

gerçek sql içeriği:

another_user

/*!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 */;; 
rds varolan değil, bu yüzden yapın:

Hala hayır şans.

cevap

23

sqldump dosyanızdan DEFINER=.. ifadesini kaldırın ya da kullanıcı değerlerini CURRENT_USER ile değiştirin.

RDS tarafından sağlanan MySQL sunucusu, başka bir kullanıcı için (benim tecrübemde) DEFINER sözdizimine izin vermiyor.

Dosyanın bunları kaldırmak için bir sed komut dosyasını kullanabilirsiniz:

sed 's/\sDEFINER=`[^`]*`@`[^`]*`//g' -i oldfile.sql 
+0

Doğru konum. Çalışmamasının nedeni, giriş yapmış olan kullanıcının "SÜPER" ayrıcalığına sahip olmadığı (RDS'de kendisine izin verilmeyen) bir başka kullanıcının "DEFINER" olarak tanımlanması, keyfi ayrıcalık yükselmesine izin vermesidir. "DEFINER" öğelerinin kimlik bilgileri ve ayrıcalıkları (varsayılan olarak arayan kullanıcının - INVOKER onlarınkilerin). Ayrıca [Sunucu Arızasında] (https://serverfault.com/a/555983/153161). –

+0

Adam bir hayat kurtarıcısın. Benim hosting şirketi ihraç edildiğinde bozuk veritabanı ve geri yüklemek için yapılması gereken bir şey söyledi. Mükemmel çözüm. – Woody

+3

Herhangi bir nedenden ötürü * yerine * kullanmam gerekiyordu: '' 'sed 's/\ sDEFINER =' [^ '] *' @ '[^'] * '//' -i oldfile.sql''' ' –

İlgili konular