जवाबों:
MySQL (शॉर्ट kill -9
) में कोई भी "अनुरोधित" शटडाउन अनुक्रम कुछ हद तक सुशोभित है , क्योंकि लेन-देन प्रगति में है (लेन-देन तालिकाओं पर) वापस लुढ़का हुआ है, लेकिन यहां कुछ तरीके हैं जो संभव के रूप में साफ करने के लिए पुनरारंभ करें।
नोट: यदि आप सर्वर को अपग्रेड के लिए बंद कर रहे हैं, तो इस प्रक्रिया का उपयोग न करें; इसके बजाय, इस उत्तर में विस्तृत प्रक्रिया का पालन करें ।
अन्यथा, यदि आप एक अन्यथा स्वस्थ सर्वर को फिर से शुरू कर रहे हैं ताकि आप केवल पढ़ने के लिए वैश्विक चर या कुछ इसी तरह बदल सकें, तो यहां एक अनुग्रह मार्ग है:
पहले, innodb_fast_shutdown
अगर यह पहले से ही सक्षम नहीं है। यह सीधे शटडाउन की शालीनता से संबंधित नहीं है, लेकिन यह आपके सर्वर को तेजी से वापस लाना चाहिए।
mysql> SHOW VARIABLES LIKE 'innodb_fast_shutdown';
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| innodb_fast_shutdown | 0 |
+----------------------+-------+
1 row in set (0.00 sec)
mysql> SET GLOBAL innodb_fast_shutdown = 1;
Query OK, 0 rows affected (0.01 sec)
अगला, सर्वर को सभी खुली तालिकाओं को बंद करने का निर्देश दें जैसे ही वर्तमान में चल रहे प्रश्नों को संदर्भित नहीं कर रहे हैं। इस कदम का शालीन बंद से भी कोई लेना-देना नहीं है, लेकिन यह बाद के कदम को और तेज कर देगा:
mysql> FLUSH LOCAL TABLES;
Query OK, 0 rows affected (41.12 sec)
FLUSH TABLES
बयान (वैकल्पिक साथ LOCAL
कीवर्ड, जो किसी भी गुलामों की एक अनावश्यक लेकिन अन्यथा हानिरहित फ्लश से बचा जाता है) को अवरुद्ध कर देगा और अपने संकेत देगा वापस नहीं जब तक तालिकाओं के सभी बंद किया जा सकता। एक बार जब प्रत्येक तालिका को "फ्लश" कर दिया जाता है (बंद), यदि कोई क्वेरी बाद में तालिका का संदर्भ देती है, तो यह स्वचालित रूप से फिर से खोल दी जाएगी, लेकिन यह ठीक है। हम इस कदम के साथ पूरा कर रहे हैं अंतिम चरण के लिए कम काम कर रहा है:
mysql> FLUSH TABLES WITH READ LOCK;
Query OK, 0 rows affected (13.74 sec)
mysql>
यह कथन सभी तालिकाओं को फ्लश करता है (इसलिए इससे कुछ लाभ प्राप्त करने का तरीका पूर्ववर्ती कदम से कम विघटनकारी है) और उन पर एक वैश्विक (सर्वर-वाइड) रीड-ओनली लॉक प्राप्त करता है।
आपके पास एक वैश्विक रीड लॉक नहीं हो सकता है जब तक कि वर्तमान में चल रहे "लिखना" क्वेरी (यानी, बहुत ज्यादा सब कुछ लेकिन SELECT
) नहीं किया जाता है। लॉक अनुरोध जारी करने से मौजूदा प्रश्न समाप्त हो जाएंगे, लेकिन नए लोगों को शुरू करने की अनुमति नहीं होगी।
जब तक आप इस वैश्विक लॉक को नहीं पकड़ते, तब तक आपका प्रॉम्प्ट वापस नहीं आता है , इसलिए जब आप अनुरोध करते हैं कि लॉक खत्म होने में सक्षम है, और आप जानते हैं कि वे समाप्त हो गए हैं, तो हर क्वेरी प्रगति पर है। किसी भी तालिका में कुछ भी लिखने की कोशिश करने वाले किसी भी बाद के प्रश्नों को केवल स्टाल, कोई डेटा नहीं बदलना होगा, ताला के लिए अनिश्चित काल तक इंतजार करना, ...
UNLOCK TABLES;
)इसे बंद करने के प्रलोभन का विरोध करें।
mysql>
यह आइडल कंसोल प्रांप्ट है जो आपके लिए ग्लोबल लॉक को होल्ड कर रहा है। यह खोना, ताला खोना।
किसी अन्य कंसोल विंडो से, MySQL को सामान्य तरीके से रीस्टार्ट करें, जिसमें या तो इनस्क्रिप्ट (जैसे, आपका लोकल वेरिएंट service mysql.server restart
) या mysqladmin shutdown
मैनुअल रीस्टार्ट के साथ।
संक्षेप में, MySQL को बंद करने से पहले कुछ सर्वोत्तम प्रथाओं पर विचार किया जाना चाहिए:
mysql> STOP SLAVE;
।mysql> SET GLOBAL innodb_max_dirty_pages_pct = 0;
।mysql> SHOW PROCESSLIST;
, उन्हें मारें mysql> kill thread_id;
या समाप्त होने तक प्रतीक्षा करें।mysql> SET GLOBAL innodb_buffer_pool_dump_at_shutdown = ON;
इसे स्टार्टअप पर पुनः लोड करें
# vi /etc/my.cnf
innodb_buffer_pool_load_at_startup = ON
।फिर पिछले बिंदुओं की पुष्टि करने के बाद, आप सुरक्षित रूप से MySQL पुनः आरंभ कर सकते हैं shell$ service mysql restart
अधिक जानकारी के लिए, MySQL को बंद करने से पहले मेरी पोस्ट देखें।
innodb_fast_shutdown = 1
वास्तव में यह सुनिश्चित करना कि MySQL तेजी से शुरू होता है? डॉक्स को देखते हुए, ऐसा लगता है कि यह शटडाउन गति (स्टार्टअप गति की कीमत पर?) में सुधार करता है।