यह करने के लिए बस चलाने के लिए mysql बंद करने के लिए सबसे चालाक तरीका है
mysqladmin -uroot -p -h127.0.0.1 --protocol=tcp shutdown
यहाँ क्यों है:
Mysql सेवा फ़ाइल ( /etc/init.d/mysql) सॉकेट फ़ाइल की उपस्थिति पर निर्भर करती है। ऐतिहासिक रूप से बोलना, MySQL 4.0 पर वापस जाना, सॉकेट फ़ाइल कभी-कभी बेवजह गायब हो जाती है। यह service mysql stopकाम करने के एक मानक को बाधित करता है ।
यह कहना पर्याप्त नहीं है
mysqladmin -uroot -p -h127.0.0.1 shutdown
क्योंकि mysqld से रूट किया जाएगा के रूप में एक उपयोगकर्ता में आने root@127.0.0.1के लिए root@localhostअगर टीसीपी / आईपी स्पष्ट रूप से सक्षम नहीं है। डिफ़ॉल्ट रूप से, mysqld प्रतिरोध के कम से कम पथ चुनें और कनेक्ट करेगा root@127.0.0.1करने के लिए root@localhostसॉकेट फ़ाइल के माध्यम से। फिर भी, अगर कोई सॉकेट फ़ाइल नहीं है, तो root@localhostकभी कनेक्ट नहीं होगा।
यहां तक कि mysqladmin पर MySQL प्रलेखन यह कहता है:
यदि आप एक यूनिक्स सॉकेट फ़ाइल का उपयोग कर एक स्थानीय सर्वर से कनेक्ट करते समय mysqladmin शटडाउन को निष्पादित करते हैं, तो mysqladmin सर्वर की प्रक्रिया आईडी फ़ाइल को हटाने तक इंतजार करता है, यह सुनिश्चित करने के लिए कि सर्वर ठीक से बंद हो गया है।
यही कारण है कि टीसीपी / आईपी को सक्षम करना अत्यावश्यक है:
mysqladmin -uroot -p -h127.0.0.1 --protocol=tcp shutdown
Sept 30, 2011 को वापस, मैं के अपने खुद के संस्करण की पटकथा लिखी mysqld_multiबुलाया mysqlservice(मेरी पोस्ट देखें: एक ही मेजबान पर कई उदाहरण चल रहा है )। यह विभिन्न बंदरगाहों से mysqld को जोड़ने के लिए एक आभासी इंजन के रूप में कार्य करता है। आपको बस my.cnfस्वनिर्धारित मापदंडों के साथ खुद को लाना होगा । उस स्क्रिप्ट में, मैं इस तरह से शटडाउन जारी करता हूं:
stop() {
${ECHO} -n $"Stopping ${PROGNAME}"
${MYSQLD_STOP}
ATTEMPTS=0
STOPPING_MYSQLD=1
MINUTES_TO_TRY=10
(( TICKS_TO_TRY = MINUTES_TO_TRY*240 ))
while [ ${STOPPING_MYSQLD} -eq 1 ]
do
${ECHO} -n "."
${SLEEP} 0.25
MYSQLD_HAS_BEEN_SHUTDOWN=`${TAIL} ${MYSQL_ERROR_LOG} | ${GREP} -c "Shutdown complete$"`
(( ATTEMPTS++ ))
if [ ${ATTEMPTS} -eq ${TICKS_TO_TRY} ] ; then STOPPING_MYSQLD=0 ; fi
if [ ${MYSQLD_HAS_BEEN_SHUTDOWN} -eq 1 ] ; then STOPPING_MYSQLD=2 ; fi
done
${ECHO}
if [ ${STOPPING_MYSQLD} -eq 2 ]
then
${ECHO} "Stopped ${PROGNAME}"
else
${TAIL} -30 ${MYSQL_ERROR_LOG}
fi
}
लेकिन क्या है ${MYSQLD_STOP}?
MYSQL_CONN="-uroot -p<rootpassword> -P${MYSQLD_PORT} -h127.0.0.1 --protocol=tcp"
MYSQLD_STOP="${MYSQLADMIN} ${MYSQL_CONN} shutdown"
कृपया ध्यान दें कि मैं उपयोग करता हूं 127.0.0.1और एक स्पष्ट बंदरगाह। इस तरह, मैं सॉकेट फ़ाइल पर निर्भर नहीं हूं।
मैंने हमेशा अपने mysqladmin --protocol=tcp shtudownहैंक्स के शटडाउन के उचित विकल्प के रूप में उपयोग किया है यदि service mysql stopहैंग हो जाता है। पर कर रहा kill -9है mysqldऔर mysqld_safeअंतिम रिसॉर्ट्स के अंतिम में होना चाहिए। (हां, मैंने पिछली बार तीन बार कहा था)।
कई बार, mysqld ने mysql.sock को बिना किसी चेतावनी के हटा दिया है। अन्य लोगों ने इस मुद्दे को पिछले कुछ वर्षों में देखा है:
उपसंहार
रहस्य सिर्फ इतना है जैसा मैंने कहा: टीसीएस / आईपी ( --protocol=tcp) और मुद्दे के माध्यम से mysqladmin का उपयोग करके mysql से कनेक्ट करें shutdown। यह काम करने के लिए नहीं है, क्योंकि बंद विशेषाधिकार में है mysql.userप्रमाणीकृत शटडाउन के अनन्य प्रयोजन के लिए। यह मेरे कार्यदिवस को कुछ समय बचाता है जब मैं लिनक्स सर्वर पर mysqld को बंद करते समय अपनी विंडोज मशीन से रिमोट शटडाउन जारी करने में सक्षम था।
अद्यतन 2013-03-06 22:48 ईएसटी
यदि आप इस बात से चिंतित हैं कि शटडाउन के दौरान क्या हो रहा है, तो शटडाउन समय में हेरफेर करने का एक तरीका है और जिस तरह से डेटा को डिस्क में फ्लश किया जाता है, खासकर यदि आपके पास बफ़र पूल में बहुत सारे इनोबीडी डेटा हैं
शुक्रिया # 1
यदि आपके पास बहुत सारे गंदे पृष्ठ हैं, तो आप innodb_max_dirty_pages_pct से 0 कर सकते हैं।
SET GLOBAL innodb_max_dirty_pages_pct = 0;
इसे बंद करने से 15-30 मिनट पहले सेट करें। यह mysqld को डिस्क पर लिखने के लिए गंदे पृष्ठों की कम से कम संभव राशि देगा।
सुगम # २
डिफ़ॉल्ट रूप से, innodb_fast_shutdown 1. इस विकल्प के लिए तीन मान हैं
- 0: InnoDB एक धीमा शटडाउन, एक पूर्ण पर्ज और एक इन्सर्ट बफ़र शट डाउन करने से पहले करता है।
- 1: InnoDB शटडाउन में इन परिचालनों को छोड़ देता है, एक प्रक्रिया जिसे तीव्र शटडाउन के रूप में जाना जाता है।
- 2: InnoDB अपने लॉग को फ्लश करता है और ठंड को कम कर देता है, जैसे कि MySQL दुर्घटनाग्रस्त हो गया था; कोई प्रतिबद्ध लेन-देन खो नहीं जाता है, लेकिन क्रैश रिकवरी ऑपरेशन अगले स्टार्टअप को अधिक समय लेता है।
प्रलेखन आगे यह कहता है:
धीमी गति से बंद होने में मिनट या घंटों तक लग सकते हैं, जहां डेटा की पर्याप्त मात्रा अभी भी बफर है। MySQL प्रमुख रिलीज़ के बीच अपग्रेड या अपग्रेड करने से पहले धीमी शटडाउन तकनीक का उपयोग करें, ताकि सभी डेटा फ़ाइल पूरी तरह से तैयार हो जाएं, जब नवीनीकरण प्रक्रिया फ़ाइल स्वरूप को अपडेट करती है।
आपातकालीन या समस्या निवारण स्थितियों में innodb_fast_shutdown = 2 का उपयोग करें, यदि डेटा पर भ्रष्टाचार का खतरा है, तो सबसे तेज़ बंद करें।
ज्यादातर मामलों में innodb_max_dirty_pages_pct और innodb_fast_shutdown के लिए चूक ठीक होनी चाहिए।
tmpwatchइसे हटा दिया जाता है, साथ ही इसमें बाकी सब कुछ/tmpएक कॉन्फ़िगर किया गया है जो इसके कॉन्फ़िगर थ्रेशोल्ड से अधिक पुराना है।