Pemecahan masalah MySQL

Solusi untuk masalah konektivitas, autentikasi, dan jenis data MySQL umum di penyusun API Data.

Pertanyaan umum

Apa itu dukungan MySQL di DAB?

Penyusun API Data mendukung MySQL sebagai back end database relasional. DAB terhubung menggunakan driver MySqlConnector dan menerjemahkan permintaan REST dan GraphQL ke dalam kueri SQL. Instans MySQL yang dihost sendiri dan layanan terkelola seperti Azure Database for MySQL didukung.

Format string koneksi apa yang digunakan MySQL?

DAB menggunakan string koneksi ADO.NET MySQL standar. String umum terlihat seperti Server=localhost;Port=3306;Database=mydb;Uid=myuser;Pwd=mypassword;. Atur string koneksi di data-source.connection-string bidang dab-config.json atau teruskan melalui --connection-string di dab init.

Versi MySQL apa yang didukung?

DAB mendukung MySQL 8.0 dan yang lebih baru. MySQL 5.7 mungkin berfungsi tetapi tidak didukung secara resmi. Konfirmasikan versi server Anda dengan SELECT VERSION(); di shell MySQL. Jika Anda berada di layanan terkelola seperti Azure Database for MySQL, gunakan tingkat Server Fleksibel, yang mendukung MySQL 8.0.

Masalah umum

Tidak dapat tersambung ke kontainer MySQL

Gejala: DAB gagal memulai dengan Unable to connect to any of the specified MySQL hosts.

Menyebabkan: Port kontainer MySQL tidak dipetakan, nama host salah, atau kontainer belum selesai menginisialisasi.

Resolusi: Konfirmasikan kontainer berjalan dengan docker ps dan port 3306 tersebut dipetakan ke host. Gunakan Server=localhost;Port=3306 dalam string koneksi. Izinkan beberapa detik setelah kontainer dimulai untuk MySQL untuk menyelesaikan inisialisasi sebelum memulai DAB.

Akses ditolak untuk pengguna

Gejala: Log DAB menunjukkan Access denied for user 'myuser'@'172.x.x.x' atau serupa.

Menyebabkan: Akun pengguna MySQL dibatasi untuk host tertentu. Ketika DAB berjalan di Docker, koneksi berasal dari IP jaringan kontainer, bukan localhost.

Resolusi: Berikan akses pengguna dari host mana pun dengan menjalankan GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword'; FLUSH PRIVILEGES;. Untuk produksi, ganti % dengan host atau subnet tertentu. Verifikasi kecocokan kata sandi dengan menjalankan mysql -u myuser -p dari jaringan yang sama.

Kesalahan database tidak diketahui

Gejala: DAB kembali Unknown database 'mydb' selama startup.

Menyebabkan: Database yang ditentukan dalam string koneksi belum dibuat di server MySQL.

Resolusi: Buat database sebelum memulai DAB dengan menjalankan CREATE DATABASE mydb; di shell MySQL. Jika menggunakan kontainer, atur MYSQL_DATABASE variabel lingkungan sehingga MySQL membuat database pada awal pertama.

Peringatan tipe kolom yang tidak didukung

Gejala: DAB mencatat peringatan tentang jenis kolom yang tidak didukung dan bidang hilang dari skema yang dihasilkan.

Menyebabkan: Jenis khusus MySQL tertentu seperti SET, , ENUMatau jenis spasial mungkin tidak memiliki pemetaan langsung dalam sistem jenis DAB.

Resolusi: Tinjau log DAB untuk mengidentifikasi kolom dan jenis. Pertimbangkan untuk mengubah kolom ke jenis yang didukung seperti VARCHAR untuk ENUM kolom, atau mengecualikan kolom dari definisi entitas menggunakan konfigurasi mappings untuk menghilangkannya dari skema yang diekspos.

Pembaruan gagal pada tampilan

Gejala: Permintaan PUT atau PATCH pada entitas yang didukung oleh tampilan MySQL gagal dengan kesalahan atau tidak berpengaruh.

Menyebabkan: Penyusun API Data saat ini tidak mendukung operasi pembaruan pada tampilan MySQL. Ini adalah batasan yang diketahui yang dilacak dalam masalah GitHub #938.

Resolusi: Gunakan entitas tabel dasar untuk operasi tulis. Jika tampilan bersifat baca-saja menurut desain, atur "perbarui": false dalam izin entitas untuk membuat batasan menjadi eksplisit.

Pembaruan gagal pada tabel dengan kolom komputasi

Gejala: Permintaan PUT atau PATCH pada tabel MySQL yang berisi kolom komputasi gagal atau mengembalikan kesalahan.

Menyebabkan: Penyusun API Data tidak menangani kolom komputasi dengan benar selama operasi pembaruan di MySQL. Ini adalah batasan yang diketahui yang dilacak dalam masalah GitHub #1001.

Resolusi: Tidak ada solusi untuk saat ini. Kecualikan kolom komputasi dari pemetaan entitas jika memungkinkan, atau hindari operasi pembaruan pada entitas yang terpengaruh hingga masalah diselesaikan.

Pemfilteran berlapis tidak didukung

Gejala: Kueri ilter REST \ atau GraphQL yang memfilter pada bidang entitas terkait mengembalikan kesalahan atau hasil yang tidak terduga pada entitas yang didukung MySQL.

Menyebabkan: Penyusun API Data saat ini tidak mendukung pemfilteran berlapis untuk MySQL. Ini adalah batasan yang diketahui yang dilacak dalam masalah GitHub #1019.

Resolusi: Terapkan pemfilteran pada bidang entitas tingkat atas saja. Untuk data berlapis, peroleh data induk dan lakukan pemfilteran di sisi klien, atau restrukturisasi kueri untuk menghindari predikat bersarang.

Prosedur tersimpan tidak didukung

Gejala: Mengonfigurasi prosedur tersimpan MySQL sebagai sumber entitas gagal atau entitas tidak bertingkah seperti yang diharapkan.

Menyebabkan: Penyusun API Data saat ini tidak mendukung prosedur tersimpan untuk MySQL. Ini adalah batasan yang diketahui yang dilacak dalam masalah GitHub #1024.

Resolusi: Gunakan tabel atau tampilan sebagai sumber entitas sebagai gantinya. Ikuti saja issue GitHub untuk mendapatkan pembaruan ketika dukungan prosedur tersimpan MySQL ditambahkan.

Kebijakan basis data tidak diberlakukan untuk operasi pembuatan

Gejala: Permintaan buat mutasi atau POST berhasil bahkan ketika kebijakan database harus membatasi operasi.

Menyebabkan: Dukungan kebijakan database untuk Membuat tindakan di MySQL belum diterapkan. Ini adalah batasan yang diketahui yang dilacak dalam masalah GitHub #1329.

Resolusi: Gunakan izin berbasis peran untuk membatasi akses pembuatan hingga dukungan kebijakan database untuk Buat MySQL tersedia.

Kebijakan database tidak diberlakukan untuk operasi PUT dan PATCH

Gejala: Permintaan PUT atau PATCH pada entitas MySQL berhasil bahkan ketika kebijakan database harus membatasinya.

Menyebabkan: Dukungan kebijakan database untuk operasi PUT dan PATCH di MySQL belum diterapkan. Ini adalah batasan yang diketahui yang dilacak dalam masalah GitHub #1371.

Resolusi: Gunakan izin berbasis peran untuk membatasi akses pembaruan hingga dukungan kebijakan database untuk operasi pembaruan MySQL tersedia.

Autentikasi On-Behalf-Of (OBO) tidak didukung

Gejala: Mengonfigurasi autentikasi On-Behalf-Of (OBO) untuk instans DAB yang didukung MySQL gagal atau token tidak diteruskan ke database seperti yang diharapkan.

Menyebabkan: Autentikasi OBO saat ini hanya didukung untuk SQL Server dan Azure SQL. Dukungan untuk MySQL belum diimplementasikan. Ini adalah batasan yang diketahui yang dilacak dalam masalah GitHub #3159.

Resolusi: Gunakan metode autentikasi yang didukung seperti info masuk string koneksi untuk MySQL. Ikuti masalah GitHub untuk pembaruan saat dukungan OBO diperluas ke database non-SQL Server.