Bagikan melalui


Memecahkan masalah kesalahan yang umum ditemui selama atau pascamigrasi ke Azure Database for MySQL - Server Fleksibel

Azure Database for MySQL Flexible Server adalah layanan terkelola penuh yang didukung oleh versi komunitas MySQL. Pengalaman MySQL di lingkungan layanan terkelola mungkin berbeda dari menjalankan MySQL di lingkungan Anda sendiri. Dalam artikel ini, Anda melihat beberapa kesalahan umum yang mungkin dihadapi pengguna saat bermigrasi ke atau mengembangkan di Azure Database for MySQL Flexible Server untuk pertama kalinya.

Kesalahan Umum terkait Koneksi

ERROR 1184 (08S01): Aborted connection 22 to db: 'db-name' user: 'user' host: 'hostIP' (init_connect command failed)

Kesalahan di atas terjadi setelah proses masuk berhasil tetapi sebelum perintah apa pun ketika sesi ditetapkan. Pesan di atas menunjukkan bahwa Anda telah menetapkan nilai init_connect parameter server yang salah, yang menyebabkan inisialisasi sesi gagal.

Ada beberapa parameter server seperti require_secure_transport yang tidak didukung di tingkat sesi, sehingga mencoba mengubah nilai parameter ini menggunakan init_connect dapat mengakibatkan Kesalahan 1184 saat menyambungkan ke instans Server Fleksibel Azure Database for MySQL seperti yang ditunjukkan di bawah ini:

mysql> tampilkan databases; ERROR 2006 (HY000): MySQL server has gone away No connection. Mencoba menyambungkan kembali... ID Koneksi: 64897 Database saat ini: ** NONE ** KESALAHAN 1184 (08S01): Koneksi dibatalkan 22 ke db: Pengguna 'db-name': host 'pengguna': 'hostIP' (perintah init_connect gagal)

Resolusi: Reset nilai init_connect di tab Parameter server di portal Microsoft Azure dan atur ke hanya parameter server yang didukung menggunakan parameter init_connect.

Kesalahan karena kurangnya hak istimewa SUPER dan peran DBA

Hak istimewa SUPER dan peran DBA tidak didukung pada layanan ini. Akibatnya, Anda mungkin mengalami beberapa kesalahan umum yang tercantum di bawah ini:

KESALAHAN 1419: Anda tidak memiliki hak istimewa SUPER dan pengelogan biner diaktifkan (Anda mungkin ingin menggunakan variabel log_bin_trust_function_creators yang kurang aman)

Kesalahan di atas mungkin terjadi saat membuat fungsi, memicu seperti di bawah ini atau mengimpor skema. Pernyataan DDL seperti CREATE FUNCTION atau CREATE TRIGGER ditulis ke log biner, sehingga replika sekunder dapat mengeksekusinya. Utas SQL replika memiliki hak istimewa penuh, yang dapat dimanfaatkan untuk meningkatkan hak istimewa. Agar server yang mengaktifkan pencatatan biner terlindungi dari bahaya ini, mesin MySQL mengharuskan pembuat fungsi yang disimpan memiliki hak istimewa SUPER, selain hak istimewa CREATE ROUTINE yang biasa.

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

Resolusi: Untuk mengatasi kesalahan, atur log_bin_trust_function_creators ke 1, jalankan pernyataan DDL atau impor skema untuk membuat objek yang diinginkan. Anda dapat tetap membiarkan log_bin_trust_function_creators ke 1 agar server Anda terhindar dari kesalahan tersebut di masa mendatang. Rekomendasi kami adalah menetapkan log_bin_trust_function_creators sebagai risiko keamanan yang disorot dalam dokumentasi komunitas MySQL minimal di Azure Database for MySQL Flexible Server karena log bin tidak terpapar ancaman apa pun.

ERROR 1227 (42000) at line 101: Access denied; you need (at least one of) the SUPER privilege(s) for this operation. Operation failed with exitcode 1

Kesalahan di atas mungkin terjadi saat mengimpor file cadangan atau membuat prosedur yang berisi pendefinisi.

Penyelesaian: Untuk mengatasi kesalahan ini, pengguna admin dapat memberikan hak istimewa untuk membuat atau menjalankan prosedur dengan menjalankan perintah GRANT seperti pada contoh berikut:

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

Sebagai alternatif, Anda dapat mengganti definer dengan nama pengguna admin yang menjalankan proses impor seperti yang ditunjukkan di bawah ini.

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

/* Modified to */

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

KESALAHAN 1227 (42000) di baris 295: Akses ditolak; Anda memerlukan (setidaknya satu dari) hak istimewa SUPER atau SET_USER_ID untuk operasi ini

Kesalahan di atas mungkin terjadi saat menjalankan CREATE VIEW dengan pernyataan DEFINER sebagai bagian dari mengimpor file cadangan atau menjalankan skrip. Azure Database for MySQL Flexible Server tidak mengizinkan hak istimewa SUPER atau hak istimewa SET_USER_ID kepada pengguna mana pun.

Resolusi:

  • Gunakan pengguna definer untuk menjalankan CREATE VIEW jika memungkinkan. Kemungkinan ada banyak tampilan dengan pendefinisi yang berbeda memiliki izin yang berbeda, sehingga ini mungkin tidak layak. ATAU
  • Edit file cadangan atau skrip BUAT TAMPIAN dan hapus pernyataan DEFINER= dari file cadangan. ATAU
  • Edit file cadangan atau skrip CREATE VIEW, serta ganti nilai definer dengan pengguna yang memiliki izin admin dan melakukan impor atau menjalankan file skrip.

Tip

Gunakan sed atau perl untuk memodifikasi file cadangan atau skrip SQL untuk mengganti pernyataan DEFINER=

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

Kesalahan di atas mungkin terjadi jika Anda menggunakan mencoba mengimpor file cadangan dari instans Server Fleksibel Azure Database for MySQL dengan GTID diaktifkan ke instans Server Fleksibel Azure Database for MySQL target. Mysqldump menambahkan pernyataan SET @@SESSION.sql_log_bin=0 ke file cadangan dari server tempat GTID digunakan, yang menonaktifkan pengelogan biner saat file dump sedang dimuat ulang.

Resolusi: Untuk mengatasi kesalahan ini saat mengimpor, hapus atau nonaktifkan sementara baris di bagian bawah file mysqldump Anda dan jalankan impor lagi untuk memastikan prosesnya berhasil.

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

Kesalahan koneksi umum untuk proses masuk admin server

Saat instans Server Fleksibel Azure Database for MySQL dibuat, rincian masuk admin server disediakan oleh pengguna akhir selama pembuatan server. Rincian admin server memungkinkan Anda membuat database baru, menambahkan pengguna baru, dan memberikan izin. Jika rincian masuk admin server dihapus, izinnya dicabut atau kata sandinya diubah, Anda mungkin mulai melihat kesalahan koneksi di aplikasi Anda saat koneksi. Berikut ini adalah beberapa kesalahan umum.

ERROR 1045 (28000): Access denied for user 'username'@'IP address' (using password: YES)

Kesalahan di atas terjadi jika:

  • Nama pengguna tidak ada.
  • Nama pengguna telah dihapus.
  • Kata sandinya diubah atau direset.

Resolusi:

  • Validasikan jika "nama pengguna" ada sebagai pengguna yang valid di server atau secara tidak sengaja terhapus. Anda dapat menjalankan kueri berikut dengan masuk ke pengguna Azure Database for MySQL Flexible Server:

    select user from mysql.user;