क्या मेरे डिफ़ॉल्ट MySQL डेटा निर्देशिका को दूसरे पथ में बदलना संभव है? क्या मैं डेटाबेस को पुराने स्थान से एक्सेस कर पाऊंगा?
क्या मेरे डिफ़ॉल्ट MySQL डेटा निर्देशिका को दूसरे पथ में बदलना संभव है? क्या मैं डेटाबेस को पुराने स्थान से एक्सेस कर पाऊंगा?
जवाबों:
निम्न आदेश का उपयोग करके MySQL को रोकें:
sudo /etc/init.d/mysql stop
/var/lib/mysql
निम्न आदेश का उपयोग करके मौजूदा डेटा निर्देशिका (डिफ़ॉल्ट स्थित ) की प्रतिलिपि बनाएँ :
sudo cp -R -p /var/lib/mysql /newpath
निम्न कमांड के साथ MySQL कॉन्फ़िगरेशन फ़ाइल को संपादित करें:
sudo gedit /etc/mysql/my.cnf # or perhaps /etc/mysql/mysql.conf.d/mysqld.cnf
के लिए प्रविष्टि देखें datadir
, और /var/lib/mysql
नई डेटा निर्देशिका में पथ (जो होना चाहिए ) को बदलें ।
टर्मिनल में, कमांड दर्ज करें:
sudo gedit /etc/apparmor.d/usr.sbin.mysqld
के साथ शुरू लाइनों के लिए देखो /var/lib/mysql
। /var/lib/mysql
नए रास्ते के साथ लाइनों में बदलें ।
फ़ाइल को सहेजें और बंद करें।
कमांड के साथ AppArmor प्रोफाइल को पुनरारंभ करें:
sudo /etc/init.d/apparmor reload
MySQL को कमांड से रीस्टार्ट करें:
sudo /etc/init.d/mysql restart
अब MySQL में लॉगिन करें और आप वही डेटाबेस एक्सेस कर सकते हैं जो आपने पहले किया था।
alias /var/lib/mysql/ -> /newpath/,
त्वरित और आसान करने के लिए:
# Create new directory for MySQL data
mkdir /new/dir/for/mysql
# Set ownership of new directory to match existing one
chown --reference=/var/lib/mysql /new/dir/for/mysql
# Set permissions on new directory to match existing one
chmod --reference=/var/lib/mysql /new/dir/for/mysql
# Stop MySQL before copying over files
service mysql stop
# Copy all files in default directory, to new one, retaining perms (-p)
cp -rp /var/lib/mysql/* /new/dir/for/mysql/
/etc/my.cnf
फ़ाइल संपादित करें , और [mysqld]
इस पंक्ति को जोड़ें:
datadir=/new/dir/for/mysql/
यदि आप CageFS (CloudLinux के साथ या उसके बिना) का उपयोग कर रहे हैं और MySQL निर्देशिका को बदलना चाहते हैं, तो आप इस फ़ाइल में नई निर्देशिका जोड़ना होगा:
/etc/cagefs/cagefs.mp
और फिर इस कमांड को चलाएं:
cagefsctl --remount-all
आपको वर्तमान डेटा को नई निर्देशिका में कॉपी करना होगा और my.cnf
अपने MySQL को बदलना होगा ।
[mysqld]
datadir=/your/new/dir/
tmpdir=/your/new/temp/
जब सर्वर नहीं चल रहा हो तो आपको डेटाबेस को कॉपी करना होगा ।
ln -s
स्थिर प्रतीकात्मक लायनक्स का उपयोग करते हैं तो यह नहीं होगा?
my.cnf
सबसे पहले आपको mysql सर्वर को बंद कर देना चाहिए। जैसे
# /etc/init.d/mysql stop
उसके बाद आपको पुरानी डेटा निर्देशिका (जैसे / var / lib / mysql) incl को कॉपी करना चाहिए। के माध्यम से अपनी नई निर्देशिका के लिए विशेषाधिकार
# cp -R -p /var/lib/mysql /new/data/dir
अब आप /etc/mysql/my.cnf
डेटा नए में बदल सकते हैं और सर्वर को पुनरारंभ कर सकते हैं
# /etc/init.d/mysql restart
अगर मेरी तरह आप डेबियन पर हैं और आप mysql dir को अपने घर या एक रास्ते पर / घर / ... पर ले जाना चाहते हैं, तो समाधान है:
एक दिन मेरे लिए मारीडब प्रलेखन पर समाधान खोजने के लिए। आशा है कि यह कुछ लोगों की मदद करेगा!
मैं अपनी मशीन पर एक डेटाबेस रखना चाहता था, लेकिन मेरी बाहरी हार्ड ड्राइव पर एक डेटा भी है, और दोनों का उपयोग करने के बीच स्विच करता है।
यदि आप Mac पर हैं, और Homebrew का उपयोग करके MySQL स्थापित किया है, तो यह आपके लिए काम करना चाहिए। अन्यथा, आपको datadir
अपनी मशीन पर MySQL के लिए उपयुक्त स्थानों को बदलना होगा ।
#cd to my data dir location
cd /usr/local/var/
#copy contents of local data directory to the new location
cp -r mysql/ /Volumes/myhd/mydatadir/
#temporarily move the old datadir
mv mysql mysql.local
#symlink to the new location
ln -s /Volumes/myhd/mydatadir mysql
फिर जब आप वापस स्विच करना चाहते हैं तो बस करें:
mv mysql mysql.remote
mv mysql.local mysql
और आप फिर से अपने स्थानीय डेटाबेस का उपयोग कर रहे हैं। उम्मीद है की वो मदद करदे।
सबसे पहले mysqld को रोकें
mysql_install_db --user=mysql \
--basedir=/opt/mysql/mysql \
--datadir=/opt/mysql/mysql/data
फिर अपने /etc/mysql/my.cnf
प्रारंभ mysqld में डेटादिर बदलें
नोट:
# 1: शायद आपको अपनी SELinux सेटिंग्स को समायोजित करना होगा (मुसीबतों के मामले में SELinux अक्षम के साथ प्रयास करें), Apparmor (Ubuntu) भी समस्या हो सकती है।
सबसे पहले अपने mysql को बंद करो
sudo service mysql stop
नए स्थान पर mysql डेटा कॉपी करें।
sudo cp -rp /var/lib/mysql /yourdirectory/
यदि आप apparmor का उपयोग करते हैं, तो निम्न फ़ाइल को संपादित करें और निम्नलिखित करें
sudo vim /etc/apparmor.d/usr.sbin.mysqld
बदलें जहाँ / var / lib / by / yourdirectory / फिर फ़ाइल में मौजूद नहीं होने पर follwoing जोड़ें
/yourdirectory/mysql/ r,
/yourdirectory/mysql/** rwk,
कमांड के साथ फाइल को सेव करें
:wq
फ़ाइल my.cnf को संपादित करें
sudo vim /etc/mysql/my.cnf
बदलें जहाँ / var / lib / by / yourdirectory / फिर कमांड के साथ सहेजें
:wq
अंत में mysql शुरू करें
sudo service mysql start
@ छापे 0 के बारे में अधिक, अनुकूलन ici
यह समाधान कार्यक्षेत्र का उपयोग करके विंडोज 7 में काम करता है। ऐसा करने के लिए आपको व्यवस्थापक विशेषाधिकार की आवश्यकता होगी। यह एक जंक्शन बनाता है (एक शॉर्टकट की तरह) जहाँ भी आप वास्तव में अपने डेटा को स्टोर करना चाहते हैं
कार्यक्षेत्र खोलें और इंस्टेंस का चयन करें - स्टार्टअप / शटडाउन सर्वर बंद करें
Https://bitum.com/junctionmaster.php से जंक्शन मास्टर स्थापित करें
C: \ ProgramData \ MySQL \ MySQL सर्वर 5.6 पर नेविगेट करें
डेटा पर राइट क्लिक करें और "MOVE और फिर लिंक फ़ोल्डर को चुनें ..." के लिए चेतावनी बिंदु गंतव्य को स्वीकार करें "उद्धरण के बिना यहां आपकी नई डेटा निर्देशिका" मूव और लिंक पर क्लिक करें
अब "बिना उद्धरण के यहां आपकी नई डेटा निर्देशिका" पर जाएं
डेटा टैब पर राइट क्लिक करें सिक्योरिटी टैब पर जाएं क्लिक करें एडिट टाइप टाइप नेटवर्क्स सर्विस पर क्लिक करें, फिर नामों पर क्लिक करें ओके पर क्लिक करें पूर्ण नियंत्रण की अनुमति दें चेकबॉक्स पर और फिर ओके पर क्लिक करें।
कार्यक्षेत्र पर वापस जाएं और सर्वर शुरू करें
इस विधि ने विंडोज 7 एंटरप्राइज पर MySQL वर्कबेंच 6.2 का उपयोग करके मेरे लिए काम किया।
सब कुछ @ user1341296 ने कहा, प्लस ...
आप बेहतर नहीं बदल सकते हैं /etc/mysql/my.cnf
इसके बजाय आप नई फ़ाइल बनाना चाहते हैं /etc/mysql/conf.d/ext.cnf
(कोई भी नाम, लेकिन एक्सटेंशन होना चाहिए cnf
)
और इसमें अपना परिवर्तन करें:
[mysqld]
datadir=/vagrant/mq/mysql
इस तरह
यदि आप एक Windows उपयोगकर्ता हैं और यह पता लगाने के लिए यहां उतरे हैं कि सभी उत्तर लिनक्स उपयोगकर्ताओं के लिए हैं, तो निराश न हों! मैं आपको समय बर्बाद नहीं करने दूंगा जिस तरह से मैंने किया था।
समाधान से पहले थोड़ी बकवास बात:
MySQL आपके द्वारा बनाए गए विभिन्न डेटाबेस के डेटा को संग्रहीत करने के लिए एक डेटा निर्देशिका का उपयोग करता है। खैर, अंत में, उन्हें एप्लिकेशन और फ़ाइल प्रारूप में कुछ जोड़े हुए बाजीगरों के साथ फ़ाइलों के रूप में उन्हें संग्रहीत करना होगा ताकि डेटाबेस के वादे को सुनिश्चित किया जा सके कि आपने डेटाबेस कक्षाओं में सीखा है।
अब आप यह सुनिश्चित करना चाहते हैं कि बड़े डेटाबेस को संग्रहीत करने के लिए पर्याप्त जगह है जो आप भविष्य में बना सकते हैं, और इसलिए आपने सोचा, अरे! मैं इसे एक और ड्राइव में डालना चाहता हूं जिसे अधिक स्थान मिला है।
तो आप निम्न कार्य करें।
चरण - 1 : MySQL सेवा को रोकना।
Window Key + R - will open Run
servies.msc - will open services manager
Locate MySQL80 (80 is for version 8.0, look for the one you've).
Stop it. (Right click, Stop)
चरण - 2 : वर्तमान डेटा निर्देशिका का पता लगाना
Goto C:\ProgramData\MySQL\MySQL Server 8.0
डिफ़ॉल्ट रूप से, यहां एक फ़ोल्डर होना चाहिए जिसका नाम है Data
, यह वह है जो डिफ़ॉल्ट सेटिंग में MySQL द्वारा उपयोग किया जाता है (बशर्ते कि उन्हें कोई और बेहतर स्थान नहीं मिला है), लेकिन चलो इसे देखें।
खोज my.ini
फ़ाइल , वहीं होनी चाहिए।
इसे एक संपादक में खोलें (नोटपैड ++ शायद)।
datadir
फ़ाइल में पता करने के लिए एक CTRL + F करें ।
यहां जो कुछ भी उल्लेख किया गया है वह डेटा निर्देशिका के लिए MySQL द्वारा वर्तमान में उपयोग किया जाने वाला वास्तविक स्थान है। यही आप बदलना चाहते हैं।
चरण - 3 : एक नई डेटा निर्देशिका के साथ इसे प्रतिस्थापित करना।
मान लें कि आप चाहते हैं कि आपकी नई डेटा निर्देशिका W: __ MySQL_Data हो। datadir
मान को my.ini
फ़ाइल में इस मान में बदलें
। पिछले मान को टिप्पणी में रखें ताकि आपको इसे याद न रखना पड़े।
# Path to the database root
# datadir=C:/ProgramData/MySQL/MySQL Server 8.0/Data
datadir=W:/__MySQL_Data
अब xcopy
डिफ़ॉल्ट datadir
को कॉपी करने के लिए उपयोग करें W:\
। लॉन्च कमांड प्रॉम्प्ट (विंडो + आर, सेमी, एन्टर)
>> xcopy "\C:\ProgramData\MySQL\MySQL Server 8.0" "W:\" /E /H /K /O /X
और datadir
आपके द्वारा बदले गए नए मूल्य पर कॉपी किए गए फ़ोल्डर का नाम बदलें । यहाँ:W:/__MySQL_Data
बस कॉपी क्यों नहीं? अच्छी तरह से क्योंकि यह COOL नहीं है !, इससे आपको कॉपी किए गए फ़ोल्डर पर अनुमतियों को खोने में मदद नहीं मिलती है, ताकि जब आप पुनरारंभ करें MySQL80
, तो यह एक बेवकूफ त्रुटि नहीं देगा: "स्थानीय कंप्यूटर पर MySQL80 सेवा शुरू हुई और फिर बंद हो गई। कुछ सेवाएं स्वतः बंद हो जाती हैं अगर वे अन्य सेवाओं या कार्यक्रमों के उपयोग में नहीं हैं। " - सौजन्य: Microsoft
चरण - 4 : सेवा को फिर से शुरू करना
Well, go back to the Services Manager to Start again,
"MySQL80" that you stopped, to restart it again.
चरण - 5 : हो गया! अब काम पर लौट आइए !!
मशीनों को अपग्रेड करते समय, बॉक्स से बॉक्स में स्थानांतरित करते समय मुझे अक्सर ऐसा करने की आवश्यकता होती है। एक बेहतर स्थान पर जाने के लिए / var / lib / mysql के अलावा, मुझे अक्सर एक पुराने MySQL अधिष्ठापन से पुराने DB तालिकाओं को पुनर्स्थापित करने की आवश्यकता होती है। ऐसा करने के लिए...
हमें MySQL को /home
डायरेक्टरी में स्थानांतरित करना पड़ा क्योंकि यह एक अन्य भौतिक डिस्क से मैप की गई थी। लाइव को सरल बनाने के लिए, my.cnf में निर्देशिका बदलने के बजाय, हमने नई निर्देशिका /home/mysql
को मूल निर्देशिका के स्थान पर मैप किया है /var/lib/mysql
। यह हमारे लिए एक आकर्षण की तरह काम करता है (CentOS 7.1 पर परीक्षण किया गया)।
नई dir बनाएं और सही अनुमतियां सेट करें।
mkdir -p /home/mysql
chmod 755 /home/mysql
chown mysql:mysql /home/mysql
चल रहा है तो MySQL बंद करो।
systemctl stop mysql
डेटा को स्थानांतरित करें।
mv -f /var/lib/mysql/* /home/mysql
एक स्थायी माउंट बनाएं और इसे निष्पादित करें।
echo "/home/mysql /var/lib/mysql none bind 0 0" >> /etc/fstab
mount -a
सर्वर को पुनरारंभ करें।
systemctl start mysql
यदि आप यह प्रोग्रामेटिक रूप से करना चाहते हैं (कोई मैनुअल पाठ प्रविष्टि gedit के साथ नहीं) तो यहां एक उपयोक्ता के लिए एक संस्करण है जो उपयोक्ता 131341296 के उत्तर पर आधारित है:
FROM spittet/ruby-mysql
MAINTAINER you@gmail.com
RUN cp -R -p /var/lib/mysql /dev/shm && \
rm -rf /var/lib/mysql && \
sed -i -e 's,/var/lib/mysql,/dev/shm/mysql,g' /etc/mysql/my.cnf && \
/etc/init.d/mysql restart
यहां डॉकर हब पर उपलब्ध: https://hub.docker.com/r/richardjecooke/ruby-mysql-in-memory/
सबसे पहले, आपको पता होना चाहिए कि आपकी कॉन्फ़िग फ़ाइल कहाँ है? आपकी कॉन्फ़िग फ़ाइल कहाँ है?
यदि आप apt-get या yum install pt के साथ स्थापित करते हैं
कॉन्फ़िगरेशन फ़ाइल में दिखाई दे सकता है
/etc/mysql/my.cnf
datafile में दिखाई दे सकता है
/ Var / lib / mysql
और आपको क्या करना चाहिए
और फिर नौकरी की।
लेकिन अगर आपने इसे उपयुक्त या यम के साथ स्थापित नहीं किया है, तो direcotry इसे पसंद नहीं कर सकता है, और आप mysql फ़ाइलों को इसके साथ पा सकते हैं
जिसमें mysql
SuSE 13.1 के तहत, यह mysql डेटा डायरेक्टरी को कहीं और स्थानांतरित करने के लिए ठीक काम करता है, उदाहरण के लिए / home / example_user /, और इसे अधिक जानकारीपूर्ण नाम देने के लिए:
में / var / lib /:
# mv -T mysql /home/example_user/mysql_datadir
# ln -s /home/example_user/mysql_datadir ./mysql
मैंने अपने आप को पुनः आरंभ किया:
# systemctl restart mysql.service
लेकिन संदेह है कि यह भी आवश्यक नहीं था।
एक वातावरण के लिए मैंने mysql डेटा निर्देशिका को नए स्थान पर बदल दिया, लेकिन mysql सर्वर के पुनरारंभ के दौरान, इसमें समय लग रहा था। इसलिए मैंने पोर्ट की जाँच की, और पाया कि अन्य प्रक्रिया mysql पोर्ट पर सुन रही थी। इसलिए मैंने इस प्रक्रिया को मार दिया और mysql सर्वर को फिर से शुरू किया और यह अच्छी तरह से काम किया।
मैंने डेटा निर्देशिका को बदलने के लिए निम्न चरणों का पालन किया जो उत्कृष्ट काम करता है। लिनक्स में mysql डेटा निर्देशिका बदलें
उपरोक्त चरण नींव और बुनियादी हैं। मैंने उनका अनुसरण किया और अभी भी "mysql शुरू करने में विफल रहा" की त्रुटि मिली।
Mysql डेटा को संग्रहीत करने के लिए नए फ़ोल्डर के लिए, आपको यह सुनिश्चित करने की आवश्यकता है कि फ़ोल्डर में अनुमतियाँ और स्वामित्व mysql: mysql है।
इसके अलावा, अगर यह, कहना, / डेटा / mysql / की mysql की मूल निर्देशिका की अनुमति और स्वामित्व की जाँच करने की आवश्यकता है। यहां / डेटा / निर्देशिका रूट: रूट होनी चाहिए। मैंने / mysql की मूल निर्देशिका के स्वामित्व को बदलने के बाद "mysql को प्रारंभ करने में विफल" की त्रुटि को ठीक किया। मेरे VM का OS RHEL 7.6 है।
डेटादिर को सिम्बल करना भी संभव है। कम से कम macOS, देव वातावरण में।
(homebrew) उदा
# make sure you're not overwriting anything important, backup existing data
mv /usr/local/var/mysql [your preferred data directory]
ln -s [your preferred data directory] /usr/local/var/mysql
Mysql को पुनरारंभ करें।
यदि आप एसई लाइनक्स का उपयोग कर रहे हैं, तो इसे संपादन / आदि / सेलिनक्स / कॉन्फिग द्वारा अनुमेय मोड पर सेट करें और SELINUX को बदलकर = SELINUX को लागू करें = अनुमेय
datadir
संपत्ति के परिवर्तन को रोकने वाले कुछ अन्य मुद्दे हैं