Ubuntu सर्वर 10.04 में MySQL डेटा निर्देशिका बदलना


9

जब मैं ubuntu सर्वर 10.04 में डेटा निर्देशिका को बदलने की कोशिश कर रहा था तो मुझे निम्न त्रुटि मिल रही थी।

100809 19:33:00 [Note] Plugin 'FEDERATED' is disabled.
/usr/sbin/mysqld: Can't find file: './mysql/plugin.frm' (errno: 13)
100809 19:33:00 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
100809 19:33:00  InnoDB: Operating system error number 13 in a file operation.
InnoDB: The error means mysqld does not have the access rights to
InnoDB: the directory.
InnoDB: File name ./ibdata1
InnoDB: File operation call: 'create'.
InnoDB: Cannot continue operation.

2
... और अपने प्रश्न है? ध्यान दें कि यदि आप केवल फ़ोल्डरों की सामग्री, और फ़ाइलों को स्थानांतरित नहीं करते हैं, तो आप सभी InnoDB तालिका सामग्री खो देंगे।
बॉब

कोई सवाल / चम्मच नहीं है। बस लगा कि यह यहां के लोगों के लिए दिलचस्प हो सकता है। InnoDB तालिका सामग्री के बारे में अच्छी बात!

2
यदि आप अपने स्वयं के प्रश्न को पूछना और उत्तर देना चाहते हैं जो ठीक है, लेकिन वास्तव में प्रश्न पूछने के लिए समय लें और उत्तर के रूप में अपना उत्तर प्रदान करें।
Zoredache

जवाबों:


8

अनुमति के बारे में कुछ सामान्य भ्रम के बाद ओपी ने महसूस किया कि समस्या यह नहीं थी कि उसके पास अनुमति और रास्ते के अधिकार नहीं थे, लेकिन यह कि AppArmor MySQL को नए स्थान पर पढ़ने और लिखने से रोक रहा था।

यह उसका समाधान है:

पहले MySQL बंद करो तो अजीब कुछ भी नहीं होता है जब आप fiddling कर रहे हैं:

$ sudo stop mysql

फिर सभी डेटाबेस निर्देशिकाओं को उनके नए घर में स्थानांतरित करें:

$ sudo mv /var/lib/mysql/<all folders> /new-mysql-dir/

फ़ाइलों को स्थानांतरित न करें, वे mysql द्वारा उत्पन्न होंगे, बस फ़ोल्डर्स (जो डेटाबेस हैं) को स्थानांतरित करें।

फिर विनम्रता से AppArmor से पूछें कि mysql को नए फ़ोल्डर का उपयोग करने की अनुमति दें:

$ sudo vim /etc/apparmor.d/usr.sbin.mysqld
  >> add lines
     /new-mysql-dir/ r,
     /new-mysql-dir/** rwk,

फिर mysql को बताएं कि दातादिर स्थानांतरित हो गया है:

$ sudo vim /etc/mysql/my.cnf 
  >> change the line
     datadir=/var/lib/mysql
  >> to
     datadir=/my-new-db-dir/

ध्यान दें: अपने डेटाबेस सेटअप के आधार पर आपको innodb-data-home-dir आदि को भी बदलना पड़ सकता है।

फिर नए सेटिंग्स को पढ़ने के लिए AppArmor को पुनरारंभ करें:

$ sudo /etc/init.d/apparmor restart

और नए डेटादिर का उपयोग करके MySQL को फिर से शुरू करें:

$ sudo start mysql

2
आप फ़ाइलों को उनके नए स्थान से जोड़कर डेटाबेस को चालू और चालू रख सकते हैं, उन्हें स्थानांतरित करने के बजाय ... जब तक कि दो डेटाडिर स्थान अलग-अलग विभाजन पर नहीं होते।
cpbills

केवल निर्देशिका को स्थानांतरित करने का निर्देश उस मामले में सटीक नहीं है जिस स्थिति में आप निर्दोष का उपयोग कर रहे हैं। उस स्थिति में आपको इनोडोड डाटा को स्थानांतरित करना होगा और फाइल को असवेल (ibdata *, ib_logfile *) लॉग करना होगा।
हिलेल

मेरे लिए दूसरों के लिए लापरवाह के रूप में एक नोट। आपको AppArmor कॉन्फ़िग में पथ में अनुगामी स्लैश रखना /new-mysql-dir/ rहोगा अन्यथा इसे अस्वीकार कर दिया जाएगा। बेसिक लिनक्स सामान लेकिन मैं कभी भी ट्रेलिंग स्लैश को सही नहीं कर सकता।
जेफ

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