MySQL sorunlarını giderme

Veri API'sini oluşturucusunda sık karşılaşılan MySQL bağlantısı, kimlik doğrulaması ve veri türü sorunları için çözümler.

Sık sorulan sorular

DAB'de MySQL desteği nedir?

Veri API oluşturucusu, ilişkisel veritabanı arka ucu olarak MySQL'i destekler. DAB, MySqlConnector sürücüsünü kullanarak bağlanır ve REST ve GraphQL isteklerini SQL sorgularına çevirir. Hem şirket içinde barındırılan MySQL örnekleri hem de MySQL için Azure Veritabanı gibi yönetilen hizmetler desteklenir.

MySQL hangi bağlantı dizesi biçimini kullanıyor?

DAB standart bir MySQL ADO.NET bağlantı dizesi kullanır. Tipik bir dize gibi Server=localhost;Port=3306;Database=mydb;Uid=myuser;Pwd=mypassword; görünür. data-source.connection-string alanındaki dab-config.json alanına bağlantı dizesini ayarlayın ya da dab init içindeki --connection-string üzerinden geçirin.

Hangi MySQL sürümleri desteklenir?

DAB, MySQL 8.0 ve üzerini destekler. MySQL 5.7 çalışabilir ancak resmi olarak desteklenmez. MySQL kabuğu kullanarak SELECT VERSION(); ile sunucu sürümünüzü onaylayın. MySQL için Azure Veritabanı gibi yönetilen bir hizmet kullanıyorsanız, MySQL 8.0'ı destekleyen Esnek Sunucu katmanını kullanın.

Yaygın sorunlar

MySQL kapsayıcısına bağlanılamıyor

Belirti: DAB ile Unable to connect to any of the specified MySQL hostsbaşlayamaz.

Neden: MySQL kapsayıcı bağlantı noktası eşlenmedi, ana bilgisayar adı yanlış veya kapsayıcı başlatmayı tamamlamadı.

Çözüm: Kapsayıcının çalışır durumda olduğunu ve docker ps ile bağlantı noktası 3306'nin ana bilgisayara eşlendiğini onaylayın. Bağlantı dizesinde kullanın Server=localhost;Port=3306 . Kapsayıcı başladıktan sonra MySQL'in başlatma işlemini tamamlaması için birkaç saniye bekleyin ve ardından DAB'yi başlatın.

Kullanıcı için erişim reddedildi

Belirti: DAB günlükleri, Access denied for user 'myuser'@'172.x.x.x' veya benzeri gösterir.

Neden: MySQL kullanıcı hesabı belirli bir konakla sınırlıdır. DAB Docker'da çalıştırıldığında bağlantılar kapsayıcı ağı IP'sinden kaynaklanır, değil localhost.

Çözünürlük: komutunu çalıştırarak GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword'; FLUSH PRIVILEGES;kullanıcıya herhangi bir konaktan erişim izni verin. Üretimde, % öğesini belirli bir ana bilgisayar veya alt ağ ile değiştirin. Aynı ağdan çalıştırarak mysql -u myuser -p parola eşleşmelerini doğrulayın.

Bilinmeyen veritabanı hatası

Belirti: DAB, başlatma sırasında Unknown database 'mydb' geri döner.

Neden: Bağlantı dizesinde belirtilen veritabanı MySQL sunucusunda oluşturulmadı.

Çözüm: MySQL kabuğunda CREATE DATABASE mydb; komutunu çalıştırarak DAB'yi başlatmadan önce veritabanını oluşturun. Kapsayıcı kullanıyorsanız ortam değişkenini MYSQL_DATABASE MySQL'in ilk başlangıçta veritabanını oluşturması için ayarlayın.

Desteklenmeyen sütun türü uyarısı

Durum: DAB, desteklenmeyen bir sütun türüyle ilgili bir uyarı mesajını günlüğe kaydeder ve oluşturulan şemada alan eksik olarak belirtilmiştir.

Neden: , SETveya uzamsal türler gibi ENUMbelirli MySQL'e özgü türlerin DAB tür sisteminde doğrudan eşlemesi olmayabilir.

Çözünürlük: Sütunu ve türü tanımlamak için DAB günlüklerini gözden geçirin. Desteklenen bir tür olan VARCHAR gibi sütunu değiştirmeyi düşünün veya kullanımda olan şemadan çıkarmak için mappings yapılandırmasını kullanarak sütunu varlık tanımından çıkartın.

Görünümlerde güncelleştirme başarısız oluyor

Belirti: MySQL görünümü tarafından yedeklenen bir varlıkta PUT veya PATCH isteği bir hatayla başarısız oluyor veya hiçbir etkisi yok.

Neden: Veri API'si oluşturucusu şu anda MySQL görünümlerindeki güncelleştirme işlemlerini desteklememektedir. Bu, GitHub sorunu #938'de izlenen bilinen bir sınırlamadır.

Çözünürlük: Yazma işlemleri için bir temel tablo varlığı kullanın. Görünüm tasarım gereği salt okunursa, sınırlamayı açık hale getirmek için varlığın izinlerinde "update": false değerini ayarlayın.

Hesaplanmış sütunları olan tablolarda güncelleştirme başarısız oluyor

Belirti: Hesaplanan sütunlar içeren bir MySQL tablosundaki PUT veya PATCH isteği başarısız oluyor veya hata döndürüyor.

Neden: Veri API oluşturucusu, MySQL'deki güncelleştirme işlemleri sırasında hesaplanan sütunları doğru şekilde işlemez. Bu, GitHub sorunu #1001'de izlenen bilinen bir sınırlamadır.

Çözünürlük: Şu anda geçici bir çözüm yoktur. Mümkünse hesaplanan sütunları varlığın eşlemelerinin dışında tutun veya sorun çözülene kadar etkilenen varlıklarda güncelleştirme işlemlerinden kaçının.

İç içe filtreleme desteklenmiyor

Belirti: İlişkili varlık alanına filtre ekleyen REST \ veya GraphQL ilter sorgusu, MySQL destekli varlıkta hata veya beklenmeyen sonuçlar döndürür.

Neden: Veri API'si oluşturucusu şu anda MySQL için iç içe filtrelemeyi desteklememektedir. Bu, GitHub sorunu #1019'da izlenen bilinen bir sınırlamadır.

Çözünürlük: Filtrelemeyi yalnızca üst düzey varlık alanlarına uygulayın. İç içe veriler için, üst öğeyi alın ve istemci tarafında filtreleme yapın veya iç içe koşullardan kaçınmak için sorguyu yeniden yapılandırın.

Saklı yordamlar desteklenmez

Belirti: MySQL saklı yordamını varlık kaynağı olarak yapılandırma işlemi başarısız oluyor veya varlık beklendiği gibi davranmıyor.

Neden: Veri API'si oluşturucusu şu anda MySQL için saklı yordamları desteklememektedir. Bu, GitHub sorunu #1024'te izlenen bilinen bir sınırlamadır.

Çözünürlük: Bunun yerine varlık kaynağı olarak bir tablo veya görünüm kullanın. Güncellemeler için MySQL saklı yordam desteğinin ne zaman eklenmiş olduğunu öğrenmek amacıyla GitHub konusunu/sayfasını izleyin.

Veritabanı politikası, Oluşturma işlemleri için uygulanmaz

Belirti: Bir veritabanı ilkesinin işlemi kısıtlaması gerektiğinde bile mutasyon oluşturma veya POST isteği başarılı olur.

Neden: MySQL'de eylem oluşturma için veritabanı ilkesi desteği henüz uygulanmadı. Bu, GitHub sorunu #1329'da izlenen bilinen bir sınırlamadır.

Çözünürlük: MySQL Oluşturma için veritabanı ilkesi desteği sağlanana kadar oluşturma erişimini kısıtlamak için rol tabanlı izinleri kullanın.

PUT ve PATCH işlemleri için veritabanı ilkesi zorunlu tutulmadı

Belirti: Bir veritabanı ilkesinin bunu kısıtlaması gerektiğinde bile MySQL varlığındaki PUT veya PATCH isteği başarılı olur.

Neden: MySQL'de PUT ve PATCH işlemleri için veritabanı ilkesi desteği henüz uygulanmadı. Bu, GitHub sorunu #1371'de izlenen bilinen bir sınırlamadır.

Çözünürlük: MySQL güncelleştirme işlemleri için veritabanı ilkesi desteği sağlanana kadar güncelleştirme erişimini kısıtlamak için rol tabanlı izinleri kullanın.

Başkası Adına (OBO) kimlik doğrulaması desteklenmiyor

Belirti: MySQL tabanlı bir DAB örneği için On-Behalf-Of (OBO) kimlik doğrulamasını yapılandırma başarısız olur veya belirteç beklendiği gibi veritabanına iletilmez.

Neden: OBO kimlik doğrulaması şu anda yalnızca SQL Server ve Azure SQL için desteklenmektedir. MySQL desteği henüz uygulanmadı. Bu, GitHub sorunu #3159'da izlenen bilinen bir sınırlamadır.

Çözünürlük: MySQL için bağlantı dizesi kimlik bilgileri gibi desteklenen bir kimlik doğrulama yöntemi kullanın. OBO desteği SQL Server dışı veritabanlarına genişletildiğinde yapılan güncelleştirmeler için GitHub sorununu izleyin.