
به اشتراک بگذارید
خطای Got a packet bigger than max_allowed_packet bytes یا همان ERROR 1153 یکی از خطاهای پرتکرار در MySQL/MariaDB است که معمولاً هنگام اجرای کوئریهای حجیم یا انتقال دادههای بزرگ رخ میدهد. این خطا بیانگر آن است که اندازه بسته دادهای که به سرور ارسال شده، از حد مجاز تعریفشده در متغیر
max_allowed_packet بیشتر است. در نتیجه، عملیات درج (Insert)، آپدیت، یا ایمپورت دیتابیس با شکست مواجه میشود.💡 در این مقاله، بهصورت گامبهگام یاد میگیرید:
- مفهوم دقیق این خطا چیست؟
- چگونه مقدار فعلی
max_allowed_packetرا بررسی کنید. - روشهای افزایش و تنظیم دائمی مقدار آن در سرور، کلاینت و کنترلپنلها.
- نکات بهینهسازی برای جلوگیری از وقوع مجدد این خطا.
آنچه در این مقاله میخوانید:
خطای max_allowed_packet چیست؟
این خطا زمانی رخ میدهد که اندازه بسته دادهای (Packet Size) که بین کلاینت و سرور رد و بدل میشود، از مقدار مجاز تنظیمشده در
max_allowed_packet تجاوز کند. این محدودیت برای جلوگیری از مصرف بیشازحد حافظه در سرور طراحی شده است.
سناریوهای رایج وقوع خطا
- هنگام Import یا Export دیتابیس حجیم در phpMyAdmin یا CLI.
- ذخیره فایلهای حجیم (مثل تصاویر یا PDF) در فیلدهای BLOB.
- بازگردانی (Restore) بکاپ دیتابیس.
- اجرای کوئریهای طولانی یا چندخطی در اسکریپتها.
مشاهده مقدار فعلی تنظیمات
در این مرحله هدف ما این است که مقدار فعلی پارامتر max_allowed_packet را در سرور MySQL یا MariaDB بررسی کنیم تا بدانیم آیا محدودیت اندازه بسته دادهها (Packet Size) باعث بروز خطا شده است یا خیر. این کار به شما کمک میکند قبل از اعمال هرگونه تغییر، مقدار فعلی را مشاهده و با مقدار پیشنهادی مقایسه کنید. برای انجام این بررسی بررسی مقدار فعلی:
SHOW VARIABLES LIKE 'max_allowed_packet'; خروجی مقدار فعلی را بر حسب بایت (Bytes) نمایش میدهد. مقدار پیشفرض در بسیاری از سرورها 4 مگابایت (4٬194٬304 بایت) است.
افزایش max_allowed_packet در MySQL/MariaDB
در این بخش قصد داریم نحوه افزایش مقدار max_allowed_packet را در پایگاه داده MySQL یا MariaDB بررسی کنیم. این کار زمانی لازم است که بخواهید دادههای حجیمتری مانند فایلهای بزرگ، بکاپهای دیتابیس یا کوئریهای طولانی را بدون خطا اجرا کنید. با افزایش این مقدار، ظرفیت سرور برای پردازش بستههای داده بیشتر میشود و از خطاهایی مانند ERROR 1153 یا «Got a packet bigger than max_allowed_packet bytes» جلوگیری خواهد شد. در ادامه روشهای موقت و دائمی افزایش این پارامتر را بهصورت گامبهگام آموزش میدهیم.
1- روش موقت افزایش max_allowed_packet (بدون نیاز به ریستارت)
اگر میخواهید سریعاً خطا را برطرف کنید بدون آنکه سرویس MySQL را متوقف یا ریستارت کنید، میتوانید مقدار متغیر max_allowed_packet را بهصورت موقت افزایش دهید. این روش مناسب زمانی است که بخواهید عملیات ایمپورت یا اجرای کوئریهای بزرگ را در همان لحظه انجام دهید. تغییر در این حالت تنها تا زمان ریستارت فعال میماند و پس از آن به مقدار قبلی بازمیگردد. برای افزایش مقدار بهصورت موقت:
SET GLOBAL max_allowed_packet = 67108864; ⚠️ نکته: این تغییر تا زمان ریستارت سرویس MySQL فعال میماند و پس از آن به مقدار قبلی بازمیگردد.
2- روش دائمی افزایش max_allowed_packet (ویرایش فایل my.cnf یا my.ini)
این روش برای زمانی کاربرد دارد که میخواهید تغییرات شما پس از هر بار ریستارت MySQL نیز باقی بماند. در این حالت با ویرایش فایل پیکربندی اصلی سرور، مقدار پارامتر max_allowed_packet بهصورت دائمی افزایش مییابد. این روش برای سرورهای اختصاصی یا VPS که کنترل کامل روی فایلهای تنظیمات دارید، بهترین گزینه است و تضمین میکند عملیات وارد کردن دادههای بزرگ، بکاپ یا کوئریهای حجیم بدون خطا انجام شود. برای تنظیم دائمی مقدار:
- فایل پیکربندی MySQL را باز کنید:
sudo nano /etc/mysql/my.cnf - در بخشهای
[mysqld]و[mysql]مقدار زیر را اضافه یا اصلاح کنید:
[mysqld]
max_allowed_packet = 64M
[mysql]
max_allowed_packet = 64M - سپس سرویس MySQL را ریستارت کنید:
sudo systemctl restart mysql ✅ پیشنهاد: مقدار پیشنهادی بین 64M تا 256M بسته به حجم دادهها.

تغییر مقدار از طریق phpMyAdmin
اگر به SSH یا فایل سرور دسترسی ندارید و همچنان با خطای max_allowed_packet یا همان Got a packet bigger than max_allowed_packet bytes مواجه میشوید، میتوانید مقدار این پارامتر را مستقیماً از طریق phpMyAdmin تغییر دهید. این روش مخصوص کاربرانی است که در محیطهای هاست اشتراکی فعالیت دارند و امکان ویرایش فایلهای سرور یا استفاده از SSH را ندارند. در این حالت با چند مرحله ساده میتوان مقدار مجاز بستههای داده را افزایش داد تا کوئریهای حجیم، بکاپها و ایمپورتهای سنگین بدون خطا انجام شوند:
- وارد phpMyAdmin شوید.
- در تب SQL دستور زیر را اجرا کنید:
SET GLOBAL max_allowed_packet = 67108864; - برای مشاهده مقدار جدید:
SHOW VARIABLES LIKE 'max_allowed_packet';
🧩 در برخی از هاستهای اشتراکی، این تنظیم ممکن است توسط مدیر سرور محدود شده باشد. در این صورت باید از پشتیبانی هاست بخواهید مقدار را افزایش دهد.
مدیریت آسان و پیشرفته در هاست سی پنل ایران و هاست سی پنل هلند وب داده
برای مشاهده پلنهای
هاست سی پنل وب داده
روی دکمه زیر کلیک کنید
هاست سی پنل وب داده
روی دکمه زیر کلیک کنید
تنظیم max_allowed_packet در سیستمعاملهای مختلف
در این بخش میخواهیم نحوه افزایش و تنظیم مقدار max_allowed_packet را در سیستمعاملهای مختلف از جمله لینوکس و ویندوز بررسی کنیم. بسته به محیط کاری شما (سرور اختصاصی، VPS یا لوکال XAMPP/WAMP)، مسیر فایلهای پیکربندی و روش اعمال تغییر متفاوت است. با دنبالکردن این راهنما، میتوانید مقدار این متغیر را در هر سیستمعاملی بهینه کنید تا از بروز خطای Got a packet bigger than max_allowed_packet bytes یا همان ERROR 1153 جلوگیری شود.
در لینوکس (Ubuntu/Debian)
فایل تنظیمات در مسیر زیر است:
/etc/mysql/mysql.conf.d/mysqld.cnf خط زیر را اضافه کنید:
max_allowed_packet = 128M سپس:
sudo systemctl restart mysql در ویندوز (XAMPP/WAMP)
- فایل
my.iniرا در مسیر نصب MySQL بیابید. - مقدار زیر را در بخش
[mysqld]اضافه کنید:max_allowed_packet=128M - MySQL را از کنترلپنل XAMPP/WAMP ریستارت کنید.
💡 راهحلهای بهینهسازی برای توسعهدهندگان
در این بخش، هدف اصلی این است که توسعهدهندگان یاد بگیرند چگونه با بهینهسازی کوئریها و مدیریت درست دادهها، از بروز مجدد خطای max_allowed_packet جلوگیری کنند. این کار باعث میشود حجم انتقال دادهها کاهش یافته، فشار روی حافظه و پردازنده سرور کمتر شود و عملکرد کلی پایگاه داده بهبود یابد. با رعایت این اصول میتوانید از خطاهایی نظیر Got a packet bigger than max_allowed_packet bytes و ERROR 1153 پیشگیری کنید و سرعت اجرای برنامهها و پایداری ارتباط با دیتابیس را افزایش دهید. در ادامه چند راهکار عملی برای این منظور معرفی میشود.
1- استفاده از Batch Query بهجای کوئری حجیم
بهجای ارسال یک کوئری عظیم برای درج چندین رکورد، از روش Batch Insert استفاده کنید:
INSERT INTO users (name, email) VALUES ('Ali', '[email protected]'), ('Sara', '[email protected]'); 2- ذخیره فایل در فایلسیستم، نه در دیتابیس
اگر حجم فایلها زیاد است، بهجای ذخیره در ستون BLOB:
- فایل را در مسیر
/uploads/ذخیره کنید. - فقط مسیر (Path) را در دیتابیس ثبت کنید.
3- فشردهسازی دادهها
پیش از ارسال داده حجیم از طریق PHP یا Node.js، داده را با
gzip یا zlib فشرده کنید تا اندازه بسته کاهش یابد.4- بررسی محدودیتهای سمت کلاینت
در فایل تنظیمات کلاینت (مثل
my.cnf بخش [client]) نیز مقدار max_allowed_packet باید برابر با مقدار سرور باشد.
🔍 بررسی همگامسازی مقادیر در سطوح مختلف
در این بخش یاد میگیرید چگونه اطمینان حاصل کنید که مقدار max_allowed_packet در سطح سرور (GLOBAL) و نشست فعلی (SESSION) با هم هماهنگ هستند. گاهی اوقات این دو مقدار متفاوتاند و همین اختلاف باعث بروز خطای Got a packet bigger than max_allowed_packet bytes میشود. بررسی و همگامسازی این مقادیر به شما کمک میکند تا مطمئن شوید تغییرات واقعاً اعمال شده و در تمام اتصالات دیتابیس فعال است. این گام برای ثبات عملکرد MySQL/MariaDB و جلوگیری از خطای ERROR 1153 بسیار ضروری است.
SHOW VARIABLES LIKE 'max_allowed_packet';
SHOW SESSION VARIABLES LIKE 'max_allowed_packet'; هر دو باید مقدار یکسانی داشته باشند. در غیر این صورت، خطای ERROR 1153 ممکن است مجدداً ظاهر شود.
نتیجهگیری:خطا Got a packet bigger than
در پایان میتوان گفت خطای Got a packet bigger than max_allowed_packet bytes یکی از مشکلات رایج در مدیریت دیتابیس است که بهراحتی قابل رفع است، مشروط بر اینکه هم سرور و هم کلاینت مقدار یکسانی از
max_allowed_packet داشته باشند. با افزایش صحیح این متغیر در فایل پیکربندی MySQL/MariaDB، و رعایت اصول بهینهسازی در کدنویسی، میتوانید از بروز مجدد خطا جلوگیری کنید.سوالات متداول از خطای max_allowed_packet
1- خطای Got a packet bigger than max_allowed_packet bytes یعنی چه؟
یعنی حجم دادهای که در حال ارسال به سرور است، بیشتر از سقف مجاز تعریفشده در MySQL است.




