मैंने phpMyAdmin के माध्यम से एक बड़ी sql फ़ाइल आयात करने की कोशिश की ... लेकिन यह त्रुटि दिखाती रही
'MySQL सर्वर रुक गया है'
क्या करें?
max_allowed_packet
। थोड़ा कच्चा, लेकिन अगर वह काम करता है तो आप एक समझदार मूल्य पा सकते हैं।
मैंने phpMyAdmin के माध्यम से एक बड़ी sql फ़ाइल आयात करने की कोशिश की ... लेकिन यह त्रुटि दिखाती रही
'MySQL सर्वर रुक गया है'
क्या करें?
max_allowed_packet
। थोड़ा कच्चा, लेकिन अगर वह काम करता है तो आप एक समझदार मूल्य पा सकते हैं।
जवाबों:
MySQL सर्वर के लिए दो सबसे सामान्य कारण (और फिक्स) दूर हो गए हैं (त्रुटि 2006) हैं:
सर्वर ने समय समाप्त कर कनेक्शन बंद कर दिया। कैसे ठीक करना है:
जाँच करें कि आपके mysqld की my.cnf कॉन्फ़िगरेशन फ़ाइल में wa_timeout चर काफी बड़ा है। डेबियन पर:
sudo nano /etc/mysql/my.cnf
सेटwait_timeout = 600
सेकंड (आप इस मान को तब घटा / घटा सकते हैं, जब त्रुटि 2006 हो गई है), तबsudo /etc/init.d/mysql restart
। मैंने जाँच नहीं की, लेकिन wa_time के लिए डिफ़ॉल्ट मान लगभग 28800 सेकंड (8 घंटे) हो सकता है।सर्वर ने एक गलत या बहुत बड़ा पैकेट गिरा दिया। यदि mysqld को एक पैकेट मिलता है जो बहुत बड़ा या गलत है, तो यह मानता है कि ग्राहक के साथ कुछ गलत हो गया है और कनेक्शन बंद कर दिया है। आप my.cnf फ़ाइल में max_allowed_packet का मान बढ़ाकर अधिकतम पैकेट आकार सीमा बढ़ा सकते हैं। डेबियन पर
sudo nano /etc/mysql/my.cnf
, सेटmax_allowed_packet = 64M
(आप इस मूल्य को ट्विस्ट / घटा सकते हैं जब त्रुटि 2006 चली गई है), फिरsudo /etc/init.d/mysql restart
।
संपादित करें:
ध्यान दें कि MySQL विकल्प फ़ाइलों में उनके कमांड पहले से ही टिप्पणी के रूप में उपलब्ध नहीं हैं (उदाहरण के लिए php.ini में)। तो अगर आप में कोई बदलाव / ट्वीक लिखना चाहिए my.cnf
या my.ini
और उन्हें रखते mysql/data
निर्देशिका या अन्य रास्तों में से किसी में, इस तरह के रूप विकल्पों में से उचित समूह के तहत [client]
, [myslqd]
आदि उदाहरण के लिए:
[mysqld]
wait_timeout = 600
max_allowed_packet = 64M
फिर सर्वर को पुनरारंभ करें। उनके मान प्राप्त करने के लिए, mysql क्लाइंट में टाइप करें:
> select @@wait_timeout;
> select @@max_allowed_packet;
SHOW VARIABLES
MySQL क्वेरी चलाकर इसे देख सकते हैं ) और जिस फ़ाइल को मैं आयात कर रहा था उसमें कुछ बड़े रिकॉर्ड थे। मैंने my.ini फ़ाइल खोली (मैं विंडोज़ चला रहा था) और इस पर मान सेट किया: max_allowed_packet = 64M
MySQL को पुनः आरंभ किया और आयात को फिर से चलाया।
wait_timeout
लाइन नहीं ढूँढ सकता
मेरे लिए यह समाधान काम नहीं आया इसलिए मैंने निष्पादित किया
SET GLOBAL max_allowed_packet=1073741824;
मेरे SQL क्लाइंट में।
यदि चल रही MYSql सेवा के साथ इसे बदलने में सक्षम नहीं है, तो आपको सेवा को रोकना चाहिए और "my.ini" फ़ाइल में चर को बदलना चाहिए।
उदाहरण के लिए:
max_allowed_packet=20M
php.ini
चली, विंडोज पर एक परीक्षण XAMPP मशीन पर मुझे दोनों फ़ाइल को संशोधित करना पड़ा (जैसा कि उत्तर में @GBD द्वारा सुझाया गया है) और my.ini
इसे बनाने के लिए MySQL कॉन्फ़िगरेशन फ़ाइल ।
SHOW variables LIKE 'max_allowed_packet'
max_allowed_packet
एक ग्राहक में सेट करना और फिर .sql
दूसरे सत्र में बड़ी फ़ाइल आयात करना ठीक काम करेगा।
यदि आप XAMPP पर काम कर रहे हैं तो आप MySQL सर्वर को ठीक कर सकते हैं। निम्नलिखित बदलावों के साथ समस्या दूर हो गई है।
अपनी my.ini फ़ाइल खोलें my.ini स्थान है (D: \ xampp \ mysql \ bin \ my.ini)
निम्न चर मानों को बदलें
max_allowed_packet = 64M
innodb_lock_wait_timeout = 500
यदि आप डिफ़ॉल्ट मानों के साथ चल रहे हैं तो आपके पास अपने mysql कॉन्फ़िगरेशन को अनुकूलित करने के लिए बहुत जगह है।
मेरे द्वारा सुझाया गया पहला कदम मैक्सिमम_लग्ड_पैकेट को 128M तक बढ़ाना है।
फिर MySQL ट्यूनिंग प्राइमर स्क्रिप्ट डाउनलोड करें और इसे चलाएं। यह बेहतर प्रदर्शन के लिए आपके कॉन्फ़िगरेशन के कई पहलुओं के लिए सिफारिशें प्रदान करेगा।
इसके अलावा MySQL और PHP दोनों में अपने टाइमआउट मानों को समायोजित करें।
कितनी बड़ी (फ़ाइल का आकार) वह फ़ाइल है जिसे आप आयात कर रहे हैं और क्या आप PHPMyAdmin के बजाय mysql कमांड लाइन क्लाइंट का उपयोग करके फ़ाइल को आयात करने में सक्षम हैं?
यदि आप OS X पर MAMP का उपयोग कर रहे हैं, तो आपको max_allowed_packet
MySQL के टेम्पलेट में मान को बदलना होगा ।
आप इसे यहां पा सकते हैं: फ़ाइल> टेम्पलेट संपादित करें> MySQL my.cnf
फिर बस खोज करें max_allowed_packet
, मूल्य बदलें और सहेजें।
मैंने इस छोटी /etc/mysql/my.cnf फ़ाइल के साथ अपनी समस्या हल की:
[mysqld]
wait_timeout = 600
max_allowed_packet = 100M
[mysqld]
यह हो सकता है अन्य कारण स्मृति से बाहर है। / Var / log / संदेश की जाँच करें और सुनिश्चित करें कि आपके my.cnf को mysqld के कारण आपकी मशीन की तुलना में अधिक मेमोरी आवंटित करने के लिए सेट नहीं किया गया है।
आपकी mysqld प्रक्रिया वास्तव में कर्नेल द्वारा मार दी जा सकती है और फिर "safe_mysqld" प्रक्रिया द्वारा आपको इसे साकार किए बिना फिर से शुरू किया जा सकता है।
शीर्ष का उपयोग करें और स्मृति आवंटन देखें, जबकि यह देखने के लिए कि आपका हेडरूम क्या है।
इसे बदलने से पहले my.cnf का बैकअप बनाएं।
मेरे पास यह त्रुटि और अन्य संबंधित थे, जब मैंने 16 जीबी एसक्यूएल फ़ाइल पर आयात किया था। मेरे लिए, my.ini को संपादित करना और [mysqld] अनुभाग में निम्नलिखित (कई अलग-अलग पोस्ट के आधार पर) सेटिंग करें:
max_allowed_packet = 110M
innodb_buffer_pool_size=511M
innodb_log_file_size=500M
innodb_log_buffer_size = 800M
net_read_timeout = 600
net_write_timeout = 600
यदि आप विंडोज के तहत चल रहे हैं, तो नियंत्रण कक्ष, सेवाओं पर जाएं, और MySQL के विवरण देखें और आप देखेंगे कि my.ini कहां है। इसके बाद आप my.ini को एडिट और सेव करें, mysql सर्विस को पुनरारंभ करें (या कंप्यूटर को पुनरारंभ करें)।
यदि आप HeidiSQL का उपयोग कर रहे हैं, तो आप इनका उपयोग करके कुछ या सभी सेट भी कर सकते हैं।
मैंने "max_allowed_packet" को 1024M में अपडेट किया, लेकिन यह अभी भी काम नहीं कर रहा था। यह मेरी तैनाती स्क्रिप्ट चल रहा था पता चला है:
mysql --max_allowed_packet=512M --database=mydb -u root < .\db\db.sql
यदि आप इसे इस तरह से दान कर रहे हैं, तो कमांड लाइन से स्पष्ट रूप से एक बड़ी संख्या निर्दिष्ट करना सुनिश्चित करें।
यदि आपके डेटा में BLOB
डेटा शामिल है:
ध्यान दें कि कमांड लाइन से डेटा का आयात BLOB डेटा पर चोक होता है, जिसके परिणामस्वरूप 'MySQL सर्वर' चला गया है 'त्रुटि।
इससे बचने के लिए, mysqldump को फिर से बनाएं लेकिन --hex-blob
झंडे के साथ :
http://dev.mysql.com/doc/refman/5.7/en/mysqldump.html#option_mysqldump_hex-blob
जो अन्य पाठ के बीच बाइनरी के बजाय हेक्स मान के साथ डेटा फ़ाइल को लिख देगा।
PhpMyAdmin में हेक्साडेसिमल नोटेशन में डंप बाइनरी कॉलम का भी विकल्प है (उदाहरण के लिए, "abc" 0x616263 हो जाता है) "जो अच्छी तरह से काम करता है।
ध्यान दें कि एक लंबे समय तक चलने वाला बग है (दिसंबर 2015 तक) जिसका अर्थ है कि GEOM
कॉलम परिवर्तित नहीं हैं:
mysqldump का उपयोग करके GEOMETRY कॉलम वाली तालिका का बैकअप लें?
इसलिए PhpMyAdmin जैसे प्रोग्राम का उपयोग करना एकमात्र समाधान लगता है (ऊपर दिया गया विकल्प GEOM कॉलम को सही रूप से परिवर्तित करता है)।
यदि असफल होने में लंबा समय लगता है, तो wait_timeout
चर को बड़ा करें ।
यदि यह तुरंत विफल हो जाता है, तो max_allowed_packet
चर को बढ़ाएं; यह अभी भी काम नहीं करता है, सुनिश्चित करें कि कमांड वैध एसक्यूएल है। खदानों में बिना खर्चे के खदानें थीं जो सब कुछ खराब कर देती थीं।
इसके अलावा, यदि संभव हो, तो 1000 एसक्यूएल कमांड के आवेषण की संख्या को सीमित करने पर विचार करें, कहते हैं, 1000। आप एक स्क्रिप्ट बना सकते हैं जो INSERT ... reintroducing द्वारा एक एकल में से कई कथन बनाता है ... प्रत्येक एन आवेषण का हिस्सा।
डेटाबेस को डुप्लिकेट करते समय मुझे आज भी ऐसी ही त्रुटि हुई थी (MySQL सर्वर दूर चला गया है ...), लेकिन जब मैंने mysql.server पुनरारंभ करने का प्रयास किया तो मुझे त्रुटि मिली
ERROR! The server quit without updating PID ...
मैंने इसे कैसे हल किया: मैंने एप्लिकेशन / उपयोगिताएँ खोलीं और गतिविधि मॉनिटर चलाया
quit mysqld
तब त्रुटि समस्या को हल करने में सक्षम था
mysql.server restart
मैं कुछ बड़ी गणनाएं कर रहा हूं जिसमें लंबे समय तक रहने और भारी डेटा के साथ mysql कनेक्शन शामिल है। मैं इस का सामना कर रहा था "मस्क़ल जाना मुद्दा"। इसलिए मैंने प्रश्नों का अनुकूलन करने की कोशिश की, लेकिन इससे मुझे मदद नहीं मिली, फिर मैंने mysql वैरिएबल सीमा को बढ़ा दिया जो डिफ़ॉल्ट रूप से कम मूल्य पर सेट है।
wait_timeout max_allowed_packet
आपको जो भी सूट करता है उसे सीमित करने के लिए यह कोई भी संख्या * 1024 (बाइट्स) होनी चाहिए। आप ' mysql -u उपयोगकर्ता नाम - p ' कमांड का उपयोग करके टर्मिनल में प्रवेश कर सकते हैं और इन चर सीमाओं के लिए जाँच और परिवर्तन कर सकते हैं।
GoDaddy ने होस्टिंग खातों को साझा किया, यह PHP.ini आदि फ़ाइलों को ट्विक करने के लिए मुश्किल है। हालांकि, एक और तरीका है और यह सिर्फ मेरे लिए पूरी तरह से काम करता है। (मैं अभी एक 3.8Mb .sql पाठ फ़ाइल को सफलतापूर्वक अपलोड करता हूं, जिसमें 3100 पंक्तियाँ और 145 कॉल हैं। phpMyAdmin में महत्वपूर्ण आदेश का उपयोग करके, मुझे मिल रहा था खूंखार MySQL सर्वर दूर चला गया है त्रुटि, और आगे कोई जानकारी नहीं।)
मैंने पाया कि मैट बुचर के पास सही जवाब था। मैट की तरह, मैंने माईएसक्यूएल डेटाबेस को काटने के आकार के चंक्स में निर्यात करने से लेकर स्क्रिप्ट लिखने तक, सभी प्रकार की तरकीबें आजमाई थीं, जो बड़े आयात को छोटे लोगों में तोड़ देती हैं। लेकिन यहाँ क्या काम किया है:
(१) CPANEL ---> फ़ाइलें (समूह) ---> बैकअप
(2a) "आंशिक बैकअप" शीर्षक के
तहत ... (2 बी) "डाउनलोड मायएसक्यूएल डाटाबेस बैकअप डाउनलोड करें"
(2 सी) के तहत अपना डेटाबेस चुनें और बैकअप डाउनलोड करें (यह चरण वैकल्पिक, लेकिन बुद्धिमान)
(3a) सीधे 2b के दाईं ओर, "रिस्टोर a MySQL डेटाबेस बैकअप"
(3b) शीर्षक के तहत अपने स्थानीय ड्राइव से .SQL आयात फ़ाइल चुनें
(3c) सच्ची खुशी आपकी (शीघ्र ही ....) होगी। 5 सेकंड
मैं एकल तालिका आयात करने के लिए इस पद्धति का उपयोग करने में सक्षम था। मेरे डेटाबेस में और कुछ भी प्रभावित नहीं हुआ था - लेकिन यह है कि ऊपर दिए गए कदम (2) से बचाव करना है।
नोट्स:
ए। यदि आप अनिश्चित हैं कि .SQL आयात फ़ाइल कैसे बनाई जाए, तो एक तालिका निर्यात करने और उस फ़ाइल संरचना को संशोधित करने के लिए phpMyAdmin का उपयोग करें।
स्रोत: मैट कसाई 2010 अनुच्छेद
max_allowed_packet
मदद नहीं करता है।जब आप .sql
अपने डेटाबेस में सीक्वल प्रो के माध्यम से एक फ़ाइल आयात करते हैं तो मुझे भी वही त्रुटि मिल रही थी ।
त्रुटि अभी भी ऊपर उठा रही थीं के बाद कायम max_allowed_packet
करने के लिए 512M
तो मैं बजाय साथ कमांड लाइन में आयात भाग गया:
mysql --verbose -u root -p DatabaseName < MySQL.sql
इसने निम्नलिखित त्रुटि दी:
ASCII '\0' appeared in the statement, but this is not allowed unless option --binary-mode is enabled
मुझे कुछ मददगार StackOverflow प्रश्न मिले:
मेरे मामले में, मेरी .sql
फ़ाइल थोड़ी भ्रष्ट थी या कुछ और थी। MySQL डंप हमें मिलता है दो ज़िप फ़ाइलों में एक साथ और फिर unzipped करने की आवश्यकता है। मुझे लगता है कि शुरुआत में कुछ विषम पात्रों और एन्कोडिंग के साथ फाइल को छोड़कर, अनज़िपिंग बाधित हो गई थी। एक नया MySQL डंप प्राप्त करना और इसे ठीक से खोलना मेरे लिए काम कर रहा है।
बस इसे यहाँ जोड़ना चाहते हैं यदि अन्य लोग पाते हैं कि max_allowed_packet
चर को बढ़ाने में मदद नहीं मिल रही थी।
पैकेट आकार या टाइमआउट के बारे में किसी भी समाधान ने मेरे लिए कोई फर्क नहीं पड़ा। मुझे ssl को निष्क्रिय करने की आवश्यकता थी
mysql -u -p -hmyhost.com --disable-ssl db < file.sql
https://dev.mysql.com/doc/refman/5.7/en/encrypted-connections.html
मुझे एक ही मुद्दा मिला
$image_base64 = base64_encode(file_get_contents($_FILES['file']['tmp_name']) );
$image = 'data:image/jpeg;base64,'.$image_base64;
$query = "insert into images(image) values('".$image."')";
mysqli_query($con,$query);
Phpmyadmin की \ xampp \ mysql \ bin \ my.ini फ़ाइल हमें केवल मिलती है
[mysqldump]
max_allowed_packet=110M
जो सिर्फ mysqldump -u root -p dbname के लिए है। मैंने ऊपर कोड के साथ प्रतिस्थापित करके अपनी समस्या का समाधान किया
max_allowed_packet=110M
[mysqldump]
max_allowed_packet=110M