MySQL için Azure Veritabanı - Esnek Sunucuya geçiş sırasında veya sonrasında sık karşılaşılan hataları giderme

ŞUNLAR IÇIN GEÇERLIDIR: MySQL için Azure Veritabanı - Tek Sunucu MySQL için Azure Veritabanı - Esnek Sunucu

Önemli

MySQL için Azure Veritabanı tek sunucu kullanımdan kaldırma yolundadır. Esnek MySQL için Azure Veritabanı sunucuya yükseltmenizi kesinlikle öneririz. MySQL için Azure Veritabanı esnek sunucuya geçiş hakkında daha fazla bilgi için bkz. MySQL için Azure Veritabanı Tek Sunucu'ya neler oluyor?

MySQL için Azure Veritabanı Esnek Sunucu, MySQL'in topluluk sürümü tarafından desteklenen tam olarak yönetilen bir hizmettir. Yönetilen hizmet ortamındaki MySQL deneyimi, MySQL'i kendi ortamınızda çalıştırmaktan farklı olabilir. Bu makalede, kullanıcıların MySQL için Azure Veritabanı Esnek Sunucu'ya geçiş yaparken veya bu sunucuda ilk kez geliştirme yaparken karşılaşabileceği yaygın hatalardan bazılarını göreceksiniz.

Yaygın Bağlantı Hataları

HATA 1184 (08S01): Veritabanına 22 bağlantısı durduruldu: 'db-name' kullanıcı: 'user' ana bilgisayarı: 'hostIP' (init_connect komutu başarısız oldu)

Yukarıdaki hata, oturum açma başarılı olduktan sonra ancak oturum oluşturulduğunda herhangi bir komut yürütülmeden önce oluşur. Yukarıdaki ileti, oturum başlatmanın init_connect başarısız olmasına neden olan yanlış bir sunucu parametresi değeri ayarladığınızı gösterir.

Oturum require_secure_transport düzeyinde desteklenmeyen bazı sunucu parametreleri vardır ve bu nedenle kullanarak bu parametrelerin init_connect değerlerini değiştirmeye çalışmak, aşağıda gösterildiği gibi MySQL için Azure Veritabanı Esnek Sunucu örneğine bağlanırken Hata 1184'e neden olabilir:

mysql> show databases; HATA 2006 (HY000): MySQL sunucusu kayboldu Bağlantı yok. Yeniden bağlanmaya çalışılıyor... Bağlantı kimliği: 64897 Geçerli veritabanı: *** YOK *** HATA 1184 (08S01): Veritabanına 22 bağlantısı durduruldu: 'db-name' kullanıcı: 'user' ana bilgisayarı: 'hostIP' (init_connect komutu başarısız oldu)

Çözüm: Azure portalında Sunucu parametreleri sekmesindeki değeri sıfırlayın init_connect ve init_connect parametresini kullanarak yalnızca desteklenen sunucu parametrelerini ayarlayın.

SÜPER ayrıcalık ve DBA rolünün olmamasından kaynaklanan hatalar

SÜPER ayrıcalık ve DBA rolü hizmette desteklenmez. Sonuç olarak, aşağıda listelenen bazı yaygın hatalarla karşılaşabilirsiniz:

HATA 1419: SÜPER ayrıcalığınız yok ve ikili günlük etkinleştirildi (daha az güvenli log_bin_trust_function_creators değişkenini kullanmak isteyebilirsiniz)

Yukarıdaki hata bir işlev oluşturulurken, aşağıdaki gibi tetiklendiğinde veya şema içeri aktarılırken oluşabilir. CREATE FUNCTION veya CREATE TRIGGER gibi DDL deyimleri ikili günlüğe yazılır, böylece ikincil çoğaltma bunları yürütebilir. Çoğaltma SQL iş parçacığı, ayrıcalıkları yükseltmek için yararlanabileceğiniz tam ayrıcalıklara sahiptir. İkili günlük etkinleştirilmiş sunucular için bu tehlikeye karşı korunmak için MySQL altyapısı, depolanan işlev oluşturucularının normal CREATE ROUTINE ayrıcalığına ek olarak SUPER ayrıcalığına sahip olmasını gerektirir.

CREATE FUNCTION f1(i INT)
RETURNS INT
DETERMINISTIC
READS SQL DATA
BEGIN
  RETURN i;
END;

Çözüm: Hatayı çözmek için portaldaki sunucu parametreleri dikey penceresinden 1 olarak ayarlayınlog_bin_trust_function_creators, DDL deyimlerini yürütür veya istenen nesneleri oluşturmak için şemayı içeri aktarır. Gelecekte hatadan kaçınmak için sunucunuz için 1'e devam log_bin_trust_function_creators edebilirsiniz. MySQL topluluk belgelerinde vurgulanan güvenlik riski MySQL için Azure Veritabanı Esnek Sunucu'da minimum düzeyde olduğundan, bölme günlüğü herhangi bir tehditlere maruz kalmadığından bu riskin log_bin_trust_function_creators en düşük düzeyde olmasını tavsiye ediyoruz.

101. satırdaki HATA 1227 (42000): Erişim reddedildi; bu işlem için SÜPER ayrıcalıklara (en az biri) ihtiyacınız vardır. İşlem çıkış kodu 1 ile başarısız oldu

Döküm dosyası içeri aktarılırken veya tanımlayıcıları içeren yordam oluşturulurken yukarıdaki hata oluşabilir.

Çözüm: Bu hatayı çözmek için yönetici kullanıcı aşağıdaki örneklerde olduğu gibi GRANT komutunu çalıştırarak yordam oluşturma veya yürütme ayrıcalıkları verebilir:

GRANT CREATE ROUTINE ON mydb.* TO 'someuser'@'somehost';
GRANT EXECUTE ON PROCEDURE mydb.myproc TO 'someuser'@'somehost';

Alternatif olarak, tanımlayıcıları aşağıda gösterildiği gibi içeri aktarma işlemini çalıştıran yönetici kullanıcının adıyla değiştirebilirsiniz.

DELIMITER;;
/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`127.0.0.1`*/ /*!50003
DELIMITER;;

/* Modified to */

DELIMITER ;;
/*!50003 CREATE*/ /*!50017 DEFINER=`AdminUserName`@`ServerName`*/ /*!50003
DELIMITER ;

HATA 1227 (42000) satır 295: Erişim reddedildi; bu işlem için SUPER veya SET_USER_ID ayrıcalıklarından (en az biri) gerekir

Yukarıdaki hata, döküm dosyasını içeri aktarmanın veya betiği çalıştırmanın bir parçası olarak DEFINER deyimleriyle CREATE VIEW yürütülürken oluşabilir. MySQL için Azure Veritabanı Esnek Sunucu, herhangi bir kullanıcıya SÜPER ayrıcalıklara veya SET_USER_ID ayrıcalığına izin vermez.

Çözüm:

  • Mümkünse CREATE VIEW'u yürütmek için definer kullanıcısını kullanın. Büyük olasılıkla farklı izinlere sahip farklı tanımlayıcılara sahip birçok görünüm vardır, bu nedenle bu mümkün olmayabilir. VEYA
  • Döküm dosyasını veya CREATE VIEW betiğini düzenleyin ve döküm dosyasından DEFINER= deyimini kaldırın. VEYA
  • Döküm dosyasını veya CREATE VIEW betiğini düzenleyin ve tanımlayıcı değerlerini içeri aktarmayı gerçekleştiren veya betik dosyasını yürüten yönetici izinleriyle kullanıcıyla değiştirin.

İpucu

Döküm dosyasını değiştirmek için sed veya perl kullanın veya DEFINER= deyimini değiştirmek için SQL betiği kullanın

HATA 1227 (42000) satır 18: Erişim reddedildi; bu işlem için SUPER ayrıcalıklarının (en az biri) gerekir

GTID'nin etkinleştirildiği bir MySQL için Azure Veritabanı Esnek Sunucu örneğinden hedef MySQL için Azure Veritabanı Esnek Sunucu örneğine döküm dosyasını içeri aktarmaya çalışırken yukarıdaki hata oluşabilir. Mysqldump, SET @@SESSION.sql_log_bin=0 deyimini, DÖKÜM dosyası yeniden yüklenirken ikili günlüğü devre dışı bırakan GTID'lerin kullanıldığı bir sunucudan döküm dosyasına ekler.

Çözüm: İçeri aktarırken bu hatayı çözmek için mysqldump dosyanızdaki aşağıdaki satırları kaldırın veya açıklama satırı yapın ve başarılı olduğundan emin olmak için içeri aktarmayı yeniden çalıştırın.

SET @MYSQLDUMP_TEMP_LOG_BIN = @@SESSION. SQL_LOG_BIN;
SET @@SESSION. SQL_LOG_BIN= 0; SET @@GLOBAL. GTID_PURGED='; SET @@SESSION. SQL_LOG_BIN = @MYSQLDUMP_TEMP_LOG_BIN;

Sunucu yöneticisi oturum açma için yaygın bağlantı hataları

MySQL için Azure Veritabanı Esnek Sunucu örneği oluşturulduğunda, sunucu oluşturma sırasında son kullanıcı tarafından bir sunucu yöneticisi oturum açması sağlanır. Sunucu yöneticisi oturum açma, yeni veritabanları oluşturmanıza, yeni kullanıcılar eklemenize ve izinler vermenizi sağlar. Sunucu yöneticisi oturum açma işlemi silinirse, izinleri iptal edilirse veya parolası değiştirilirse, bağlantılar sırasında uygulamanızda bağlantı hataları görmeye başlayabilirsiniz. Yaygın hatalardan bazıları aşağıdadır.

HATA 1045 (28000): 'kullanıcıadı'@'IP adresi' kullanıcısı için erişim reddedildi (parola kullanılarak: EVET)

Yukarıdaki hata şu durumlarda oluşur:

  • Kullanıcı adı yok.
  • Kullanıcı kullanıcı adı silindi.
  • parolası değiştirilir veya sıfırlanır.

Çözüm:

  • "Kullanıcı adı"nın sunucuda geçerli bir kullanıcı olarak mevcut olup olmadığını veya yanlışlıkla silindiğini doğrulayın. MySQL için Azure Veritabanı Esnek Sunucu kullanıcısına oturum açarak aşağıdaki sorguyu yürütebilirsiniz:

    select user from mysql.user;
    
  • Yukarıdaki sorguyu yürütmek için MySQL için Azure Veritabanı Esnek Sunucu örneğinde oturum açamıyorsanız Azure portalını kullanarak yönetici parolasını sıfırlamanızı öneririz. Azure portalındaki parolayı sıfırla seçeneği, kullanıcıyı yeniden oluşturmanıza, parolayı sıfırlamanıza ve yönetici izinlerini geri yüklemenize yardımcı olur. Bu sayede sunucu yöneticisini kullanarak oturum açıp başka işlemler gerçekleştirebilirsiniz.