Kesalahan umum: 2006 server MySQL telah hilang [ditutup]

8

Inilah kesalahan yang tiba-tiba saya dapatkan.

Additional uncaught exception thrown while handling exception.

Original
PDOException: SQLSTATE[70100]: Unknown error: 1317 Query execution was interrupted...my query

Additional
PDOException: SQLSTATE[HY000]: General error: 2006 MySQL server has gone away...my query

Setelah melakukan riset, itu terdengar seperti modul khusus, yang saya buat, sedang mencoba kueri yang terlalu besar. Solusi yang tampaknya berhasil bagi banyak orang adalah ini:

  1. Buka my.ini
  2. Ubah "max_allowed_packet" dari "1m" menjadi "16m" (atau lebih besar)
  3. Simpan my.ini dan mulai ulang MySQL

Namun, saya berada di server bersama, jadi saya tidak dapat mengedit my.ini, dan meskipun penyedia saya telah mengkonfirmasi kepada saya bahwa nilainya diatur ke 1M, mereka tidak akan meningkatkannya.

Saya juga mencoba menambahkan ini: ini_set('mysqli.reconnect', 'on');ke settings.php. Itu tidak menyelesaikan masalah.

Adakah yang tahu solusi lain, atau mencari solusi?

Terima kasih.

dbj44
sumber

Jawaban:

8

Perusahaan hosting bersama tidak memberikan hak istimewa SUPER . Jika sudah, Anda dapat dengan mudah mengatur max_allowed_packet ke 512M dengan hanya menjalankan ini:

mysql> SET GLOBAL max_allowed_packet = 1024 * 1024 * 512;

Tidak diperlukan restart. Kemudian, semua koneksi yang masuk setelahnya dapat memiliki paket 512M .

Anda tidak dapat melakukan ini:

mysql> SET max_allowed_packet = 1024 * 1024 * 512;

karena kamu mengerti

ERROR 1621 (HY000): SESSION variable 'max_allowed_packet' is read-only. Use SET GLOBAL to assign the value

Satu-satunya alternatif yang dapat saya pikirkan adalah beralih ke Amazon EC2 dan menginstal MySQL di sana. Dengan begitu, Anda dapat memiliki kebebasan untuk mengedit my.cnf / my.ini dan memiliki hak istimewa SUPER .

RolandoMySQLDBA
sumber
0

Saya meminta penyedia saya untuk meningkatkan nilainya, tetapi mereka tidak mau. Saya bisa mengerti mengapa, mereka adalah bisnis dan mereka ingin saya membayar 29,99 per bulan untuk server khusus, daripada 4,99 untuk server bersama.

Namun, ada solusinya: mengidentifikasi kueri yang terlalu besar dan memecahnya menjadi dua bagian atau lebih. Saya membagi kueri masalah saya menjadi setengah: masalah terpecahkan. Tidak efisien - ya - tetapi lebih baik daripada situs saya tidak berfungsi sama sekali atau harus membayar ekstra.

dbj44
sumber
Harap diingat apa yang saya katakan tentang Paket MySQL ( superuser.com/a/273833/76764 ) Para tersangka yang biasa dapat menyumbat paket MySQL adalah bidang TEKS / BLOB besar. Jadi Anda mungkin ingin berpikir tentang mengompresi TEXT/BLOB fieldskode rigging jerry Anda.
RolandoMySQLDBA
Ya, mungkin itu bisa menjadi masalah, tetapi meskipun permintaan SELECT saya relatif kompleks, hasil yang dikembalikan hanya beberapa ratus karakter teks.
dbj44
2
Anda mungkin mulai mengalami masalah dengan tabel cache melakukan INSERT yang cukup besar. Solusi Anda tidak akan berfungsi di sini, atau tempat lain di mana Drupal melakukan kueri.
mpdonadio
Ini bukan INSERT, hanya permintaan SELECT dengan sekitar 25 bergabung. Semua dilakukan dengan pembuat kueri. Apakah Anda tahu mengapa ini menyebabkan kesalahan seperti itu? Melakukan INSERT melalui form submit handler bukan masalah.
dbj44
0

Masalahnya adalah karena max_allowed_packet, Anda mengaturnya dengan nilai yang lebih besar.

Cara memperbaiki masalah ini (jika Anda berada di windows dan menggunakan xamp lain temukan file my.ini)
Buka xampp \ mysql \ bin
Buka my.ini
Ubah "max_allowed_packet" dari "1m" menjadi "16m"
Simpan my.ini
Sekarang mulai ulang MySql melalui panel kontrol XAMPP.

Temukan solusi ini di sini. http://minorpoint.blogspot.com/2007/09/mysql-server-has-gone-away.html

Yusef
sumber