"Enter"a basıp içeriğe geçin

MySQL: ERROR 1153 (08S01): Got a packet bigger than ‘max_allowed_packet’ bytes Hatası ve Çözümü

Epey büyük bir sql dump dosyasını MySQL’e aktarırken şu hata ile karşılaştım:

$mysql -uroot -p veritabani_adi < dump.sql
ERROR 1153 (08S01) at line 9424: Got a packet bigger than 'max_allowed_packet' bytes

Hatanın çözümü ise Mysql’in istemci-sunucu haberleşmesinin iyi anlaşılmasından geçiyor. MySQL ağ haberleşmesi, sorguların her zaman makul derecede kısa olduğu ve bu nedenle MySQL terminolojisinde paket olarak adlandırılan bir yığın halinde sunucuya gönderilebileceği ve işlenebileceği varsayımına göre düzenlenmiştir. Sunucu, kendisine gelen paketleri RAM’de geçici bir bellek alanında tutar ve burada gelen paketlerin işlenmeye uygun bir paket olup olmadığına bakar. Bu bellek alanının gereksiz yere bu paketlerle dolmaması için varsayılan olarak izin verilen paket boyutu ( max_allowed_packet) asgari düzeyde tutulur ancak büyük paketler için bunun değiştirilmesi gerekir.

Varsayılan olarak, max_allowed_packet parametresi net_buffer_length değeri ile başlatılır ve büyük BLOB alanları, büyük veritabanı dump veya restore gibi uzun bir dize ile uğraşırken, max_allowed_packet boyutunu da artırmak gerekir. Bu değişiklik istemci veya sunucu tarafında yapılabilir.

İstemci Tarafında Paket Boyutu Ayarlama

İstemci tarafında mysql komutunu çalıştırırken izin verilen maksimum paket boyutunu parametre vererek (–max_allowed_packet) değiştirebiliriz. Bu geçici bir çözümdür ve diğer bağlantıları ve oturumları etkilemez.

$ mysql --max_allowed_packet=100M veritabani_adi < dump.sql

Böylece, istemcinin sunucuya göndereceği azami paket boyutunu artırabiliriz.

Sunucu Tarafında Paket Boyutu Ayarlama

Sunucu tarafından izin verilen azami paket boyutunu ayarlamanın geçici ve kalıcı olmak üzere iki yolu vardır.

Geçici Çözüm

Çalışan bir MySQL sunucusu için izin verilen azami paket sayısı parametresini geçici olarak değiştirmek mümkündür. Bunun için MySQL sunucusunda root kullanıcı olarak oturum açıp şu komutları çalıştırmamız gerekiyor:

$ mysql -uroot
mysql> SET GLOBAL net_buffer_length=1000000;
mysql> SET GLOBAL max_allowed_packet=1000000000;

Bu komutlar, izin verilen maksimum paket boyutunu 100000000 Bayt veya 100MB olarak ayarlar.

MySQL sunucusunu yeniden başlatırsanız, ayarlar varsayılanlarına veya my.cnf yapılandırma dosyasında yapılandırıldığı haline geri döndürülür.

Kalıcı Çözüm

MySQL sunucusu her yeniden başladığında izin verilen maksimum paket boyutunu istenen değerlere ayarlamak için my.cnf yapılandırma dosyasında gerekli güncellemenin yapılması gerekir.

my.cnf dosyasının Debian/Ubuntu‘da, “/etc/mysql/my.cnf”, Fedora/RedHat/CentOS‘ta, “/etc/my.cnf” konumunda olması gerekiyor.

Herhangi bir metin editörü ile my.cnf dosyasını açın ve max_allowed_packet satırını bulun. Yoksa elle de ekleyebilirsiniz.

[mysqld]
# ...
# Diğer yapılandırma parametreleri burada
# ...
max_allowed_packet      = 100M

Yaptığımız yapılandırma değişikliklerinden sonra, ayarları uygulamak için MySQL sunucusunu yeniden başlatmamız gerekiyor.

Debian/Ubuntu için

service mysql restart

veya Fedora/RedHat/CentOS’ta

service mysqld restart

komutunu girerek MySQL sunucusunu yeniden başlatabilirsiniz.

Eğer hatayı almaya devam ederseniz iki veya dört katı, veya daha büyük paket boyutlarını da deneyebilirsiniz.

Kaynaklar

  1. MySQL Error 1153 – Got a packet bigger than ‘max_allowed_packet’ bytes – https://stackoverflow.com/questions/93128/mysql-error-1153-got-a-packet-bigger-than-max-allowed-packet-bytes
  2. [solved] MySQL – Got a packet bigger than ‘max_allowed_packet’ bytes – https://www.howtoforge.com/mysql-got-a-package-bigger-than-max_allowed_packet-bytes
  3. MySQL: ERROR 1153 (08S01): Got a packet bigger than ‘max_allowed_packet’ bytes – https://ma.ttias.be/mysql-error-1153-08s01-got-a-packet-bigger-than-max-allowed-packet-bytes/
  4. MySQL: Error 1153 – Got a packet bigger than ‘max_allowed_packet’ bytes – https://www.dbrnd.com/2016/02/mysql-error-1153-got-a-packet-bigger-than-max_allowed_packet-bytes/

İlk Yorumu Siz Yapın

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir