شرح - تحميل mysql




كيفية تغيير حجم max_allowed_packet (8)

أواجه مشكلة في حقول BLOB في قاعدة بيانات MySQL - عند تحميل ملفات أكبر من 1MB تقريبًا ، أحصل على خطأ Packets larger than max_allowed_packet are not allowed.

هذا ما جربته:

في MySQL Query Browser قمت بتشغيل show variables like 'max_allowed_packet' والتي أعطتني 1048576.

ثم أقوم بتنفيذ set global max_allowed_packet=33554432 الاستعلام set global max_allowed_packet=33554432 متبوعًا show variables like 'max_allowed_packet' - يعطيني 33554432 كما هو متوقع.

ولكن عندما أعد تشغيل خادم MySQL ، فإنه يعود بطريقة سحرية إلى الرقم 1048576. ما الذي أفعله خطأ هنا؟

سؤال المكافأة ، هل من الممكن لضغط حقل BLOB؟


أعتقد أن البعض يريد أيضًا معرفة كيفية العثور على ملف my.ini على جهاز الكمبيوتر الخاص بك. بالنسبة لمستخدمي ويندوز ، أعتقد أن أفضل طريقة هي كما يلي:

  1. Win + R (اختصار لـ "تشغيل") ، اكتب services.msc ، أدخل
  2. يمكنك العثور على إدخال مثل "MySQL56" ، انقر بزر الماوس الأيمن فوقه ، حدد الخصائص
  3. يمكن أن تشاهد مثل "D: / ملفات البرنامج / MySQL / MySQL Server 5.6 / bin \ mysqld" --defaults-file = "D: \ ProgramData \ MySQL \ MySQL Server 5.6 \ my.ini" MySQL56

حصلت على هذه الإجابة من http://bugs.mysql.com/bug.php?id=68516


إذا كنت تريد تحميل صورة أو بيانات كبيرة الحجم في قاعدة البيانات. ما عليك سوى تغيير نوع البيانات إلى 'BIG BLOB' .


بعد كل التعليمات ، هذا ما قمت به وعملت:

mysql> SELECT CONNECTION_ID();//This is my ID for this session.
+-----------------+
| CONNECTION_ID() |
+-----------------+
|              20 |
+-----------------+
1 row in set (0.00 sec)

mysql> select @max_allowed_packet //Mysql do not found @max_allowed_packet
+---------------------+
| @max_allowed_packet |
+---------------------+
| NULL                |
+---------------------+
1 row in set (0.00 sec)

mysql> Select @@global.max_allowed_packet; //That is better... I have max_allowed_packet=32M inside my.ini
+-----------------------------+
| @@global.max_allowed_packet |
+-----------------------------+
|                    33554432 |
+-----------------------------+
1 row in set (0.00 sec)

mysql> **SET GLOBAL max_allowed_packet=1073741824**; //Now I'm changing the value.
Query OK, 0 rows affected (0.00 sec)

mysql> select @max_allowed_packet; //Mysql not found @max_allowed_packet
+---------------------+
| @max_allowed_packet |
+---------------------+
| NULL                |
+---------------------+
1 row in set (0.00 sec)

mysql> Select @@global.max_allowed_packet;//The new value. And I still have max_allowed_packet=32M inisde my.ini
+-----------------------------+
| @@global.max_allowed_packet |
+-----------------------------+
|                  1073741824 |
+-----------------------------+
1 row in set (0.00 sec)

لذلك ، كما نرى ، تم تغيير max_allowed_packet خارج my.ini.

دعنا نترك الجلسة ونراجعها مرة أخرى:

mysql> exit
Bye

C:\Windows\System32>mysql -uroot -pPassword
Warning: Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 21
Server version: 5.6.26-log MySQL Community Server (GPL)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SELECT CONNECTION_ID();//This is my ID for this session.
+-----------------+
| CONNECTION_ID() |
+-----------------+
|              21 |
+-----------------+
1 row in set (0.00 sec)

mysql> Select @@global.max_allowed_packet;//The new value still here and And I still have max_allowed_packet=32M inisde my.ini
+-----------------------------+
| @@global.max_allowed_packet |
+-----------------------------+
|                  1073741824 |
+-----------------------------+
1 row in set (0.00 sec)

Now I will stop the server
2016-02-03 10:28:30 - Server is stopped

mysql> SELECT CONNECTION_ID();
ERROR 2013 (HY000): Lost connection to MySQL server during query


Now I will start the server
2016-02-03 10:31:54 - Server is running


C:\Windows\System32>mysql -uroot -pPassword
Warning: Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 5.6.26-log MySQL Community Server (GPL)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SELECT CONNECTION_ID();
+-----------------+
| CONNECTION_ID() |
+-----------------+
|               9 |
+-----------------+
1 row in set (0.00 sec)

mysql> Select @@global.max_allowed_packet;//The previous new value has gone. Now I see what I have inside my.ini again.
+-----------------------------+
| @@global.max_allowed_packet |
+-----------------------------+
|                    33554432 |
+-----------------------------+
1 row in set (0.00 sec)

الخلاصة ، بعد SET GLOBAL max_allowed_packet = 1073741824 ، سيكون لدى الخادم max_allowed_packet الجديد حتى يتم إعادة تشغيله ، كما ذكر شخص ما في السابق.


في حالة الحصول على هذا الخطأ أثناء إجراء نسخ احتياطي ، يمكن تعيين max_allowed_packet في my.cnf بشكل خاص لـ mysqldump .

[mysqldump]
max_allowed_packet=512M

استمررت في الحصول على هذا الخطأ أثناء أداء mysqldump ولم أفهمه لأنني وضعت هذه المجموعة في my.cnf ضمن المقطع [mysqld] . بمجرد أن أحسب يمكنني تعيينه لـ [mysqldump] وقمت بتعيين القيمة ، اكتملت النسخ الاحتياطية بدون مشكلة.


لأي شخص يشغل MySQL على خدمة Amazon RDS ، فإن هذا التغيير يتم عن طريق مجموعات المعلمات . تحتاج إلى إنشاء PG جديد أو استخدام واحد موجود (بخلاف الافتراضي ، وهو للقراءة فقط).

يجب أن تبحث عن المعلمة max_allowed_packet ، وتغيير قيمتها ، ثم اضغط على حفظ.

مرة أخرى في مثيل MySQL الخاص بك ، إذا قمت بإنشاء PG جديد ، يجب إرفاق PG إلى المثيل الخاص بك (قد تحتاج إلى إعادة تشغيل). إذا قمت بتغيير PG الذي تم إرفاقه بالفعل بمثيلك ، فسيتم تطبيق التغييرات دون إعادة التشغيل ، إلى جميع مثيلاتها التي تحتوي على PG المرفقة.


لاحظ الكثير من المجيبين هذه القضية وقدموا الحل بالفعل.

أريد فقط اقتراح حل آخر ، وهو تغيير قيمة المتغير Glogal من داخل أداة Mysql Workbench . هذا هو ofcourse إذا كنت تستخدم Workbench التشغيل محليا على الخادم (أو عبر اتصال SSH)

ما عليك سوى الاتصال بمثيلك والانتقال إلى القائمة:

الخادم -> خيارات الملف -> الشبكات -> max_allowed_packed

قمت بتعيين القيمة المطلوبة ومن ثم تحتاج إلى إعادة تشغيل خدمة MySql .


يمكن تعيين متغير max_allowed_packet على مستوى العالم عن طريق تشغيل استعلام.

ومع ذلك ، إذا لم تقم بتغييره في ملف my.ini (كما اقترح dragon112) ، ستتم إعادة تعيين القيمة عند إعادة تشغيل الخادم ، حتى إذا قمت بتعيينه على مستوى العالم.

لتغيير الإعداد للجميع حتى تتم إعادة تشغيل الخادم:

SET GLOBAL max_allowed_packet=1073741824;

بالنسبة لأولئك تشغيل خادم mysql wamp

Wamp tray Icon -> MySql -> my.ini

[wampmysqld]
port        = 3306
socket      = /tmp/mysql.sock
key_buffer_size = 16M
max_allowed_packet = 16M        // --> changing this wont solve
sort_buffer_size = 512K

انتقل لأسفل حتى النهاية حتى تجد

[mysqld]
port=3306
explicit_defaults_for_timestamp = TRUE

أضف خط packet_size بينهما

[mysqld]
port=3306
max_allowed_packet = 16M
explicit_defaults_for_timestamp = TRUE

تحقق مما إذا كان يعمل مع هذا الاستعلام

Select @@global.max_allowed_packet;




mysql