Masalah umum dalam versi minor MySQL 8.0

Halaman ini menjelaskan masalah dan inkompatibilitas umum yang mungkin Anda alami setelah melakukan upgrade versi utama dari Cloud SQL untuk MySQL 5.7 ke Cloud SQL untuk MySQL 8.0.

Untuk mengetahui informasi selengkapnya tentang upgrade versi utama, lihat Mengupgrade versi utama database yang diterapkan. Untuk mengetahui informasi selengkapnya tentang log error, lihat dan Melihat log error.

Masalah performa

Bagian berikut membahas masalah performa yang diketahui.

Masalah terkait kueri SELECT DISTINCT

Jika menggunakan kueri SELECT DISTINCT di MySQL 8.0.18 hingga MySQL 8.0.20, Anda mungkin mengalami penurunan performa. Waktu eksekusi kueri mungkin tiga kali lebih lama jika dibandingkan dengan MySQL 5.7.

Untuk mengetahui informasi selengkapnya, lihat MySQL Bug #99593.

Untuk mengatasi masalah ini, ikuti rekomendasi pemecahan masalah berikut:

  • Update ke MySQL 8.0.21, versi minor setelahnya, atau rilis terbaru.
  • Jika menggunakan MySQL 8.0.18 hingga MySQL 8.0.20, perbarui nilai untuk flag database internal_tmp_mem_storage_engine menjadi memory:
        SET SESSION internal_tmp_mem_storage_engine='memory' ;
      

Masalah terkait kueri GROUP BY

Jika menggunakan kueri SELECT... GROUP BY di MySQL 8.0.36 atau yang lebih lama, Anda mungkin mengalami penurunan performa dan peningkatan waktu eksekusi kueri.

Hal ini dapat terjadi jika kueri menggunakan mesin TempTable.

Untuk mengetahui informasi selengkapnya, lihat bug MySQL #107700

Untuk mengatasi masalah ini, ikuti rekomendasi pemecahan masalah berikut:

  • Update ke MySQL 8.0.37, versi minor setelahnya, atau rilis terbaru.
  • Jika menggunakan MySQL 8.0.36 atau yang lebih lama, perbarui flag database internal_tmp_mem_storage_engine untuk menggunakan mesin memori, bukan mesin tabel sementara:
        SET SESSION internal_tmp_mem_storage_engine='memory' ;
      

Masalah pada thread konkurensi rendah

Instance yang dibuat di MySQL 8.0.22 atau yang lebih baru yang mendukung aplikasi klien dengan thread konkurensi rendah mungkin mengalami masalah performa dan peningkatan waktu eksekusi kueri.

MySQL 8.0.22 memperkenalkan flag innodb_log_writer_threads untuk meningkatkan performa pada sistem konkurensi tinggi. Flag ini diaktifkan secara default. Jika Anda memiliki instance yang dibuat di MySQL 8.0.22 atau yang lebih baru yang mendukung aplikasi klien dengan thread konkurensi rendah, sebaiknya nonaktifkan flag innodb_log_writer_threads.

Untuk mengetahui informasi selengkapnya, lihat Bug MySQL #93734.

Masalah terkait JOINS

Jika menggunakan kueri JOIN dengan tampilan eq_ref di instance yang menggunakan MySQL 8.0.29 hingga MySQL 8.0.32, Anda mungkin mengalami masalah performa yang signifikan.

Untuk mengetahui informasi selengkapnya, lihat Bug MySQL #109361.

Untuk mengatasi masalah ini, update ke MySQL 8.0.33, versi minor setelahnya, atau rilis terbaru.

Masalah terkait klausa LIMIT dan ORDER BY

Jika menjalankan kueri dengan klausa LIMIT dan ORDER BY di MySQL 8.0.32 atau yang lebih lama, Anda mungkin mengalami masalah performa. Dalam beberapa kasus, paket kueri yang berbeda mungkin digunakan di MySQL 8.0 dibandingkan dengan MySQL 5.7 untuk kueri yang sama.

Untuk mengetahui informasi selengkapnya, lihat Perubahan di MySQL 8.0.33.

Untuk mengatasi masalah ini, update ke MySQL 8.0.33, versi minor setelahnya, atau rilis terbaru.

Masalah kebocoran memori di MySQL 8.0

Bagian berikut membahas masalah kebocoran memori yang diketahui di MySQL 8.0 atau yang lebih baru. Masalah ini juga kemungkinan memengaruhi performa instance.

Kebocoran memori yang disebabkan oleh kueri rentang

Jika menggunakan pengoptimal rentang di instance dengan MySQL 8.0.16 hingga MySQL 8.0.28, konsumsi memori yang tinggi mungkin terjadi oleh file kode dan fungsi memory/sql/THD::main_mem_root. Hal ini dapat menyebabkan instance kehabisan memori (OOM).

Untuk mengetahui informasi selengkapnya, lihat MySQL Bug #105331.

Untuk mengatasi masalah ini, update ke MySQL 8.0.29, versi minor setelahnya, atau rilis terbaru.

Kebocoran memori yang terkait dengan prosedur tersimpan

Jika Anda menjalankan kueri dalam prosedur tersimpan di instance dengan MySQL 8.0.27 hingga 8.0.31, kueri tersebut dapat menggunakan memori dalam jumlah yang sangat besar di bawah file dan fungsi kode memory/sql/sp_head::execute_mem_root.

Untuk mengetahui informasi selengkapnya, lihat MySQL Bug #107327.

Untuk mengatasi masalah ini, update ke MySQL 8.0.32, versi minor apa pun setelahnya, atau rilis terbaru.

Kebocoran memori yang disebabkan oleh akses ke tampilan menggunakan SELECT

Jika Anda menggunakan kueri SELECT di MySQL 8.0.35 atau yang lebih lama dan aplikasi Anda menggunakan banyak panggilan tampilan, Anda mungkin mengalami kebocoran memori yang terlihat jelas.

Selain itu, jika tampilan DEFINER disetel ke root@'%' atau pengguna yang berasal dari peran cloudsqlsuperuser, Anda mungkin mengalami kebocoran memori. Hal ini karena peran cloudsqlsuperuser memiliki hak istimewa pencabutan sebagian.

Untuk mengetahui informasi selengkapnya, lihat Bug MySQL #103133.

Untuk mengatasi masalah ini, ikuti rekomendasi pemecahan masalah berikut:

  • Update ke MySQL 8.0.36, versi minor setelahnya, atau rilis terbaru.
  • Jika menggunakan MySQL 8.0.35 atau yang lebih lama, gunakan pengguna terpisah untuk tampilan DEFINER, khususnya pengguna yang tidak memiliki hak istimewa pencabutan sebagian. Jika Anda harus menggunakan pengguna root@'%' atau peran cloudsqlsuperuser, pastikan Anda hanya menggunakannya untuk proses administratif, bukan kueri aplikasi. Jika kebocoran memori berlanjut, Anda harus mengupgrade ke MySQL 8.0.36, versi minor setelahnya, atau rilis terbaru.

Masalah Replikasi

Bagian berikut membahas masalah umum terkait replikasi.

Masalah terkait replikasi paralel

Jika menggunakan replikasi paralel dalam replika multithread yang mengaktifkan komponen slave_preserve_commit_order, dan instance digunakan untuk workload tulis tinggi, operasi instance dapat dijeda tanpa batas waktu karena kebuntuan dan waktu jeda replikasi yang terus bertambah.

Masalah ini terlihat di MySQL 8.0.27 hingga MySQL 8.0.32.

Untuk mengetahui informasi selengkapnya, lihat Bug MySQL #95863 dan Bug MySQL #103636.

Untuk mengatasi masalah ini, ikuti rekomendasi pemecahan masalah berikut:

  • Update ke MySQL 8.0.33, versi minor setelahnya, atau rilis terbaru.
  • Nonaktifkan replikasi paralel untuk membantu memverifikasi penyebab masalah ini, lalu jadwalkan upgrade yang tepat. Meskipun menonaktifkan replikasi paralel dapat menyelesaikan masalah untuk sementara, hal ini tidak direkomendasikan sebagai solusi jangka panjang.

Masalah hak istimewa

Bagian berikut membahas masalah umum terkait hak istimewa.

Perubahan pada hak istimewa

MySQL telah mengubah sistem pengelolaan keamanan dan akun di MySQL 8.0.

Setelah mengupgrade ke MySQL 8.0, pengguna yang dibuat di MySQL 5.7 mungkin tidak memiliki hak istimewa dan akses yang sama dengan pengguna yang dibuat di MySQL 8.0. Akibatnya, pengguna yang dibuat di MySQL 5.7 mungkin menerima pesan error akses ditolak dalam skenario berikut:

  • Pengguna yang mengupgrade dari MySQL 5.7 mungkin tidak memiliki hak istimewa CREATE ROLE dan DROP ROLE karena hak istimewa tersebut tidak ada di MySQL 5.7.
  • Pengguna yang mengupgrade dari MySQL 5.7 mungkin tidak dapat menjalankan perintah KILL yang kini memerlukan hak istimewa CONNECTION_ADMIN agar dapat berfungsi di MySQL 8.0.

Untuk mengetahui informasi selengkapnya, Anda dapat memeriksa semua hak istimewa yang tersedia di MySQL 8.0.

Contoh pesan error terlihat mirip dengan yang berikut ini:

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

Anda tidak dapat menetapkan hak istimewa yang diperbarui ini secara langsung kepada pengguna yang sudah ada. Untuk mengatasi masalah ini, administrator dengan hak istimewa GRANT OPTION harus mereset hak istimewa pengguna setelah upgrade untuk menyelesaikan upgrade versi utama.

Untuk mengetahui informasi selengkapnya, lihat Mengupgrade versi utama database yang diterapkan.

Perubahan pada hak istimewa menyebabkan error Akses ditolak

Pengguna yang dibuat di MySQL 5.7 yang diupgrade ke MySQL 8.0 mungkin tidak dapat terhubung ke database karena masalah hak istimewa. Dalam kasus seperti itu, pengguna mungkin menerima pesan error berikut:

    Access denied for user 'USER_NAME'@'%' to database 'MY_DATABASE_NAME' ;
  

MySQL 8.0.16 memperkenalkan flag database partial_revokes dan mengaktifkannya secara default, sehingga memungkinkan pencabutan hak istimewa pengguna sebagian.

Jika pengguna yang dibuat di MySQL 5.7 ditentukan menggunakan karakter pengganti, maka pengguna tersebut mungkin tidak dapat terhubung ke database. Karakter pengganti tidak lagi didukung di MySQL 8.0.16 atau yang lebih baru. Artinya, MySQL tidak dapat menemukan kecocokan yang persis untuk database dan pengguna, yang dapat menyebabkan beberapa penetapan hak istimewa yang ada terlewat dalam upgrade.

Masalah ini memengaruhi MySQL 8.0.16 atau yang lebih baru.

Untuk mengetahui informasi selengkapnya, lihat Mengonfigurasi flag database dan Keamanan dan pengelolaan akun.

Untuk mengatasi masalah ini, administrator harus menetapkan izin secara manual kepada pengguna di MySQL 8.0.

Perubahan nilai flag antara MySQL 5.7 dan MySQL 8.0

Saat Anda mengupgrade dari MySQL 5.7 ke MySQL 8.0, beberapa nilai flag database mungkin berubah karena perubahan nilai default antar-versi. Perilaku ini dapat menyebabkan masalah performa.

Untuk mengetahui informasi selengkapnya, lihat Nilai default baru di MySQL 8.0.

Untuk mengatasi masalah ini, pastikan nilai flag database yang ditetapkan secara manual di MySQL 5.7 tetap diterapkan setelah upgrade ke MySQL 8.0 atau yang lebih baru. Sebaiknya jangan mengubah nilai default yang ditetapkan ke flag sistem.

Langkah berikutnya