MySQL: संचार पैकेट पढ़ने में त्रुटि


14

मुझे यह चेतावनी mysql में मिलती है,

[Warning] Aborted connection 21 to db: 'MyDB' user: 'MyUser' host: 'localhost' (Got an error reading communication packets)

मैं Google में कुछ विषयों के माध्यम से गया हूं और कुछ सुझावों के अनुसार मैंने अभी भी उसी व्यवहार max_allowed_packetसे वृद्धि की 128 to 512 to 1024है।

मैं Drupal 7 उपयोग कर रहा हूँ, और हाँ वहाँ ब्लॉब डेटा प्रकार के बहुत सारे हैं, लेकिन 1024 Mbकी max_allowed_packetमेरी राय में पर्याप्त होना चाहिए।

इस चेतावनी को दूर करने के लिए कोई अन्य समाधान?

संपादित करें:

@ रॉलैंडो के सुझाव / उत्तर के रूप में कुछ सेटिंग्स जोड़े गए, मुझे अभी भी वही चेतावनी मिलती है।

मेरा mysql config ऐसा दिखता है:

[client]
port        = 3306
socket      = /tmp/mysql.sock
default-character-set = utf8

[mysqld]
port        = 3306
socket      = /tmp/mysql.sock
skip-external-locking
key_buffer_size = 16K 
max_allowed_packet = 1024M 
table_open_cache = 128 
sort_buffer_size = 64K
read_buffer_size = 256K
read_rnd_buffer_size = 256K
net_buffer_length = 2K
thread_stack = 192K
# Query cache disabled
thread_cache_size = 8
myisam-recover = BACKUP
max_connections = 100
thread_concurrency = 10
tmp_table_size = 128M
max_heap_table_size = 128M
log_error                = /var/log/mysql/mysql-error.log
log_slow_queries        = /var/log/mysql/mysql-slow.log
long_query_time = 2

log_warnings = 2

server-id   = 1
binlog-format = row
replicate-same-server-id = 0
auto-increment-increment = 2
auto-increment-offset = 1
log_bin = mysql-bin
log-slave-updates
relay-log=mysqld-relay-bin
expire_logs_days        = 10
max_binlog_size         = 100M

innodb_data_home_dir = /var/db/mysql
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = /var/db/mysql
innodb_buffer_pool_size = 8G
character-set-server = utf8
#innodb_additional_mem_pool_size = 2M
innodb_log_file_size = 2047M
innodb_log_buffer_size = 32M
innodb_flush_log_at_trx_commit = 2
innodb_thread_concurrency = 8
innodb_lock_wait_timeout = 50
innodb_flush_method = O_DIRECT

[mysqldump]
quick
quote-names
max_allowed_packet = 16M
default-character-set = utf8

[mysql]
default-character-set = utf8

[myisamchk]
key_buffer_size = 32M
sort_buffer_size = 32M

[mysqlhotcopy]
interactive-timeout

[mysqld_save]
syslog

मेरा आवेदन केवल InnoDB का उपयोग करता है, लेकिन mysql जैसे कुछ डेटाबेस हैं, जो मानक mysql प्रतिष्ठानों के साथ आए हैं केवल वही हैं जो MyISAM इंजन प्रकार का उपयोग करते हैं, मुझे लगता है कि हालांकि मेरी चिंता नहीं होनी चाहिए।

जैसा कि आप देख सकते हैं कि मेरे पास प्रतिकृति भी है, चेतावनी प्रतिकृति सर्वर में भी वही है, जिसका कॉन्फ़िगरेशन इस के समान है।


क्या आपके सभी टेबल InnoDB हैं?
रोलैंडमाइसीडीडीबीए

@ रोलैंडम्यूसीडीडीबीए, हाय, हां सभी टेबल निर्दोष हैं, मैंने इस वेबसाइट में इस तरह से कुछ अन्य प्रश्न में आपके उत्तर के अनुसार किया था, लेकिन मुझे अभी भी चेतावनी मिलती है।

@ रोलैंडम्यूसीडीडीबीए, मैंने अपने प्रश्न को संपादित किया है और आपने जो सुझाव दिया है, मुझे अभी भी वह चेतावनी मिल रही है। मेरे पास यहाँ mysql.cnf है, क्या आप कृपया इसे देख सकते हैं, मुझे कुछ याद आ रहा है

मैं Drupal 6 के साथ MySQL 5.5.35 पर इस त्रुटि को प्राप्त करना शुरू कर दिया। मुझे समस्या कभी समझ में नहीं आई लेकिन यह 5.7.7 पर अपग्रेड करने पर चली गई। अब यह 5.7.9 के साथ वापस आ गया है। मैंने एक सम्मिलित क्वेरी (पाठ के 6000 से कम वर्ण) को अलग किया है जो 5.7.7 पर सफल होता है, लेकिन 5.7.9 पर गर्भपात का कारण बनता है। यह केवल तभी विफल होता है जब दूरस्थ रूप से निष्पादित किया जाता है, स्थानीय रूप से नहीं। तो, एक ही क्लाइंट, सर्वर के दोनों संस्करण एक ही मशीन, एक ही sql_mode, एक ही कैरेक्टर सेट, विशाल max_allowed_packet पर एक साथ चल रहे हैं। मैं लोमड़ी हूँ। क्या आपने कभी इसका समाधान किया?
user19292

जवाबों:


10

मुझे खुशी है कि आपने कहा कि आपका सारा डेटा InnoDB है, इसलिए मैं इस प्रकार उत्तर दे सकता हूं: यदि max_allowed_packet को 1G पर अधिकतम किया गया है और आप अभी भी समस्याएँ हैं, तो देखने के लिए केवल दो स्थान हैं:

  1. innodb_log_buffer_size : बफर के बाइट्स में जो कि InnoDB डिस्क पर लॉग फ़ाइलों को लिखने के लिए उपयोग करता है। डिफ़ॉल्ट मान 8MB है। एक बड़ा लॉग बफ़र लेनदेन करने से पहले लॉग को डिस्क पर लिखने की आवश्यकता के बिना बड़े लेनदेन को चलाने में सक्षम बनाता है। इस प्रकार, यदि आपके पास बड़ा लेनदेन है, तो लॉग बफर को बड़ा बनाने से डिस्क I / O की बचत होती है।
  2. innodb_log_file_size : एक लॉग समूह में प्रत्येक लॉग फ़ाइल के बाइट्स में आकार। लॉग फ़ाइलों का संयुक्त आकार 4GB से कम होना चाहिए। डिफ़ॉल्ट मान 5MB है। संवेदनशील मान बफर पूल के आकार के 1 एमबी से 1 / एन-वें तक होते हैं, जहां एन समूह में लॉग फ़ाइलों की संख्या है। बड़ा मूल्य, कम चेकपॉइंट फ्लश गतिविधि की आवश्यकता बफर पूल में होती है, जिससे डिस्क I / O की बचत होती है। लेकिन बड़ी लॉग फ़ाइलों का मतलब यह भी है कि रिकवरी क्रैश की स्थिति में धीमी है।

मैंने लगभग 2 साल पहले कुछ ऐसा कहा था

सुझाव

आपको InnoDB लेनदेन लॉग को बढ़ाने की आवश्यकता है । यहां सुरक्षित रूप से innodb_log_buffer_size और innodb_log_file_size बढ़ाने के चरण दिए गए हैं :

चरण 01: इन्हें जोड़ें /etc/my.cnf

[mysqld]
innodb_log_buffer_size = 32M
innodb_log_file_size = 2047M

चरण 02: इसे mysql में चलाएँ

mysql> SET GLOBAL innodb_fast_shutdown = 0;

चरण 03: शटडाउन mysql

service mysql stop

चरण 04: पुराने लॉग को एक तरफ ले जाएं

mv ib_logfile0 ib_logfile0.bak
mv ib_logfile1 ib_logfile1.bak

चरण 05: mysql प्रारंभ करें

service mysql start

बस।

InnoDB इन्फ्रास्ट्रक्चर में अब अलग-अलग आकार के BLOB के लिए पर्याप्त लॉगिंग स्थान होना चाहिए।

कोशिश तो करो !!!


प्रतिक्रिया के लिए बहुत बहुत धन्यवाद, मैंने अपना प्रश्न mysql.cnfफ़ाइल जोड़ने के लिए संपादित किया है । जैसा आपने सुझाव दिया, वैसा मैंने किया, लेकिन फिर भी चेतावनी मिलती है। मैं देख सकता हूँ max_allowed_packetमें mysqldumpबस है 16Mbलेकिन मुझे लगता है कि है कि कारण नहीं है। key_buffer_sizeबस 16Kbऔर फिर से इसके साथ कुछ होना चाहिए MyISAMऔर मैं MyISAMआवेदन में भंडारण इंजन का उपयोग नहीं कर रहा हूं ।

इसके अलावा - जो कोई भी अपाचे सर्वर के साथ काम करते समय इसका सामना करता है, मुझे भी उस सेवा को फिर से शुरू करना होगा। इसके लिए बहुत-बहुत धन्यवाद - मैं क्लूलेस था।
dgo

1

इस पुराने प्रश्न पर जनवरी '16 में @ user19292 की टिप्पणी पढ़ने के बाद, मैंने 5.7.9 से 5.7.12 तक अपग्रेड किया और समस्या दूर हो गई।


2
मैं 5.7.23 का उपयोग कर रहा हूं और एक ही मुद्दा है
यीशु उझंगा

1
यहां भी, त्रुटि 5.7.26 के साथ मौजूद है। आपके मामले में अपग्रेड शायद कॉन्फिग को भी रीसेट कर देता है, इसलिए इससे आपकी समस्या हल हो सकती है।
सालिक

0

मैंने बस लगभग 5-6 घंटे बदलते विकल्पों और MySQL के विभिन्न संस्करणों की कोशिश करते हुए, मुझे हमेशा त्रुटि मिली।

मुझे लगता है कि यह eider है क्योंकि:

  • मेरा PHP कोड ठीक से db कनेक्शन को बंद नहीं कर रहा है (यह एक चेतावनी है, त्रुटि नहीं है), mysql_close()या समकक्ष।
  • या क्योंकि क्लाइंट बंद कर दिया है, तो nginx कैश / प्रॉक्सी सर्वर कनेक्शन को बंद करने के लिए कॉन्फ़िगर किया गया है, कैश / प्रॉक्सी सर्वर मूल सर्वर (जहां mysql भी है) की प्रतीक्षा नहीं करता है।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.