কীভাবে সর্বোচ্চ_গোলিত_প্যাক্টের আকার পরিবর্তন করবেন


317

আমার মাইএসএসকিউএল ডাটাবেজে বিএলওবি ক্ষেত্রগুলির সাথে আমার একটি সমস্যা হচ্ছে - প্রায় 1 এমবি এর চেয়ে বড় ফাইল আপলোড করার সময় আমি একটি ত্রুটি পাই Packets larger than max_allowed_packet are not allowed.

এখানে আমি চেষ্টা করেছি:

মাইএসকিউএল ক্যোয়ারী ব্রাউজারে আমি একটি show variables like 'max_allowed_packet'চালিয়েছি যা আমাকে 1048576 দিয়েছে।

তারপরে আমি কোয়েরি কার্যকর করি set global max_allowed_packet=33554432 দ্বারা অনুসরণshow variables like 'max_allowed_packet' - এটা আমাকে 33554432 দেয় আশানুরূপ।

তবে আমি যখন মাইএসকিউএল সার্ভারটি পুনরায় চালু করি তখন এটি যাদুতে 1048576 এ ফিরে যায় I আমি এখানে কী ভুল করছি?

বোনাস প্রশ্ন, একটি বিএলওবি ফিল্ড সংকোচন করা সম্ভব?


1
একটি ব্লগ ক্ষেত্রটি বাইনারি লার্জ ওবজেক্ট ject এটা ঠিক বিট। সুতরাং হ্যাঁ, আপনি বিষয়বস্তুগুলি সংকুচিত করতে পারেন এবং এটির পরিবর্তে আপনি BLOB- ক্ষেত্রের মধ্যে সংরক্ষণ করেন এমন অন্যান্য (এবং আশাকরি, কম) বিট দেয়। এটি ঠিক করে দেয় আপনি এটিতে কোন ডেটা রেখেছেন। আপনার যখন আবার প্রয়োজন হয় তখন আপনাকেও ব্লগ-বিষয়বস্তুগুলি সঙ্কুচিত করতে হবে।
কোনারাক

ওকে ধন্যবাদ, আশা করেছিলেন যে মাইএসকিএল-তে একটি সংকোচনের বৈশিষ্ট্যটি বিদ্যমান ছিল
মুলসকিনার

উত্তর:


407

আপনার ফাইলে একক লাইন বা বিভাগের অধীনে my.iniবা ~/.my.cnfফাইলটিতে পরিবর্তন করুন:[mysqld][client]

max_allowed_packet=500M

তারপরে মাইএসকিউএল পরিষেবাটি পুনরায় চালু করুন এবং আপনার কাজ শেষ হয়েছে।

আরও তথ্যের জন্য ডকুমেন্টেশন দেখুন ।


1
ধন্যবাদ মনে হচ্ছে কাজ করা সত্ত্বেও আমি আশা করেছিলাম ini ফাইলগুলিতে ম্যানুয়ালি পরিবর্তন না করে এটি সম্ভব হবে।
মুলেসকিনার

62
এফওয়াইআই পাঠকগণ, এটি "মাইএসকিউএল চলে গেছে" ত্রুটির
সমাধানও

1
@ کونরাক, টান্টার কে?
পেসারিয়ার

14
কাউকে উত্তর দেওয়া এবং তারপরে তাদের বলুন যে তাদের উত্তর দেওয়ার জন্য গুগল চেক করা উচিত rather বিশেষত যেহেতু, এসও অলসভাবে যে কোনও শালীন প্রোগ্রামিং সম্পর্কিত প্রশ্নের জন্য বেশিরভাগ শীর্ষ ফলাফলকে দখল করে। অসীম লুপ প্রোগ্রামিং সম্পর্কে কথা !!! গুগল> এসও> গুগল> এসও> গুগল> এসও এবং আরও অনেক কিছু।
ফিল হিলি

5
এটি নিশ্চিত হয়ে নিন যে এটির অধীনে রয়েছে [mysqld]এবং [mysql](খুব মিল নয়)। আমাকে কয়েক মিনিটের হেডস্ক্র্যাচিংয়ের জন্য ব্যয় করুন।
হালভার হোলস্টেন স্ট্র্যান্ড

225

Max_allowed_packet পরিবর্তনশীল একটি ক্যোয়ারী চালিয়ে বিশ্বব্যাপী নির্ধারণ করা যাবে।

তবে, যদি আপনি এটিতে পরিবর্তন না করেন my.ini ফাইলটিতে (ড্রাগন 1112 প্রস্তাবিত হিসাবে), সার্ভারটি পুনরায় চালু হওয়ার পরে মানটি পুনরায় সেট হবে, আপনি বিশ্বব্যাপী সেট করে থাকলেও।

সার্ভারটি আরম্ভ না হওয়া অবধি সবার জন্য সর্বাধিক অনুমোদিত প্যাকেটটি 1 গিগাবাইটে পরিবর্তন করতে:

SET GLOBAL max_allowed_packet=1073741824;

7
সাহায্য করে না :( এটি "ক্যোয়ারী ওকে, 0 টি সারি প্রভাবিত (0.00 সেকেন্ড)" প্রদর্শন করে
আর্টনিকপ্রো

15
@artnikpro এটি কাজ করে, "ক্যোয়ারী ওকে, 0 টি সারি প্রভাবিত (0.00 সেকেন্ড)" বিভ্রান্তি বোধ করতে পারে তবে এটি সঠিক।
অ্যান্টে

10
আমার জন্য কাজ করে না। SHOW VARIABLES WHERE variable_name = 'max_allowed_packet'এখনও পুরানো মান দেখায়
পোমা

50
এটি পুরানো মানটি দেখায় কারণ বিদ্যমান সংযোগগুলির জন্য সর্বাধিক_নয়ে_প্যাক্ট পরিবর্তন হয় না। আপনি যদি সংযোগ বিচ্ছিন্ন করে এবং পুনরায় সংযোগ করেন তবে আপনি আপডেট হওয়া মানটি দেখতে পাবেন।
ম্যাট ক্রিঙ্কলা-ভোগ

2
ম্যাট ক্রিংক্লা-ভোগ ঠিক বলেছেন। এটি প্রস্থান এবং আবার সংযোগ প্রয়োজন
makriria

89

আমার এক জুনিয়র বিকাশকারী আমার জন্য এটি সংশোধন করতে সমস্যা হচ্ছিল তাই আমি ভেবেছিলাম লিনাক্স ব্যবহারকারীদের জন্য আমি এটি আরও বিস্তৃতভাবে প্রসারিত করব:

1) ওপেন টার্মিনাল

2) এসটিএস রুট @ ইয়োরিপ

3) রুট পাসওয়ার্ড লিখুন

4) ন্যানো /etc/mysql/my.cnf (কমান্ড স্বীকৃত না হলে প্রথমে এটি করুন বা vi চেষ্টা করুন তারপরে পুনরাবৃত্তি করুন: yum ইনস্টল ন্যানো)

5) লাইনটি যুক্ত করুন: [এমওয়াইএসকিউএলডি] বিভাগের অধীনে সর্বোচ্চ_নয়েড_প্যাক্ট = 256 এম (স্পষ্টতই আপনার যা প্রয়োজন তার জন্য আকার সামঞ্জস্য করুন)। প্রথমে ফাইলটির নীচে রেখে দেওয়ার জন্য তিনি ভুল করেছিলেন যাতে এটি কাজ না করে।

এখানে চিত্র বর্ণনা লিখুন

6) কন্ট্রোল + ও (সংরক্ষণ করুন) তারপরে প্রবেশ করুন (নিশ্চিত করুন) তারপরে নিয়ন্ত্রণ + এক্স (প্রস্থান ফাইল)

7) পরিষেবা mysqld পুনরায় আরম্ভ করুন

8) আপনি পিএইচপিএমইডমিনে ভেরিয়েবল বিভাগে পরিবর্তনটি পরীক্ষা করতে পারেন


এটি বাস্তবে CentosOS6 এ করা হয়েছিল, আমি অবশ্যই রুট
এসএসএস

@ টমাসড কয়েকটি জিএনইউ / লিনাক্স ডিস্ট্রোস ব্যবহার করেছি যা আমি ব্যবহার করেছি (যেমন ডেবিয়ান 8 এবং সেন্টোস 6) উত্পাদিত হয় sudo: command not foundবা this incident will be reportedকারণ হয় sudoইনস্টল এবং কনফিগার করা হয়নি। এই উত্তরটি sudoপ্রথমবার সেট আপ করার নির্দেশাবলী সহ উত্তোলন করা ভাল ?
দামিয়ান ইয়ারিক

রুট এসএসএস নয় সমস্যা, তবে পাসওয়ার্ড লগইন। সুডো অনুমোদনের সাথে ব্যবহারকারীর অ্যাকাউন্টটি মূলের মতো প্রায় অনিরাপদ। কেবল এসএসএইচ কী-ভিত্তিক প্রমাণীকরণ ব্যবহার করুন।
মার্টিন স্নাইডার

মেশিনে কীভাবে লগ ইন করবেন সে বিষয়টি ওটি, তিনি সঠিকভাবে তার রেসিপিটিতে জানিয়েছিলেন যে আপনাকে কোনওভাবে বা অন্য কোনওভাবে লগ ইন করতে হবে।
devsmt

41

আমি মনে করি কিছু আপনার পিসিতে my.ini ফাইলটি কীভাবে সন্ধান করবেন তাও জানতে চাইবেন। উইন্ডোজ ব্যবহারকারীদের জন্য, আমি মনে করি সর্বোত্তম উপায়টি নিম্নরূপ:

  1. উইন + আর ('রান' এর শর্টকাট), টাইপ Services.msc , এন্টার দিন
  2. আপনি 'মাইএসকিউএল ৫ an' এর মতো একটি এন্ট্রি পেতে পারেন, এটিতে ডান ক্লিক করুন, বৈশিষ্ট্য নির্বাচন করুন
  3. আপনি "ডি: / প্রোগ্রাম ফাইল / মাইএসকিউএল / মাইএসকিউএল সার্ভার 5.6 / বিন \ মাইকিকিএলডি" --defaults-file = "ডি: \ প্রোগ্রামডাটা \ মাইএসকিউএল \ মাইএসকিউএল সার্ভার 5.6 \ my.ini" মাইএসকিউএল 56

এই উত্তরটি আমি http://bugs.mysql.com/bug.php?id=68516 থেকে পেয়েছি


2
এটি উইন্ডোজে গুরুত্বপূর্ণ। মাইএসকিউএলকে একটি পরিষেবা হিসাবে এবং ওয়ার্কবেঞ্চে আমার.ini সম্পাদনা করা হয়েছিল এবং এই উত্তরটি আমাকে বুঝতে পেরেছিল যে একটি সার্ভিস হিসাবে মাইএসকিউএল অন্য একটি মাইনআইআইই ব্যবহার করে যা আমি ওয়ার্কবেঞ্চে সম্পাদনা করেছি।
রবার্ট নাইস্টরোজ

20

সমস্ত নির্দেশাবলী অনুসরণ করে, আমি যা করেছি এবং এটি কাজ করেছি:

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)

সুতরাং, আমরা দেখতে পাচ্ছি, my_ii থেকে বাইরে_পরে_পরেট পরিবর্তন করা হয়েছে।

অধিবেশনটি ছেড়ে আবার পরীক্ষা করে দেখুন:

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)

উপসংহার, এসইটি গ্লোবাল সর্বোচ্চ_গতিযুক্ত_প্যাক্ট = 1073741824 পরে, সার্ভারের নতুন ম্যাক্স_নিয়েলড_প্যাকেটটি পুনরায় চালু না হওয়া পর্যন্ত থাকবে, যেমন আগে কেউ বলেছে।


13

ব্যাকআপ সম্পাদন করার সময় যদি এই ত্রুটিটি পাওয়া max_allowed_packetযায় তবে my.cnfবিশেষত সেট করা যেতে পারে mysqldump

[mysqldump]
max_allowed_packet=512M

একটি সম্পাদন করার সময় আমি এই ত্রুটিটি mysqldumpপেয়েছি এবং আমি বুঝতে পারি না কারণ এই বিভাগটির my.cnfঅধীনে আমার এই সেটটি ছিল [mysqld]। একবার আমি বুঝতে পেরেছিলাম যে আমি এটির জন্য সেট করতে পারলাম [mysqldump]এবং আমি মানটি সেট করে ফেললাম, আমার ব্যাকআপগুলি ইস্যু ছাড়াই শেষ হয়েছে।


10

যারা চালাচ্ছেন wamp 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

এর মধ্যে প্যাকেট_ সাইজের লাইন যুক্ত করুন

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

এটি এই প্রশ্নের সাথে কাজ করেছে কিনা তা পরীক্ষা করুন

Select @@global.max_allowed_packet;

5

এই ত্রুটিটি এসেছে কারণ আপনার ডেটাতে বৃহত্তর এবং সেট মান থাকে।

কেবল লিখুন max_allowed_packed=500M বা আপনি 500 * 1024k গণনা করতে পারেন এবং যদি আপনি চান 500M এর পরিবর্তে এটি ব্যবহার করতে পারেন।

এখন শুধু মাইএসকিউএল পুনরায় চালু করুন।


2
থেকে /etc/my.cnfমাইএসকিউএল উদাহরণস্বরূপ, বা /etc/my.cnf.d/server.cnfMariaDB জন্য
Evgeny লেবেদেভ

5

উত্তরদাতাদের অনেকেই বিষয়টি চিহ্নিত করেছেন এবং ইতিমধ্যে সমাধান দিয়েছেন।

আমি কেবল একটি অন্য সমাধানের পরামর্শ দিতে চাই, যা গ্লোগাল ভেরিয়েবলের মানটি মাইএসকিএল ওয়ার্কবেঞ্চের মধ্যে থেকে পরিবর্তন করছে । এটি অবশ্যই যদি আপনি সার্ভারে স্থানীয়ভাবে চলমান ওয়ার্কবেঞ্চ ব্যবহার করেন (বা এসএসএইচ সংযোগের মাধ্যমে)

আপনি কেবল আপনার উদাহরণের সাথে সংযুক্ত হন এবং মেনুতে যান:

সার্ভার -> বিকল্প ফাইল -> নেটওয়ার্কিং -> সর্বাধিক_নিযুক্ত_প্যাক করা

আপনি পছন্দসই মান সেট করেছেন এবং তারপরে আপনাকে মাইএসকিএল পরিষেবাটি পুনরায় চালু করতে হবে ।


4

অ্যামাজন আরডিএস পরিষেবাটিতে যে কেউ মাইএসকিউএল চালাচ্ছেন তাদের জন্য, এই পরিবর্তনটি প্যারামিটার গ্রুপগুলির মাধ্যমে করা হয় । আপনাকে একটি নতুন পিজি তৈরি করতে হবে বা বিদ্যমান একটি ব্যবহার করতে হবে (ডিফল্ট ব্যতীত, যা কেবলমাত্র পঠনযোগ্য)।

আপনার জন্য অনুসন্ধান করা উচিত max_allowed_packet প্যারামিটারটি , এর মান পরিবর্তন করা এবং তারপরে সেভ করুন।

আপনার মাইএসকিউএল দৃষ্টান্তের পিছনে, যদি আপনি একটি নতুন পিজি তৈরি করেন তবে আপনার পিজিকে আপনার উদাহরণের সাথে সংযুক্ত করা উচিত (আপনার রিবুট লাগতে পারে)। আপনি যদি ইতিমধ্যে আপনার দৃষ্টান্তের সাথে সংযুক্ত একটি পিজি পরিবর্তন করেন তবে আপনার পিজি সংযুক্ত সমস্ত দৃষ্টান্তগুলিতে পুনরায় বুট ছাড়াই পরিবর্তনগুলি প্রয়োগ করা হবে।


0

আপনি যদি ডাটাবেজে বড় আকারের চিত্র বা ডেটা আপলোড করতে চান। শুধু ডাটা টাইপ এ পরিবর্তন করুন 'BIG BLOB'


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.