2012-02-28 12 views
6

हाय मैं किसी अन्य सर्वर mysql डेटाबेस स्थानांतरित करने के लिए है,mysql डेटाबेस को सबसे आसान और सबसे तेज़ तरीका कैसे स्थानांतरित करें?

यह मैं दोनों सर्वर पर रूट पहुँच सकते हैं लगभग 5 जीबी

है?

$ mysqldump -u user -p db-name > db-name.out 

कॉपी db-name.out फ़ाइल दूरस्थ MySQL सर्वर के लिए SFTP/ssh का उपयोग कर:

$ scp db-name.out [email protected]x.com:/backup 

डेटाबेस पुनर्स्थापित

+0

मुझे लगता है कि इस तरह के प्रश्न http://dba.stackexchange.com/ पर हैं, मैं इसे माइग्रेट करने के लिए आगे बढ़ूंगा लेकिन मेरे पास रिप: पी या शायद नहीं है http://www.Superuser.com लेकिन मुझे डेटाबेस के विशिष्ट होने के बाद से पूर्व पर संदेह होगा। – Jordan

उत्तर

22

आमतौर पर आप इस प्रकार एक डेटाबेस प्रतिलिपि बनाने के लिए mysqldump चलाने के लिए और बैकअप दूरस्थ सर्वर पर (SSH पर लॉग इन):

$ mysql -u user -p db-name < db-name.out 

या

$ mysql -u user -p 'password' db-name < db-name.out 

मैं एक कंप्यूटर/सर्वर से दूसरे कंप्यूटर पर एक MySQL डेटाबेस कैसे कॉपी करूं?

संक्षिप्त उत्तर यह है कि आप ssh या mysql क्लाइंट का उपयोग कर किसी कंप्यूटर/सर्वर से दूसरे डेटाबेस में डेटाबेस कॉपी कर सकते हैं।

आप mysqldump और mysql आदेशों का उपयोग करते एक पास में सब से ऊपर 3 कमांड चलाने कर सकते हैं (असुरक्षित विधि, अगर आप वीपीएन का उपयोग कर या अपने नेटवर्क पर भरोसा कर रहे हैं केवल का उपयोग करें):

$ mysqldump db-name | mysql -h remote.box.com db-name 

उपयोग ssh अगर आप डॉन '

$ mysqldump db-name | ssh [email protected] mysql db-name 

या

$ mysqldump -u username -p'password' db-name | ssh [email protected] mysql -u username -p'password db-name 

आप c: टी रिमोट mysql सर्वर (सुरक्षित विधि) के लिए सीधी पहुँच है

$ mysqldump db-name foo | ssh [email protected] mysql bar 

या

$ mysqldump -u user -p'password' db-name foo | ssh [email protected] mysql -u user -p'password' db-name foo 

लगभग सभी आदेशों के तहत पाइप का उपयोग कर चलाया जा सकता है: एक बस दूरस्थ डाटाबेस (और दूरदराज के mysql सर्वर remote.box.com) को foo नामक तालिका बार कहा जाता है एक ही सिंटैक्स का उपयोग कॉपी यूनिक्स/लिनक्स ओएसई।

Reference

सादर से

अधिक,

+3

सुनिश्चित करें कि आप अपने डंप पर विस्तारित आवेषण विकल्प का उपयोग करें (मुझे लगता है कि यह डिफ़ॉल्ट रूप से हो सकता है, लेकिन सकारात्मक नहीं हो सकता है) या आपकी बहाली की गति में काफी कमी आएगी। –

+2

* यहां से लिया गया: http://www.cyberciti.biz/tips/howto-copy-mysql-डेटा-remote- सर्वर।एचटीएमएल –

13

आप रूट है, तो आप इसे जल्दी करने के लिएmysqldump से बचने के मिल सकती है। आप गंतव्य सर्वर पर डीबी बना सकते हैं, और डेटाबेस फ़ाइलों को सीधे कॉपी कर सकते हैं।

[[email protected]]# /etc/init.d/mysqld stop 
[[email protected]]# cd /var/lib/mysql/[databasename] 
[[email protected]]# scp * [email protected]:/var/lib/mysql/[databasename] 
[[email protected]]# /etc/init.d/mysqld start 

महत्वपूर्ण यहाँ चीजें हैं:: दोनों सर्वर पर mysqld बंद करो डीबी फाइलों को कॉपी करने से पहले, सुनिश्चित करें कि फ़ाइल का स्वामित्व बनाने और अनुमतियों पर mysqld शुरू करने से पहले गंतव्य पर सही हैं मान लिया जाये कि user गंतव्य सर्वर के mysql निर्देशिका की पहुंच है गंतव्य सर्वर

[[email protected]]# chown mysql:mysql /var/lib/mysql/[databasename]/* 
[[email protected]]# chmod 660 /var/lib/mysql/[databasename]/* 
[[email protected]]# /etc/init.d/mysqld start 
समय यहाँ प्राथमिकता किया जा रहा है, संपीड़न के उपयोग के समय संपीड़न/विसंपीड़न ( gzip की तरह कुछ के साथ) के लिए इंतजार खो कि क्या पर निर्भर करेगा समय असम्पीडित डेटा संचारण बर्बाद से अधिक हो जाएगा के साथ

; वह है, आपके कनेक्शन की गति।

+0

यह अब तक का सबसे आसान तरीका है। यकीन नहीं है कि यह क्यों ऊपर नहीं है। MySQL सर्वर तब मूल की कार्बन प्रति है। मैंने बस एक पूरे वेबसर्वर को लगभग 5 मिनट में एक अद्वितीय सर्वर पर क्लोन किया। – David

+0

मैंने उपर्युक्त कदम उठाए, लेकिन मुझे "त्रुटि 1146 (42S02) मिलती है: तालिका 'sample.user' मौजूद नहीं है", जब मैं उपयोगकर्ता तालिका मुद्रित करने का प्रयास करता हूं। कोई उपाय ?? – Bathakarai

+0

विचार: गलत पथ में उपयोगकर्ता तालिका के लिए फ़ाइलें, गलत फ़ाइल अनुमतियां, या सर्वर अलग-अलग कॉन्फ़िगर किए गए हैं। – Umbrella

2

बैकअप के लिए एक स्वचालित मार्ग के लिए अपने MySQL डेटाबेस:

बैकअप के किसी भी रूप करने के लिए आवश्यक शर्तें चल सिस्टम के प्रदर्शन में बाधा उत्पन्न बिना कार्य को पूरा या उपयोगकर्ताओं के साथ हस्तक्षेप करने के लिए दिन की आदर्श समय मिल रहा है। उस नोट पर, डेटाबेस के आकार को ड्राइव की I/O गति के साथ ध्यान में रखा जाना चाहिए - डेटाबेस बढ़ने के साथ यह तेजी से अधिक महत्वपूर्ण हो जाता है (एक अन्य कारक जो दिमाग में आता है वह ड्राइव की संख्या है, जैसा कि वैकल्पिक ड्राइव जहां डेटाबेस संग्रहीत नहीं होता है, वह सिर को पढ़ने और लिखने के लिए गति के कारण गति में वृद्धि करेगा।) इस पठनीय को रखने के लिए मैं मानता हूं कि डेटाबेस एक प्रबंधनीय आकार (100 एमबी) और काम का है पर्यावरण 9 बजे से शाम 5 बजे नौकरी है, बिना किसी वास्तविक तनाव या अन्य घंटों के चलने वाले सिस्टम।

पहला कदम रूट विशेषाधिकारों के साथ आपकी स्थानीय मशीन में लॉग इन करना होगा। एक बार रूट खोल पर, एक MySQL उपयोगकर्ता को केवल विशेषाधिकार पढ़ने के साथ बनाया जाना होगा। ऐसा करने के लिए आदेश का उपयोग MySQL खोल दर्ज करें:

mysql -uroot -ppassword 

इसके बाद, एक उपयोगकर्ता केवल पढ़ने के लिए डेटाबेस का बैकअप लिया जाना चाहिए करने के लिए विशेषाधिकार के साथ बनाया जा करने की आवश्यकता होगी। इस मामले में, किसी उपयोगकर्ता को स्क्रिप्ट या प्रक्रिया का उपयोग बाद में किसी विशिष्ट डेटाबेस को असाइन करने की आवश्यकता नहीं होती है। MySQL खोल में इन आदेशों, पूर्ण पढ़ने के लिए विशेषाधिकार के साथ एक उपयोगकर्ता बनाने के लिए दर्ज करें:

grant SELECT on *.* TO [email protected] IDENTIFIED BY ' backuppassword'; 
FLUSH PRIVILEGES; 
बनाया MySQL उपयोगकर्ता के साथ

, यह MySQL खोल से बाहर निकलने और बाहर निकलने का उपयोग कर जड़ खोल में वापस छोड़ने के लिए सुरक्षित है। यहां से, हमें स्क्रिप्ट बनाने की आवश्यकता होगी जिसे हम अपने बैकअप आदेशों को चलाने के लिए चाहते हैं, यह आसानी से बाश का उपयोग करके पूरा किया जाता है। इस स्क्रिप्ट को कहीं भी संग्रहीत किया जा सकता है, क्योंकि हम इस उदाहरण के लिए रात को स्क्रिप्ट चलाने के लिए क्रॉन नौकरी का उपयोग करेंगे, हम स्क्रिप्ट को एक नई निर्देशिका में रखेंगे जिसे हम "बैकअप स्क्रिप्ट" कहते हैं। इस निर्देशिका को बनाने के लिए, रूट कमांड पर इस कमांड का उपयोग करें:

mkdir /backupscripts 

हमें स्थानीय रूप से हमारे बैकअप को स्टोर करने के लिए एक निर्देशिका बनाने की भी आवश्यकता होगी। हम इस निर्देशिका को "बैकअपॉग" नाम देंगे। जड़ खोल में इस आदेश जारी निर्देशिका बनाने के लिए:

useradd -c "backup user" -p backuppassword backupuser 
:

mkdir /backuplogs 

अगले कदम जड़ पहचान के साथ अपने दूरस्थ मशीन में लॉग इन करें और आदेश के साथ एक "बैकअप उपयोगकर्ता" बनाने के लिए किया जाएगा इससे पहले कि आप लॉग आउट

mkdir /backuplogs/ 

, आदेश का उपयोग भविष्य में संदर्भ के लिए रिमोट होस्ट का आईपी पते हड़पने:

अपने बैकअप के लिए एक निर्देशिका बनाने

ifconfig -a 

eth0 वायर्ड नेटवर्क कनेक्शन के लिए मानक इंटरफ़ेस है। इस आईपी_एडीडीआर पर ध्यान दें।

अंत में, दूरस्थ सर्वर से लॉग आउट करें और अपने मूल होस्ट पर लौटें।

अगला हम उस फाइल को बनाएंगे जो हमारी मेजबान स्थानीय मशीन पर हमारी स्क्रिप्ट है, रिमोट नहीं। हम वीआईएम का उपयोग करेंगे (यदि आप नैनो या इमैक प्रशंसक हैं तो मुझे इसके खिलाफ न पकड़ें - लेकिन मैं सूची में नहीं हूं कि वीआईएम का उपयोग यहां फ़ाइल को संपादित करने के लिए कैसे करें) पहले फ़ाइल बनाएं और mysqldump का उपयोग करें , अपने डेटाबेस का बैकअप लें। डेटाबेस बनाने के बाद हम एसपीपी का उपयोग भी करेंगे, स्टोरेज के लिए अपनी फाइल को संपीड़ित करें। निर्देशों को पूरा करने के लिए फ़ाइल को STDOUT पर पढ़ें। अंत में, 7 दिनों से पुराने पुराने फ़ाइलों की जांच करें। उन्हें हटा दो। ऐसा करने के लिए, अपनी स्क्रिप्ट इस तरह दिखेगा: जगह में इस स्क्रिप्ट के साथ

vim /backupscripts/mysqldbbackup.sh 

#!/bin/sh 

# create a temporary file for the schema to be stored 
BACKUPDIR = /backuplogs/ 
TMPFILE = tmpout.sql 
CURRTIME = $(date +%Y%m%d).tgz 

#backup your database 
mysqldump -ubackupdbuser -pbackuppassword databasename > $BACKUPDIR$TMPFILE 

#compress this file and store it locally with the current date 
tar -zvcf /backuplogs/backupdb-$CURRTIME $BACKUPDIR$TMPFILE 

#per instructions - cat the contents of the SQL file to STDOUT 
cat $BACKUPDIR$TMPFILE 

#cleanup script 
# remove files older than 7 days old 
find $BACKUPDIR -atime +7 -name 'backup-db-*.tgz' -exec rm {} \; 

#remove the old backupdirectory from the remote server 
ssh [email protected] find /backuplogs/ -name 'backup-db-*.tgz' -exec rm {} \; 

#copy the current backup directory to the remote server using scp 
scp -r /backuplogs/ [email protected]:/backuplogs/ 

################# 
# End script 
################# 

, हम इतना है कि हम एक पासवर्ड हर बार हमारे स्क्रिप्ट चलाने के लिए संकेत नहीं कर रहे हैं, सेटअप ssh कुंजी की आवश्यकता होगी। हम इसे एसएसएच-कीजेन के साथ करेंगे और कमांड:

ssh-keygen -t rsa 

प्रॉम्प्ट पर एक पासवर्ड दर्ज करें - इससे आपकी निजी कुंजी बनती है। इसे साझा न करें।

आपको जिस फ़ाइल को साझा करने की आवश्यकता है वह आपकी सार्वजनिक कुंजी है, यह फ़ाइल current_home/.ssh/id_rsa.pub फ़ाइल में संग्रहीत है। अगला चरण इस सार्वजनिक कुंजी को आपके रिमोट होस्ट में स्थानांतरित करना है। कुंजी का उपयोग करने के लिए कमांड प्राप्त करने के लिए:

cat current_home/.ssh/id_rsa.pub 

फ़ाइल में स्ट्रिंग की प्रतिलिपि बनाएँ। अपने दूरस्थ सर्वर में अगला ssh आदेश का उपयोग:

ssh [email protected] 

अपना पासवर्ड दर्ज करें और फिर फ़ाइल /.ssh/authorized_keys संपादित करें। अपनी id_rsa.pub फ़ाइल से अधिकृत_keys फ़ाइल में प्राप्त स्ट्रिंग पेस्ट करें। अपने संपादक का उपयोग कर फ़ाइल में बदलाव लिखें और फिर संपादक से बाहर निकलें। अपने रिमोट सर्वर से लॉग आउट करें और आरएसए कुंजी का परीक्षण पिछले ssh कमांड का उपयोग कर रिमोट सर्वर में लॉग इन करने का प्रयास करके किया है। यदि कोई पासवर्ड नहीं पूछा जाता है, तो यह ठीक से काम कर रहा है। रिमोट सर्वर से फिर से लॉग आउट करें।

अंतिम चीज़ जो हमें करने की आवश्यकता होगी, उपयोगकर्ताओं को लॉग इन करने के बाद हर रात इसे चलाने के लिए क्रॉन नौकरी तैयार करना है। क्रॉन्टाब का उपयोग करके, हम सभी अनुमति समस्याओं से बचने के लिए वर्तमान उपयोगकर्ता फ़ाइल (रूट) को संपादित करेंगे। * नोट - यदि डेटा, सुरक्षा भेद्यता आदि को हटाने सहित आपकी स्क्रिप्ट में त्रुटियां हैं, तो इससे गंभीर प्रभाव हो सकते हैं - अपने पूरे काम को दोबारा जांचें और सुनिश्चित करें कि आप अपने सिस्टम पर भरोसा करते हैं, यदि यह संभव नहीं है तो वैकल्पिक उपयोगकर्ता और मौजूदा सर्वर * पर अनुमतियां स्थापित की जानी चाहिए। अपने वर्तमान crontab संपादित करने के लिए हम आदेश जारी करेंगे:

crontab -e 

crontab संपादक में (यह आपकी डिफ़ॉल्ट पाठ संपादक में खोल देंगे) करते हैं, हम 12 पर हर रात को चलाने के लिए हमारी स्क्रिप्ट स्थापित करने के लिए जा रहे हैं : 30am। संपादक में एक नई लाइन दर्ज करें:

30 0 * * * बैश /backupscripts/mysqldbbackup.sh

सहेजें इस फाइल और संपादक से बाहर निकलें। अपने cronjob ठीक से चलाने के लिए, हमें क्रॉन्ड सेवा को पुनरारंभ करने की आवश्यकता होगी। ऐसा करने के लिए, आदेश जारी करें:

/etc/init.d/crond restart 
संबंधित मुद्दे