Bagikan melalui


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

BERLAKU UNTUK: Azure Database for MySQL - Server Tunggal Azure Database for MySQL - Server Fleksibel

Penting

Server tunggal Azure Database for MySQL berada di jalur penghentian. Kami sangat menyarankan Agar Anda meningkatkan ke server fleksibel Azure Database for MySQL. Untuk informasi selengkapnya tentang migrasi ke server fleksibel Azure Database for MySQL, lihat Apa yang terjadi pada Server Tunggal Azure Database for MySQL?

Server fleksibel Azure Database for MySQL 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 akan melihat beberapa kesalahan umum yang mungkin dihadapi pengguna saat bermigrasi ke atau mengembangkan server fleksibel Azure Database for MySQL 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 menyambung kembali... ID koneksi: 64897 Basis data saat ini: *** NONE *** ERROR 1184 (08S01): Koneksi dibatalkan 22 ke db: 'db-name' pengguna: 'user' Host: '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:

ERROR 1419: 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)

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 dari bilah parameter server di portal, 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 server fleksibel Azure Database for MySQL 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 ;

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

Kesalahan di atas mungkin terjadi saat menjalankan CREATE VIEW dengan pernyataan DEFINER sebagai bagian dari mengimpor file cadangan atau menjalankan skrip. Server fleksibel Azure Database for MySQL 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 server fleksibel Azure Database for MySQL:

    select user from mysql.user;
    
  • Jika Anda tidak dapat masuk ke instans server fleksibel Azure Database for MySQL untuk menjalankan kueri di atas itu sendiri, kami sarankan Anda untuk mengatur ulang kata sandi admin menggunakan portal Azure. Opsi reset kata sandi dari portal Microsoft Azure akan membantu membuat ulang pengguna, mereset kata sandi, dan memulihkan izin admin, yang akan memungkinkan Anda untuk masuk menggunakan admin server dan melakukan operasi lebih lanjut.