निर्धारित करें कि किस MySQL कॉन्फ़िगरेशन फ़ाइल का उपयोग किया जा रहा है


142

क्या यह निर्धारित करने के लिए कोई कमांड है कि वर्तमान में MySQL 5.0 किस कॉन्फ़िगरेशन फ़ाइल का उपयोग कर रहा है?

जवाबों:


60

यदि आप लिनक्स पर हैं, तो straceउदाहरण के लिए 'mysqld' के साथ शुरू करें strace ./mysqld

अन्य सभी सिस्टम कॉल के बीच, आपको कुछ ऐसा मिलेगा:

stat64("/etc/my.cnf", 0xbfa3d7fc)       = -1 ENOENT (No such file or directory)
stat64("/etc/mysql/my.cnf", {st_mode=S_IFREG|0644, st_size=4227, ...}) = 0
open("/etc/mysql/my.cnf", O_RDONLY|O_LARGEFILE) = 3

तो, जैसा कि आप देख सकते हैं। यह .cnf फ़ाइलों को सूचीबद्ध करता है, कि यह उपयोग करने का प्रयास करता है और अंत में उपयोग करता है।


9
और बिना किसी गड़बड़ के चल रहे सिस्टम पर ऐसा कैसे करें?
मिलान बाबूसकोव

5
@ MilanBabuškov आपको चलना चाहिए ps auxfऔर MySQL के लिए निष्पादित कमांड को ढूंढना चाहिए । आमतौर पर यह कुछ इस तरह दिखता है mysqld --basedir=/usr/local/mysql ...(ध्यान दें ... इसका मतलब है कि कमांड में अधिक झंडे हो सकते हैं लेकिन मैं इसे सूचीबद्ध नहीं करूँगा) एक बार जब आप इसे पा लेते हैं, तो पूरी चीज़ की प्रतिलिपि बनाएँ और फिर MySQL को बंद कर दें। यदि आप लिनक्स पर हैं तो यह /etc/init.d/mysqld stopया है mysqladmin -u root -p shutdown। फिर straceआपके द्वारा कॉपी की गई mysql कमांड से रन करें। तो यह ऐसा दिखेगा:strace mysqld --basedir=/usr/local/mysql
हेंगजी

मेरे पास open(...लाइन नहीं है । इसके बजाय मेरे पास 4 लाइनें हैं जो समाप्त होती हैं = -1 Err#2। अब आपको कैसे पता चलेगा कि कौन सी फ़ाइल भरी हुई है?
mgPePe

4
fwiiw, एक मैक पर आप स्ट्रेस के बजाय dtruss का उपयोग कर सकते हैं: sudo dtruss mysqld 2>&1|grep my.cnf@mgPePe, आउटपुट आउटपुट का अर्थ है कि कोई भी फाइल नहीं मिली थी इसलिए किसी को खोला नहीं गया था।
महत्वपूर्ण

268

शानदार "उच्च प्रदर्शन MySQL" O'Reilly पुस्तक से लिया गया:

$ which mysqld
/usr/sbin/mysqld

$ /usr/sbin/mysqld --verbose --help | grep -A 1 "Default options"
Default options are read from the following files in the given order:
/etc/mysql/my.cnf ~/.my.cnf /usr/etc/my.cnf

2
और मुझे लगता है कि अंतिम फ़ाइल सूचीबद्ध जीत है?
mlissner

5
यह अजीब है .. मैंने उनमें से प्रत्येक और सभी की जाँच की और वे सभी खाली हैं (मेरे मैक पर) .. किसी भी विचार क्यों?
abbood

7
यह लोडेड कॉन्फ़िगरेशन नहीं देता है। बल्कि संभावित कस्टम कॉन्फ़िगरेशन जो लोड हो सकते हैं
mgPePe

4
मुझे नहीं लगता कि यह निर्दिष्ट फाइलों को सूचीबद्ध करेगा !includedir। मैं यह पता लगाने की कोशिश कर रहा हूं कि !includedirमेरी /etc/mysql/my.cnfफाइल में निर्देश काम क्यों नहीं कर रहा है।
बुटिक बटुकस

2
आपको mysqldपूर्ण पथ के साथ कॉल करने की आवश्यकता क्यों होगी ?!
पैनेटर

65

यदि आप mysql --verbose --help | lessइसे चलाते हैं, तो यह आपको लाइन 11 के बारे में बताएगा कि .cnfयह किन फ़ाइलों के लिए दिखेगा।

आप यह mysql --print-defaultsदिखाने के लिए भी कर सकते हैं कि कॉन्फ़िगरेशन मान कैसे उपयोग करेगा। यह पहचानने में भी उपयोगी हो सकता है कि कौन सी फाइल कौन सी फाइल लोड कर रही है।


1
+1 क्योंकि यह mysql ऐसा करने का अनुशंसित तरीका है। खिड़कियों के लिए एक सरल तरीका यह है कि यदि आप सामग्री का विश्लेषण करना चाहते हैं तो आउटपुट को फ़ाइल में डंप कर दें।
kta

खिड़कियों पर, इसने मुझे स्थानों की एक सूची बताई, लेकिन सही नहीं है, इसके बजाय मैं mysql कार्यक्षेत्र ( stackoverflow.com/a/17953456/1504300 ) के साथ खोजने का प्रबंधन करता हूं ।
वास्तव में

3
यह निश्चित नहीं है कि यह बात होनी चाहिए, लेकिन आप mysqldइसके बजाय इस्तेमाल कर सकते हैंmysql
nl-x

2
और अभी भी विंडोज में मुझे अनुभव है कि my.ini को ProgramData डायरेक्टरी से पढ़ा जाता है, और यह यहाँ सुझाए गए उत्तर में नहीं दिखता है।
nl-x

2
के लिए उत्कीर्ण mysqld --print-defaults, यह मुझे वही दिया जो मैं चाहता था जब मैंने इस प्रश्न को गुगलाया ।
प्रति लुंडबर्ग

28

मैं विंडोज पर हूं और मैंने MySQL समुदाय का सबसे हालिया संस्करण 5.6 स्थापित किया है

प्रशासनिक उपकरण> सेवा> MySQL56> राइट क्लिक> गुण पर जाने और निष्पादन योग्य के लिए पथ की जाँच करने के लिए मैंने क्या देखा था

"C: / Program Files / MySQL / MySQL Server 5.6 / bin \ mysqld" --defaults-file = "C: \ ProgramData \ MySQL \ MySQL सर्वर 5.6 \ my.ini" MySQL56


यह MySQL 5.7 के लिए भी काम करता है। यह C:\ProgramData\MySQL\MySQL Server 5.7\my.iniडिफ़ॉल्ट रूप से है।
रेयान

18

एक विकल्प का उपयोग करना है

mysqladmin variables

2
यह वास्तव में यह नहीं कहता कि मेरे चर में cnf फ़ाइल कहाँ है। मैं वर्तमान में MySQL 5.5.20 चला रहा हूं। हालाँकि, मैं कह सकता हूँ कि एक बार यह काम किया था क्योंकि मैंने इसे पहले चर में देखा है। शायद 5.5 में जाने के बाद से कुछ बदल गया है।
हेंगजी

13

mysqld --help --verbose खतरनाक है। आप आसानी से रनिंग इंस्टेंस के लिए पिडफाइल को ओवरराइट कर सकते हैं! इसका उपयोग --pid-file = XYZ के साथ करें

यदि आप 1 से अधिक इंस्टेंस चला रहे हैं, तो ओह, और आप वास्तव में इसका उपयोग नहीं कर सकते। यह केवल आपको डिफ़ॉल्ट मान दिखाएगा।

वास्तव में इसके बारे में अच्छा लेख:

MySQL कॉन्फ़िगरेशन फ़ाइल कैसे खोजें?


9

बस ubuntu पर एक त्वरित परीक्षण किया:

  • mysql-server स्थापित किया, जिसने /etc/mysql/my.cnf बनाया

  • mysqld --verbose --help | grep -A 1 "डिफ़ॉल्ट विकल्प"

110112 13:35:26 [नोट] प्लगइन 'फेडर्ड' अक्षम है।
डिफ़ॉल्ट विकल्प दिए गए क्रम में निम्नलिखित फाइलों से पढ़े जाते हैं: /etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~ / .my.cnf

  • बनाया /etc/my.cnf और /usr/etc/my.cnf, प्रत्येक एक अलग पोर्ट नंबर के साथ

  • mysql को पुनरारंभ किया गया - यह /usr/etc/my.cnf में पोर्ट नंबर सेट का उपयोग कर रहा था

इस बीच mysqld को -defaults-file विकल्प भी मिला। यदि आप वहां एक कॉन्फ़िग फ़ाइल निर्दिष्ट करते हैं, तो केवल उसी का उपयोग किया जाएगा, भले ही उसके द्वारा वापस लौटाया जाए / usr / sbin / mysqld --verbose --help | grep -A 1 "डिफ़ॉल्ट विकल्प"


4

MySQL कार्यक्षेत्र का उपयोग करके इसे "सर्वर स्थिति" के अंतर्गत दिखाया जाएगा: यहाँ छवि विवरण दर्ज करें


3

मुझे यह वास्तव में उपयोगी लगा:

  1. के तहत सेवाओं में MySQL प्रक्रिया का पता लगाएं Control Panel -> Administration Tools
  2. राइट माउस क्लिक करें और चुनें Properties
  3. क्लिक करें और चुनें Path to executableऔर देखें कि क्या इसमें पथ शामिल हैmy.ini/my.cfg

1
यह मेरे लिए मेरे सर्वर 2008 स्थापित पर काम किया, धन्यवाद।
16-18 को delliottg

2

कुछ सर्वरों में एकाधिक MySQL संस्करण स्थापित और कॉन्फ़िगर किए गए हैं। सुनिश्चित करें कि आप यूनिक्स कमांड के साथ चल रहे सही संस्करण के साथ काम कर रहे हैं:

ps -ax | grep mysql

1

एक सेवा के रूप में mysql के साथ विंडोज़ सर्वर चलाने वाले लोगों के लिए, यह पता लगाने का एक आसान तरीका कि आप कौन सी कॉन्फ़िगर फ़ाइल चला रहे हैं, सेवाओं के नियंत्रण कक्ष को खोलने के लिए, अपनी mysql सेवा ढूंढें (मेरे मामले में 'MYSQL56'), राइट क्लिक करें और गुण क्लिक करें । फिर यहां से आप "पथ से निष्पादन योग्य" की जांच कर सकते हैं जिसमें एक defaults-fileस्विच होना चाहिए जो आपकी कॉन्फ़िगरेशन फ़ाइल को इंगित करता है।


1

अगर आप मैक चला रहे हैं तो बस इससे भी हासिल किया जा सकता है:

sudo dtruss mysqld 2>&1 | grep cnf

1

यदि आप विंडोज पर हैं, तो आप Sysinternals procmon का उपयोग कर सकते हैं । इसे खोलें और फ़िल्टर सेटिंग को इस तरह कॉन्फ़िगर करें, फिर "जोड़ें" पर क्लिक करें। अब procmon mysqld की निगरानी करेगा।

यहाँ छवि विवरण दर्ज करें

अब अपने mysql सर्वर को सामान्य रूप में शुरू करें। Procmon mysql के बैकग्राउंड ऑपरेशन्स को कैप्चर करेगा। "मेरी" खोजें। परिणाम के परिणाम फलक में और आपको निम्न जैसा कुछ मिलेगा:

यहाँ छवि विवरण दर्ज करें

यह स्पष्ट है कि mysql बदले में कॉन्फ़िगरेशन फ़ाइलों की एक सूची खोजता है। मेरे मामले में यह C:\mysql-5.7.19-winx64\my.cnfसफलतापूर्वक मिला है इसलिए यह इस एक का उपयोग कर रहा है।


यह मूल रूप से विंडोज़ के लिए शीर्ष उत्तर के बराबर है। धन्यवाद।
एरोन वालेंटाइन

0

मैं स्थापित mysql का उपयोग करें काढ़ा स्थापित mysql

mysqld --verbose --help | less

और यह दिखाता है:

यहाँ छवि विवरण दर्ज करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.