Kesalahan server MySQL telah hilang, yang berarti bahwa server MySQL (mysqld) kehabisan waktu dan menutup koneksi. Secara default, MySQL akan menutup koneksi setelah delapan jam (28800 detik) jika tidak terjadi apa-apa. Namun, dalam beberapa kasus, host web, DBA, atau pengembang aplikasi Anda mungkin telah menurunkan setelan waktu tunggu ini, seperti yang dibahas di bawah
Server MySQL telah hilang, bisa menjadi kesalahan yang membuat frustrasi untuk dipecahkan. Ini sebagian karena, untuk mengatasi kesalahan ini, terkadang solusinya melibatkan banyak lapisan, aplikasi, atau perubahan konfigurasi layanan. Artikel ini mencakup solusi yang pernah saya lihat untuk kesalahan umum server MySQL ini. Jika Anda menemukan solusi yang tidak tercantum atau ditautkan di halaman ini, kirimkan saya catatan atau tinggalkan komentar
Server MySQL telah menghilangkan contoh log kesalahan
Perlu diingat bahwa kesalahan ini dapat dicatat dalam beberapa cara, seperti yang tercantum di bawah ini. Selain itu, terkadang, kesalahan tersebut hanya merupakan indikasi dari masalah mendasar yang lebih dalam. Berarti kesalahan bisa disebabkan oleh masalah atau bug pada aplikasi penghubung atau layanan jarak jauh Anda. Dalam hal ini, Anda perlu memeriksa SEMUA log kesalahan terkait dengan stempel waktu yang sama untuk menentukan apakah ada masalah lain yang dapat disalahkan. Solusi Pemantauan Kinerja Aplikasi dan alat PHP Stack trace dapat membantu. Dengan mengingat hal ini, berikut adalah contoh log kesalahan dari kesalahan server MySQL telah hilang
General error: 2006 MySQL server has gone awayError Code: 2013. Lost connection to MySQL server during queryWarning: Error while sending QUERY packetPDOException: SQLSTATE[HY000]: General error: 2006 MySQL server has gone away
Disponsori. Datadog – Lihat metrik kueri dan jelaskan rencana dari semua database Anda di satu tempat
Datadog adalah platform pemantauan, analitik, dan keamanan terpadu yang menawarkan pemantauan end-to-end untuk semua database Anda, termasuk MySQL, PostgreSQL, dan lainnya. Dengan cepat menunjukkan kueri yang mahal dan lambat, serta memecahkan masalah performa lebih cepat dengan metrik dan pola database utama di satu tempat. Telusuri, bandingkan, dan filter kueri Anda dengan mudah pada rencana eksekusi untuk mengidentifikasi area dengan cepat untuk peningkatan kinerja dan biaya. Manfaatkan integrasi kami untuk MySQL, PostgreSQL, SQL Server, dan lainnya untuk memvisualisasikan metrik kinerja sistem utama pada dasbor siap pakai bersama metrik kueri dan tingkat host. Datadog Database Monitoring terintegrasi erat dengan platform Datadog lainnya;
Biaya. Paket gratis, atau mulai dari $70
MySQL wait_timeout
Alasan kesalahan server MySQL telah hilang sering kali karena waktu tunggu MySQL telah terlampaui. MySQL wait_timeout adalah jumlah detik server menunggu aktivitas pada koneksi non-interaktif sebelum menutupnya. Anda harus memastikan wait_timeout tidak disetel terlalu rendah. Default untuk MySQL adalah 28800 detik. Seringkali, itu diturunkan secara sewenang-wenang. Artinya, semakin rendah Anda dapat menyetel wait_timeout tanpa memengaruhi koneksi database, bisa menjadi pertanda baik efisiensi database MySQL. Juga, periksa variabelnya. , dan. Sesuaikan atau tambahkan baris berikut di my. cnf untuk memenuhi kebutuhan Anda
wait_timeout=90 net_read_timeout=90 net_write_timeout=90 interactive_timeout=300 connect_timeout=90_
Batas waktu koneksi MySQL dalam konfigurasi PHP
Coba lihat di php kamu. ini file konfigurasi. Anda akan menemukan opsi konfigurasi MySQL. Pastikan file mysql. pengaturan connect_timeout tidak disetel lebih rendah dari wait_timeout MySQL, yang dibahas di atas. Opsi PHP mysql. connect_timeout tidak hanya digunakan untuk waktu tunggu koneksi. Itu juga saat menunggu respon pertama dari server MySQL. Coba tingkatkan mysql. connect_timeout untuk mencocokkan atau melampaui MySQL wait_timeout Anda dan pastikan mysql. allow_persistent aktif (default = diaktifkan)
mysql.connect_timeout=90 mysql.allow_persistent=1PENTING. Baca terlebih dahulu tentang PHP Persistent Database Connections untuk memahami manfaat dan peringatannya
Juga, sesuaikan default_socket_timeout PHP. Misalnya, skrip PHP dapat menjalankan kueri yang lambat. Membuat menunggu yang menggunakan default_socket_timeout. Akhirnya, itu berhenti dengan kesalahan "server MySQL telah hilang". Sebelum Anda mengirim surat kebencian,. Berikut kutipannya
“PHP, secara default, menyetel waktu tunggu baca selama 60 detik untuk streaming. Ini diatur melalui php. ini, default_socket_timeout. Default ini berlaku untuk semua streaming yang tidak menetapkan nilai waktu tunggu lainnya. mysqlnd tidak menetapkan nilai lain dan oleh karena itu koneksi kueri yang berjalan lama dapat diputuskan setelah default_socket_timeout detik yang mengakibatkan pesan kesalahan 2006 – Server MySQL telah hilang . ”
default_socket_timeout=90_Agar lengkap, sesuaikan juga max_execution_time dan max_input_time yang masih ada di php. ini, jika perlu. Jika waktu eksekusi PHP lebih lama dari max_execution_time, maka server MySQL mungkin terputus
max_execution_time = 90 max_input_time = 90
MySQL max_allowed_packet
max_allowed_packet adalah ukuran maksimum dari satu paket. Ukuran default 4MB membantu server MySQL menangkap paket besar (mungkin salah). Pada MySQL 8, standarnya telah ditingkatkan menjadi 16MB. Jika mysqld menerima paket yang terlalu besar, diasumsikan ada sesuatu yang salah dan menutup koneksi. Untuk memperbaikinya, Anda harus meningkatkan max_allowed_packet di my. cnf, lalu restart MySQL. Maksimum untuk setelan ini adalah 1 GB. Sebagai contoh
max_allowed_packet = 512M_
MySQL innodb_log_file_size
Anda mungkin perlu meningkatkan variabel innodb_log_file_size MySQL di my. konfigurasi cnf. Ukuran innodb_log_file_size MySQL harus 25% dari ukuran innodb_buffer_pool_size (jika memungkinkan, tidak kurang dari 20%). Ingatlah bahwa semakin besar nilai ini, semakin lama waktu yang dibutuhkan untuk pulih dari kerusakan database. (Sumber. Penasihat Phpmyadmin)
Ini berarti misalnya. jika ukuran kumpulan buffer Anda disetel ke innodb_buffer_pool_size=16G dan setelan Anda tetap disetel ke default yang disarankan sebanyak 2 file (innodb_log_files_in_group=2), maka Anda harus disetel ke 2G. Tindakan ini akan membuat dua (2) file log masing-masing berukuran 2 GB, yang setara dengan 25% dari innodb_buffer_pool_size=16G
PERINGATAN. Anda harus menghentikan server MySQL untuk mengubah innodb_log_file_size atau innodb_log_files_in_group. Jika tidak, Anda berisiko malapetaka. (Membaca. Instruksi MySQL Log Redo. )
Penyebab lain dari server MySQL telah hilang
Koneksi jarak jauh MySQL
Ingat sebelumnya saya menyebutkan bahwa kesalahan, terkadang, hanya merupakan indikasi dari masalah mendasar yang lebih dalam. Misalnya, koneksi jarak jauh MySQL ke. Menggunakan plugin pemrosesan pembayaran pihak ketiga untuk osCommerce, Magento, dll
Kumpulan karakter dan susunan basis data MySQL
Mengubah charset database default ke latin1 dan collation default ke latin1_general_ci sepertinya sudah
Melebihi pengaturan max_connections MySQL
Max_connections menetapkan jumlah maksimum koneksi klien simultan yang diizinkan. Hati-hati dengan pengaturan ini. Habisnya memori dan sumber daya lainnya dapat terjadi jika disetel terlalu besar dan overhead penjadwalan juga meningkat. Sebagai panduan, atur max_connections kira-kira dua kali lipat jumlah koneksi klien simultan maksimum sebelumnya. e. g. , jika setelah satu bulan waktu aktif, koneksi klien simultan maksimum adalah 114, maka setel ke max_connections=250. Sebelum Anda tergila-gila dengan pengaturan ini, silakan baca. Bagaimana MySQL Menangani Koneksi Klien
Masih belum terselesaikan?
Oracle telah menyusun halaman swadaya yang bagus untuk server MySQL telah menghilangkan kesalahan. Di halaman itu, mereka juga menyarankan agar Anda memastikan MySQL tidak berhenti/memulai ulang selama kueri. Kutipan