MySQL / Amazon RDS hatası: "SÜPER ayrıcalıklarınız yok…"


101

Mysql veritabanımı bir Amazon EC2'den bir RDS'ye kopyalamaya çalışıyorum:

Bunu mysqldumpkullanarak veritabanımdan bir tanesini kök klasörüme başarıyla yaptım :

root@ip-xx-xx-xx-xx:~# mysqldump my_database -u my_username -p > my_database.sql

Sonra bu .sql dosyasını yeni RDS veritabanıma aktarmaya çalıştım:

root@ip-xx-xx-xx-xx:~# mysql my_database -u my_username -p -h  
my_new_database.xxxxxxxxx.us-east-1.rds.amazonaws.com < my_database.sql

Maalesef aşağıdaki hata mesajını alıyorum:

You do not have the SUPER privilege and binary logging is enabled 
(you *might* want to use  the less safe log_bin_trust_function_creators variable)

GRANT SUPER..Çeşitli şekillerde denedim ama bunu yapmaya çalıştığımda da hatalar alıyorum. Yazmak da mysql > FLUSH privileges;çalışmıyor.

Ben bir mysql acemi bu kadar kolay bir soru için çok üzgünüm. Düşünceler?


9
GRANT SUPERRDS'de yapamazsınız . RDS, SÜPER ayrıcalıkları elde etmenin bir yolunu sunmaz.
ceejayoz

1
Döküm oluşturmak ve geri yüklemek için aynı MySQL kullanıcı adını kullanın (Bağlantı ve dökümdeki DEFINER anahtar sözcüğü için). Log_bin_trust_function_creators'ı değiştirmek istenen çözüm değildir. Bu durumda en kötüsü -f parametresini kullanmaktır
ad4s

benim durumumda benim sqldosya vardır CREATE FUNCTIONayrıcalıklı kullanıcı ihtiyacı deyimi. buna bakın
Muhasebeci م

Yanıtlar:


63

Başına http://getasysadmin.com/2011/06/amazon-rds-super-privileges/ , ayarlamak gerek log_bin_trust_function_creators1 olarak AWS konsolunda hatalar olmadan döküm dosyası yüklemek için,.

Bu hataları yok saymak ve döküm dosyasının geri kalanını yüklemek istiyorsanız, şu -fseçeneği kullanabilirsiniz :

mysql -f my_database -u my_username -p -h  
my_new_database.xxxxxxxxx.us-east-1.rds.amazonaws.com < my_database.sql

Hata -fbildirecek, ancak döküm dosyasının geri kalanını işlemeye devam edecek.


merhaba @Ross, bunun için teşekkürler. Maalesef kullanmak -fyardımcı olmadı. Aynı hatayı aldım. Bağlantınızı kullanarak, RDS Cli araçlarının sözdizimiyle ilgili sorun yaşıyorum. Anlamı, ayrıcalıkları değiştirmeye gittiğimde şu hatayı alıyorum:rds-modify-db-parameter-group: Malformed input-Unrecognized option: -–parameters=name=log_bin_trust_function_creators, Usage: rds-modify-db-parameter-group DBParameterGroupName --parameters "name=value, value=value, method=value" [ --parameters "name=value, value=value, method=value" ...] [General Options]
tim peterson

İşte bana yukarıdaki hatayı veren komutum: ./rds-modify-db-parameter-group mygroup -–parameters "name=log_bin_trust_function_creators, value=on, method=immediate" –I="accesskeyxxxxxx" –S="secretkeyxxxxxxxx"Bunun bir teklif veya çift çizgi sorunu olması gerektiğini biliyorum ama bu tür değişikliklerin hiçbiri şu ana kadar çalışmıyor, ugh!
tim peterson

4
Bu -fseçenek hataları ortadan kaldırmaz, sadece dosyadaki rahatsız edici olmayan SQL ifadelerinin işlenmesine izin verir. Okuduğum kadarıyla, RDS, döküm dosyasındaki saklı yordamları boğuyor. Depo prosedürleri olmadan bir döküm dosyası oluşturmayı deneyin ve bunun mysqldump --routines=0 --triggers=0 --events=0 my_database -u my_username -p
Ross Smith II

2
- @ Ross, harika işe yaradı, veritabanım orada, vay can sıkıcı bir sorun, AWS'nin bu konuda bir şeyler yapması gerektiğini hissediyorum.
tim peterson

En azından -fseçeneği ile tüm verileri yükleyebilirim . İkinci faz ayrı ayrı sadece rutinleri / stred proc vb dökümü olabilir
Kaymaz

139
  1. RDS web konsolunu açın.
  2. "Parametre Grupları" sekmesini açın.
  3. Yeni bir Parametre Grubu oluşturun. İletişim kutusunda, MySQL veritabanı sürümünüzle uyumlu MySQL ailesini seçin, bir ad verin ve onaylayın. Yeni oluşturulan Parametre Grubunu seçin ve "Parametreleri Düzenle" yayınlayın.
  4. 'Log_bin_trust_function_creators' parametresini arayın ve değerini '1 ′ olarak ayarlayın.
  5. Değişiklikleri kaydedin.
  6. "Örnekler" sekmesini açın. MySQL örneğinizi genişletin ve "Değiştir" adlı "Örnek Eylemi" ni çalıştırın.
  7. Yeni oluşturulan Parametre Grubunu seçin ve "Hemen Uygula" yı etkinleştirin.
  8. "Devam et" üzerine tıklayın ve değişiklikleri onaylayın.
  9. "Değiştirme" işleminin tamamlanmasını bekleyin.
  10. Yine "Örnekler" sekmesini açın. MySQL örneğinizi genişletin ve "Örnek Eylemi" sekmesini genişletin ve "Yeniden Başlat" ı seçin.

> 9. nokta ne yapar ... örneğinizi önceden tanımlanan parametre grubunu kullanacak şekilde ayarlarsınız. Daha fazla ayrıntı için Daniel Ferbers'ın bu orijinal blog gönderisine bakın: techtavern.wordpress.com/2013/06/17/…
AndrewL

Bu, RDS Mysql çoğaltmasını durduracak mı?
Ramratan Gupta

hi @ arun-r, açıkladığınız adımlardan geçiyorum, ancak 'log_bin_trust_function_creators' parametresi bu durumda kullanılamıyor. En son AWS RDS'de bir şeylerin değiştiğini düşünüyorum. Şimdi bunu nasıl yapabilirim bana yardım eder misin? teşekkürler,
Pawan Developers

@RamratanGupta Durmayacak
arun-r

1
@ arun-r cevabınız için teşekkürler. Sorunumu çözdüm. Aslında listede log_bin_trust_function_creators buldum. ancak sorunum AWS desteği ile iletişime geçerek çözüldü
Pawan Developers

33

Döküm dosyasındaki tetikleyiciler ve saklı yordamlarla ilgili sorun, bu tanımların DEFINER tarafından depolanmış yordamın oluşturulması gereken kullanıcıyı içermesidir. Kullanıcı büyük olasılıkla RDS'de mevcut değildir, bu nedenle bir hata daha sonra ortaya çıkar. Döküm dosyasını yükleyebilmek için DEFINER'ı sed veya Perl kullanarak kaldırabilir ve içe aktarmayı gerçekleştiren kullanıcıyla saklı yordamı / tetikleyiciyi oluşturabilirsiniz.

perl -pe 's/\sDEFINER=`[^`]+`@`[^`]+`//' < mysqldump.sql > mysqldump.fixed.sql

Artık sabit döküm dosyasını yükleyebilmelisiniz

mysql my_database -u my_username -p -h rds_host < mysqldump.fixed.sql

Önceki yanıtta belirtildiği gibi, DB Parametresini ayarlamalısınız:

log_bin_trust_function_creators = 1

1
Tanımlayıcıları temizlemek, sed -i 's / DEFINER = OldDefiner@ localhost/ DEFINER = NewDefiner@ localhost/ g' ./TargetSqlFile.sql
siliconrockstar

16

Benim için, döküm dosyamda SUPER ayrıcalıkları gerektiren yalnızca 2 komut vardı:

  • SET @@GLOBAL.gtid_purged
  • SET @@SESSION.SQL_LOG_BIN

Mysqldump belgelerine göre bunları ile devre dışı bırakabilirsiniz --set-gtid-purged=OFF.

Sonra adama mysqldump'a bakıyorum :

Amaç, dökümü yapılan sunucudaki verilerin yalnızca bir kısmını kullanarak yeni bir çoğaltma bağımlı birimini dağıtmaksa AÇIK'ı kullanın. Bir tabloyu bir topoloji içinde kopyalayarak onarmak istiyorsanız KAPALI'yı kullanın. Ayrık olan ve öyle kalacak olan çoğaltma topolojileri arasında bir tabloyu kopyalamak istiyorsanız KAPALI'yı kullanın.

Bu yüzden eklemeye karar --set-gtid-purged=OFFbenim için mysqldumpkomuta ve sonra ben başarıyla sonuçlanan döküm dosyası alabiliriz.


1
Evet, buydu. Döküm dosyam nispeten küçüktü, bu yüzden bu 2 komutun tüm oluşumlarını ondan kaldırdım.
Zolbayar

6

AWS belgelerinde tanımlandığı gibi tetikleyiciler, prosedürler ve işlevler varsayılan olarak devre dışıdır çünkü ikili günlük kaydı varsayılan olarak etkinleştirilmiştir. Devre dışı bırakmak temelde db'nizi daha güvenli hale getirir, ancak ağ üzerinden uygun şekilde güvenli hale getirdiyseniz önemli olmayacaktır.

Bu adımları izleyin ve sorununuz çözülecektir https://aws.amazon.com/premiumsupport/knowledge-center/rds-mysql-functions/

Ayrıca prosedür oluştururken tanımlayıcı kullanmamalısınız. Basit bir sed komutu onu kaldırabilir.



1

Arun-r yanıtını kullandıktan sonra, sorun çözülmediyse döküm dosyanızı değiştirmeniz gerekir. Basit.

Döküm dosyasında aşağıdaki gibi satırlar bulacaksınız:

DELIMITER ;;
CREATE DEFINER=`username_from_dumped_database`@`host_from_dumped_database` PROCEDURE `procedure_or_function_name`()
BEGIN

Değiştirmelisiniz:

  • username_from_dumped_database rds veritabanındaki kullanıcı adınıza göre.
  • host_from_dumped_databse tarafından %

Neden bilmiyorum ama bu numara benim için çalıştı. Bunu yapmak için basit bir metin editörü yeterlidir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.