Halaman ini menjelaskan masalah dan ketidakcocokan umum yang mungkin Anda temui 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 secara langsung. Untuk mengetahui informasi selengkapnya tentang log error, lihat dan Melihat log error.
Masalah performa
Bagian berikut membahas masalah performa umum.
Masalah dengan 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 Bug MySQL #99593.
Untuk mengatasi masalah ini, ikuti rekomendasi pemecahan masalah berikut:
- Update ke MySQL 8.0.21, versi minor apa pun setelahnya, atau rilis terbaru.
- Jika menggunakan MySQL 8.0.18 hingga MySQL 8.0.20, update
nilai untuk flag database
internal_tmp_mem_storage_enginekememory:SET SESSION internal_tmp_mem_storage_engine='memory' ;
Masalah dengan 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 mungkin terjadi jika kueri menggunakan TempTable
mesin.
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 apa pun setelahnya, atau rilis terbaru.
- Jika menggunakan MySQL 8.0.36 atau yang lebih lama, update flag database
internal_tmp_mem_storage_engineuntuk 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 innodb_log_writer_threads
flag 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 dengan JOINS
Jika menggunakan JOIN kueri 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 apa pun setelahnya, atau rilis terbaru.
Masalah dengan 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, rencana 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 apa pun setelahnya, atau rilis terbaru.
Masalah kebocoran memori di MySQL 8.0
Bagian berikut membahas masalah kebocoran memori umum di MySQL 8.0 atau yang lebih baru. Masalah ini juga kemungkinan akan 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 Bug MySQL #105331.
Untuk mengatasi masalah ini, update ke MySQL 8.0.29, versi minor apa pun 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 mungkin menggunakan memori yang sangat tinggi di bawah file kode dan fungsi memory/sql/sp_head::execute_mem_root.
Untuk mengetahui informasi selengkapnya, lihat Bug MySQL #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.
Selain itu, jika tampilan DEFINER ditetapkan 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 apa pun 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 penggunaroot@'%'atau perancloudsqlsuperuser, pastikan Anda hanya menggunakannya untuk proses administratif, bukan kueri aplikasi. Jika kebocoran memori berlanjut, Anda harus mengupgrade ke MySQL 8.0.36, versi minor apa pun setelahnya, atau rilis terbaru.
Masalah Replikasi
Bagian berikut membahas masalah umum terkait replikasi.
Masalah dengan replikasi paralel
Jika menggunakan replikasi paralel di replika multithreaded yang memiliki komponen slave_preserve_commit_order yang diaktifkan, dan instance digunakan untuk workload tulis tinggi, operasi instance mungkin akan dijeda tanpa batas waktu karena deadlock 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 apa pun setelahnya, atau rilis terbaru.
- Nonaktifkan replikasi paralel untuk membantu memverifikasi penyebab masalah ini, lalu jadwalkan upgrade yang tepat. Meskipun menonaktifkan replikasi paralel dapat mengatasi masalah ini untuk sementara, tindakan 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 diupgrade dari MySQL 5.7 mungkin tidak memiliki
CREATE ROLEdanDROP ROLEhak istimewa karena hak istimewa tersebut tidak ada di MySQL 5.7. - Pengguna yang diupgrade dari MySQL 5.7 mungkin tidak dapat menjalankan perintah
KILL, yang kini memerlukan hak istimewaCONNECTION_ADMINagar 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 berikut ini:
ERROR 1227 (42000): Access denied; you need (at least one of) the GRANT OPTION privilege(s) for this operation
Anda tidak dapat langsung menetapkan salah satu hak istimewa yang diupdate ini kepada pengguna yang 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 secara langsung.
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 tersebut, 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 sebagian hak istimewa pengguna.
Jika pengguna yang dibuat di MySQL 5.7 ditentukan menggunakan karakter pengganti, 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 tepat untuk database dan pengguna, yang mungkin menyebabkan beberapa penetapan hak istimewa yang ada terlewatkan dalam upgrade.
Masalah ini memengaruhi MySQL 8.0.16 atau yang lebih baru.
Untuk mengetahui informasi selengkapnya, lihat Mengonfigurasi flag database dan Pengelolaan keamanan dan 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 diubah karena perubahan nilai default antarversi. 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 biarkan nilai default yang ditetapkan ke flag sistem.