मैं एक डेटाबेस को दूसरे सर्वर से कैसे स्थानांतरित कर सकता हूं?


136

मैं एक भौतिक सर्वर से दूसरे में MySQL तालिकाओं को कैसे स्थानांतरित कर सकता हूं?

इस सटीक परिदृश्य के रूप में: मेरे पास एक MySQL सर्वर है जो इनोडब टेबल का उपयोग करता है और लगभग 20 जीबी आकार है।

मैं इसे एक नए सर्वर पर ले जाना चाहता हूं, ऐसा करने का सबसे कुशल तरीका क्या है?


4
मैं xtrabackup percona.com/docs/wiki/… का उपयोग करूंगा इसकी बहुत ज्यादा नकल करना पसंद है, लेकिन आप सर्वर को चालू रख सकते हैं और मान सकते हैं कि आप मुख्य रूप से निर्दोष तालिकाओं का उपयोग करते हैं (जो आपने कहा था), आप इसे "हॉट" मान सकते हैं। साथ ही बैकअप।
जोनाथन

मुझे इस उपकरण का उपयोग करने वाले अन्य लोगों से लाभ नहीं है। यह मुफ़्त / खुला-स्रोत है और भले ही यह किसी कंपनी द्वारा बनाया गया हो, लेकिन इसका उपयोग करना इतना आसान है कि आपको उस कंपनी के समर्थन पर विचार करने की आवश्यकता नहीं है।
जोनाथन

जवाबों:


80

मेरा पसंदीदा तरीका एक sqldump कमांड को sql कमांड पर पाइप करना है। आप सभी डेटाबेस या एक विशिष्ट एक कर सकते हैं। इसलिए, उदाहरण के लिए,

mysqldump -uuser -ppassword myDatabase | mysql -hremoteserver -uremoteuser -premoteserverpassword 

आप सभी डेटाबेस के साथ कर सकते हैं

mysqldump --all-databases -uuser -ppassword | mysql -hremoteserver -uremoteuser -premoteserver 

एकमात्र समस्या तब होती है जब डेटाबेस बहुत बड़ा होता है और पाइप ढह जाता है। उस स्थिति में, आप तालिका या नीचे बताए गए किसी भी अन्य तरीके से तालिका कर सकते हैं।


4
युक्ति: यदि न तो डेटाबेस दूरस्थ कनेक्शन, पाइप के माध्यम से अनुमति देता है netcat
बार्ट वैन हीकेलोम

1
इसके लिए मेरे लिए काम करने के लिए मुझे रिमोट सर्वर पर एक ही नाम के साथ एक खाली डेटाबेस बनाना था और फिर कमांड के अंत में उस डेटाबेस का नाम जोड़ना होगा।
जुगवाल्ट

1
यह सुरुचिपूर्ण है, लेकिन बिना संपीड़न के शायद ही 20GB डेटाबेस के लिए पर्याप्त तेज़ है।
डैडी 32

यह समाधान केवल पूरी तरह से नियंत्रित नेटवर्क के लिए अच्छा है (यदि और केवल यदि एक सुरक्षित निजी नेटवर्क पर है, तो पढ़ें: इंटरनेट नहीं)! लेकिन तेज और आसान उपाय!
tdaget

यह तेज बिजली है! लेकिन @Zugwalt ने जो कहा वह मेरे लिए भी सच था। जब तक मैंने डेटाबेस नहीं बनाया था तब तक कमांड काम नहीं करती थी (खाली) जोड़ने से कमांड के अंत में डेटाबेस का नाम जुड़ जाता है।
स्कीट

65

मैंने हाल ही में निम्न आवेग के साथ 30GB डेटाबेस स्थानांतरित किया है:

पुराना सर्वर

  • Mysql सर्वर बंद करो
  • डेटाडिर की सामग्री को डिस्क पर किसी अन्य स्थान पर कॉपी करें ( ~/mysqldata/*)
  • Mysql सर्वर को फिर से शुरू करें (डाउनटाइम 10-15 मिनट था)
  • डेटा संपीड़ित करें ( tar -czvf mysqldata.tar.gz ~/mysqldata)
  • संपीड़ित फ़ाइल को नए सर्वर पर कॉपी करें

नया सर्वर

  • mysql स्थापित करें (शुरू न करें)
  • संकुचित फ़ाइल अनज़िप ( tar -xzvf mysqldata.tar.gz)
  • करने के लिए mysqldata की सामग्री को ले जाने के DATADIR
  • सुनिश्चित करें कि आपका innodb_log_file_size नए सर्वर पर समान है, या यदि यह नहीं है, तो पुरानी लॉग फ़ाइलों की प्रतिलिपि न करें ( mysql ये उत्पन्न करेगा )
  • Mysql शुरू करें

1
कंप्रेस / डीकंप्रेस के बाद कॉपी को छोड़ दें। Ssh का उपयोग कर नेटवर्क पर टार को स्ट्रीम करें, या (यदि और केवल सुरक्षित निजी नेटवर्क पर पढ़ा हो तो: इंटरनेट नहीं ) ने एन्क्रिप्शन ओवरहेड से बचने के लिए netcat का उपयोग करें। स्थानीय नेटवर्क पर भी अगर आप तेज़ नेटवर्क पाइप रखते हैं, तो आप तेज़ गति से पाइप चला सकते हैं, यदि आप ट्रांसफ़ॉर्म टोंटी को एक
पेग्ड

यह मासूम और मायसम दोनों के लिए काम करता है? इसके अलावा, mysql उपयोगकर्ता डेटादिर में भी हैं?
जियोर्जियो79

2
@ giorgio79 सुनिश्चित करें कि जब तक आप ibdata फ़ाइलों को भी स्थानांतरित करते हैं। डिफ़ॉल्ट रूप से वे डेटादिर में हैं। MySQL उपयोगकर्ता mysql फ़ोल्डर में एक उपयोगकर्ता तालिकाओं में संग्रहीत किए जाते हैं।
डेरेक डाउनी

2
क्या यह प्रक्रिया विंडोज से लिनक्स पर जाने के लिए काम करेगी?
ypercube y

2
@ TypoCube Typ को जवाब देने के लिए दो साल से अधिक समय तक खेद है, लेकिन इससे मुझे किसी को निश्चित रूप से कहने में मदद मिलेगी, "हां, यह विंडोज से लिनक्स तक काम करता है"। मेरे मामले में, मैं विंडोज सर्वर 2012 आर 2 से सेंट ओएस (रेड हैट 4.8.5-11) गया । विशिष्ट mysql संस्करण मारिया DB 10.1 था । जैसा कि निर्धारित है, मैंने दोनों mysql सेवाओं को बंद कर दिया, डेटा निर्देशिका को rsynced कर दिया, और नए सर्वर, सभी डेटाबेस, डेटाबेस तालिकाओं और डेटाबेस उपयोगकर्ताओं पर mysql सेवा शुरू करने पर पूरी तरह से बरकरार था।
वेबजु '

30

के अनुसार MySQL 5.0 प्रमाणन अध्ययन गाइड , अध्याय 32 धारा 32.3.4, पेज 456,457 वर्णन बाइनरी पोर्टेबिलिटी के लिए उपयुक्त परिस्थितियां जो बाहर निम्नलिखित लाने:

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

MyISAM के लिए, बाइनरी पोर्टेबिलिटी का मतलब है कि आप किसी MySQL सर्वर से एक MySQL सर्वर से दूसरी मशीन पर सीधे एक अलग मशीन पर कॉपी कर सकते हैं और दूसरा सर्वर टेबल तक पहुंच बना सकेगा।

InnoDB के लिए, द्विआधारी पोर्टेबिलिटी का मतलब है कि आप एक मशीन पर एक MySQL सर्वर से एक अलग मशीन पर सीधे दूसरे सर्वर पर टेबलस्पेस फ़ाइलों को कॉपी कर सकते हैं और दूसरा सर्वर टेबलस्पेस तक पहुंचने में सक्षम होगा। डिफ़ॉल्ट रूप से, सर्वर द्वारा प्रबंधित सभी InnoDB तालिकाओं को एक साथ टेबलस्पेस में संग्रहीत किया जाता है, इसलिए टेबलस्पेस का पोर्टेबिलिटी एक फ़ंक्शन है कि क्या सभी व्यक्तिगत InnoDB टेबल पोर्टेबल हैं। अगर एक टेबल भी पोर्टेबल नहीं है, तो न तो टेबलस्पेस है।

MyISAM तालिकाओं और InnoDB टेबलस्पेस दो स्थितियों के मिलने पर एक होस्ट से दूसरे में बाइनरी पोर्टेबल हैं:

  • दोनों मशीनों में दो-पूरक पूर्णांक अंकगणित का उपयोग करना चाहिए
  • दोनों मशीनों में IEEE फ़्लोटिंग-पॉइंट फॉर्मेट का उपयोग करना चाहिए वरना टेबल में फ़्लोटिंग-पॉइंट कॉलम (FLOAT या DOUBLE) नहीं होने चाहिए

व्यवहार में, उन दो स्थितियों में थोड़ा प्रतिबंध है। आधुनिक हार्डवेयर पर दो-पूरक पूर्णांक अंकगणित और IEEE फ़्लोटिंग-पॉइंट प्रारूप आदर्श हैं। InnoDB बाइनरी पोर्टेबिलिटी के लिए एक तीसरी शर्त यह है कि आपको टेबल और डेटाबेस के लिए लोअरकेस नाम का उपयोग करना चाहिए। ऐसा इसलिए है क्योंकि InnoDB इन नामों को विंडोज पर निचले हिस्से में आंतरिक रूप से (इसके डेटा शब्दकोश में) संग्रहीत करता है। लोअरकेस नामों का उपयोग करना विंडोज और यूनिक्स के बीच बाइनरी पोर्टेबिलिटी की अनुमति देता है, लोअरकेस नामों के उपयोग को मजबूर करने के लिए, आप निम्न लाइनों को एक विकल्प फ़ाइल में रख सकते हैं:

[mysqld]
lower_case_table_names=1

यदि आप प्रति-तालिका तालिकाओं का उपयोग करने के लिए InnoDB को कॉन्फ़िगर करते हैं, तो बाइनरी पोर्टेबिलिटी के लिए शर्तों को बढ़ाया जाता है, जिसमें InnoDB तालिकाओं के लिए .ibd फाइलें भी शामिल हैं। (साझा तालिकाओं के लिए स्थितियां अभी भी तालियां बजाती हैं क्योंकि इसमें डेटा शब्दकोश शामिल है जो सभी InnoDB तालिकाओं के बारे में जानकारी संग्रहीत करता है।)

यदि बाइनरी पोर्टेबिलिटी के लिए शर्तें संतुष्ट नहीं हैं, तो आप कुछ पाठ प्रारूप (उदाहरण के लिए, mysqldump के साथ) का उपयोग करके उन्हें गंतव्य सर्वर में पुनः लोड करके MyISAM या InnoDB तालिकाओं को एक सर्वर से दूसरे में कॉपी कर सकते हैं।

व्यक्तिगत टेबल को स्थानांतरित करने के लिए स्टोरेज इंजन पर आधारित दो प्रमुख तरीके हैं।

दिए गए उदाहरण के लिए हम निम्नलिखित मानेंगे:

  1. डेटादिर / var / lib / mysql है
  2. डेटाबेस को mydb कहा जाता है
  3. mydb डेटाबेस में तालिका को mytable कहा जाता है

MyISAM टेबल

यदि mydb.mytable MyISAM स्टोरेज इंजन का उपयोग करता है, तो तालिका भौतिक रूप से तीन अलग-अलग फ़ाइलों के रूप में प्रकट होगी

  1. /var/lib/mysql/mydb/mytable.frm ((.frm फ़ाइल)
  2. /var/lib/mysql/mydb/mytable.MYD (.MYD फ़ाइल)
  3. /var/lib/mysql/mydb/mytable.MYI (.MYI फ़ाइल)

.Fr में टेबल संरचना होती है
। एमवाईडी में टेबल डेटा होता है
। एमवाईआई में टेबल इंडेक्स पेज होता है

इन फ़ाइलों को अन्योन्याश्रित रूप से mysql में तार्किक दृष्टिकोण से तालिका का प्रतिनिधित्व करने के लिए उपयोग किया जाता है। चूंकि इन फ़ाइल में कोई और तार्किक संघ नहीं जुड़ा है, इसलिए तालिका को एक DB सर्वर से दूसरे में माइग्रेट करना। आप इसे विंडोज सर्वर से लिनक्स सर्वर या मैकओएस पर भी भेज सकते हैं। बेशक, आप mysql को बंद कर सकते हैं और 3 टेबल फ़ाइलों की प्रतिलिपि बना सकते हैं। आप निम्नलिखित चला सकते हैं:

LOCK TABLES mydb.mytable READ;
SELECT SLEEP(86400);
UNLOCK TABLES;

केवल पढ़ने के लिए तालिका रखने के लिए एक ssh सत्र में और 24 घंटे के लिए ताला दबाए रखें। एक सेकंड बाद, दूसरे ssh सत्र में प्रतिलिपि निष्पादित करें। फिर 24 घंटे के लॉक के साथ mysql सेशन को मारें। आपको 24 घंटे इंतजार करने की आवश्यकता नहीं है।

InnoDB टेबल

प्रमाणन पुस्तक से पूर्वोक्त उद्धरण के आधार पर, कई कारक हैं जो एक विशिष्ट InnoDB तालिका का बैकअप लेने के तरीके को नियंत्रित करते हैं। सादगी, स्पष्टता, और संक्षिप्तता के लिए, बस तालिका के सही बिंदु-समय डंप करने के लिए -सिंगल-लेन-देन मापदंडों का उपयोग करके वांछित तालिका के mysqldump प्रदर्शन करें। अगर आप सिर्फ एक टेबल चाहते हैं तो खुद को InnoDB शब्दार्थ के साथ cncern करने की आवश्यकता नहीं है। आप उस डंपफाइल को अपने चयन के किसी भी MySQL सर्वर पर पुनः लोड कर सकते हैं।

चूंकि दो सवालों को यहां (jcolebrand) मर्ज किया गया था : EDIT

यदि आप कुछ धीमे DB प्रदर्शन के साथ जीने के लिए तैयार हैं, तो आप पुराने सर्वर (सर्वरए) से नए सर्वर (सर्वरबी) तक की रस्सियों की एक श्रृंखला का प्रदर्शन कर सकते हैं, जबकि mysql अभी भी सर्वरए पर चल रहा है।

चरण 01) ServerB पर Mysql का वही संस्करण स्थापित करें जो ServerA के पास है

चरण 02) सर्वरए पर, SET GLOBAL innodb_max_dirty_pages_pct = 0;mysql से और लगभग 10 मिनट चलाएं (यह इनो बफर बफर से गंदे पृष्ठों को शुद्ध करता है। यह mysql शटडाउन को तेज़ी से करने में भी मदद करता है) यदि आपका डेटाबेस सभी MyISAM है, तो आप इस चरण को छोड़ सकते हैं।

चरण 03) rsync --archive --verbose --stats --partial --progress --human-readable ServerA:/var/lib/mysql ServerB:/var/lib/mysql

चरण 04) चरण 03 को तब तक दोहराएं जब तक कि rsync 1 मिनट से कम न हो जाए

स्टेप 05) service mysql stopसर्वरए पर

चरण 06) एक और rsync करें

चरण 07) scp ServerA:/etc/my.cnf ServerB:/etc/

चरण 08) service mysql startसर्वरबी पर

service mysql startसर्वर 08 पर वैकल्पिक (वैकल्पिक)

कोशिश करो !!!

चेतावनी

आप इस तरह एक प्रतिकृति गुलाम बना सकते हैं। बस मास्टर /etc/my.cnf में सर्वर-आईडी को आसानी से सेट करने के लिए याद रखें और दास /etc/my.cnf में सर्वर-आईडी के लिए एक अलग संख्या


29

यदि आपको एक संपूर्ण डेटाबेस स्कीमा ले जा रहा है, तो आपको mysqldump की भी आवश्यकता नहीं है, और आप पहले डेटाबेस को रोकने के लिए तैयार हैं (इसलिए यह स्थानांतरित होने पर संगत है)

  1. डेटाबेस बंद करो (या इसे बंद करो)
  2. उस निर्देशिका पर जाएं जहां mysql डेटा फाइलें हैं।
  3. नए सर्वर के mysql डेटा निर्देशिका पर फ़ोल्डर (और उसकी सामग्री) पर स्थानांतरण करें
  4. डेटाबेस का बैकअप लें
  5. नए सर्वर पर, 'डेटाबेस बनाएँ' कमांड जारी करें।
  6. उपयोगकर्ताओं को पुनः बनाएँ और अनुमतियाँ प्रदान करें।

मुझे याद है नहीं कर सकते अगर mysqldump उपयोगकर्ता और अनुमतियां, या बस डेटा का प्रबंधन कैसे ... लेकिन यहां तक कि अगर यह होता है, यह है जिस तरह से एक डंप कर और इसे चलाने की तुलना में तेजी। मैं केवल इसका उपयोग करूंगा कि अगर मुझे mysql डेटाबेस को डंप करने की आवश्यकता है, तो कुछ अन्य RDBMS में फिर से डालें, अगर मुझे स्टोरेज विकल्प (innodb बनाम myisam) बदलने की आवश्यकता है, या हो सकता है कि मैं mysll के प्रमुख छंदों को बदल रहा था (लेकिन मुझे लगता है कि मैंने इसे 4 और 5 के बीच किया है, हालांकि)


यह अधिक कुशल है, खासकर अगर एक sysadmin / DBA है। BTW mysqldump --all-databasesmysql स्कीमा का उपयोग करके । अगली मशीन पर mysql शुरू करने से अनुमतियाँ सामने आती हैं बशर्ते कि आपने MySQL के समान प्रमुख रिलीज़ के साथ डेटा फ़ोल्डर को दूसरी मशीन में स्थानांतरित कर दिया हो। (MySQL 5.5.x से MySQL 5.5.x, MySQL 5.1.x to MySQL 5.1.x, MySQL 5.0.x से MySQL
5.0.x

4
@ जो, हां, mysqldumpउपयोगकर्ताओं और अनुमतियों को संभालता है, क्योंकि ये mysqlस्कीमा के भीतर संग्रहीत हैं ।
श्लोमी नोआच

यह दृष्टिकोण AWS की तरह क्लाउड होस्टिंग के साथ विशेष रूप से उपयोगी है। आप mysql को बंद कर सकते हैं, चालू कर सकते हैं और वर्तमान सर्वर से अलग कर सकते हैं; संलग्न करें और नए सर्वर पर माउंट करें और mysql शुरू करें। एक ही सर्वर फ़ार्म में वॉल्यूम बने रहने पर कोई कॉपी ओवरहेड नहीं।
लैटरलफ्रैक्टल

12

यदि आप एक विशिष्ट तालिका आज़माना चाहते हैं:

mysqldump -u username -ppassword databasename tablename > databasename.tablename.sql

आप एक ही कमांड में अधिक टेबल नाम निर्दिष्ट कर सकते हैं। एक बार जब कमांड पूरी हो जाती है, तो databasename.tablename.sql फ़ाइल को अन्य सर्वर पर ले जाएं और फिर उपयोग करके पुनर्स्थापित करें:

mysql -u username -ppassword databasename < databasename.tablename.sql

ध्यान दें कि बैक .sql फ़ाइल mysqldump प्रोग्राम का उपयोग करके बनाई गई है , और पुनर्स्थापना सीधे mysql में की जाती है


7
  1. यदि आपके पास ssh एक्सेस है तो आप कमांड लाइन से mysqldump का उपयोग कर सकते हैं
  2. यदि आपके पास ssh एक्सेस नहीं है, लेकिन आपके पास phpMyAdmin एक्सेस है, तो आप इसका उपयोग निर्यात / आयात करने के लिए कर सकते हैं
  3. यदि आपके पास phpMyAdmin एक्सेस नहीं है, तो कुछ आसान php स्क्रिप्ट हैं जो डंप और आयात करेंगे (हालांकि मेरे खुद के अनुभव से बोलते हुए मुझे कभी ऐसा नहीं मिला जो phpMyAdmin जितना विश्वसनीय हो)।

यह सकारात्मकता हो सकती है जहां आप वास्तविक डेटाबेस फ़ाइलों को स्थानांतरित करते हैं (मेरी स्थापना के लिए वे / var / lib / mysql पर स्थित हैं), लेकिन मैं वास्तव में shure नहीं हूं कि यह कैसे कार्य करेगा / बाहर काम करेगा।


5

आपको डाउनटाइम लेने की आवश्यकता है। आपके नेटवर्क की गति क्या है, इसके आधार पर इसमें कुछ समय लगने वाला है। मैं लिनक्स / यूनिक्स पर आपके चलने वाले MySQL को संभालने जा रहा हूं। यहाँ मैं उपयोग की प्रक्रिया है:

  1. स्रोत होस्ट पर mysql डेमन को रोकें।
  2. फ़ाइलों को प्राप्त करने के लिए अपने लक्ष्य होस्ट पर एक tmp फ़ोल्डर बनाएं।
  3. शेल सत्र बनाने के लिए स्क्रीन का उपयोग करें जो बच जाएगा आपके ssh को डिस्कनेक्ट होना चाहिए।
  4. मेजबानों के बीच फ़ाइलों को स्थानांतरित करने के लिए rsync का उपयोग करें । कुछ इस तरह: rsync -avhP स्रोत उपयोगकर्ता @ targethost: / पथ / से / फ़ोल्डर /
  5. यह सुनिश्चित करने के लिए कि आपने स्थानांतरण में कुछ भी नहीं खोया है, अपने परीक्षण मामलों को चलाएं।

फिर सामान्य रूप से स्थानीय MySQL सेट अप करते हुए आगे बढ़ें।

* नोट: आप ट्रांसफर में चेकसम जोड़ने के लिए rsync के साथ -c पैरामीटर का भी उपयोग कर सकते हैं, हालाँकि यह CPU स्पीड के आधार पर स्लो किया जाएगा।


4

मैं इस बात की पुष्टि कर सकता हूं कि DTest का तरीका ubuntu और osx के बीच कॉपी करने के लिए भी काम करता है।

किसी भी डंपिंग या समान के बिना सभी डेटाबेस को कॉपी करने के लिए:

सुनिश्चित करें कि आपके पास mysql का एक क्लीन mysql है (mysql http://cdn.mysql.com/Downloads/MySQL-5.1/mysql-5.1.63-osx10.6-x86_64atalogg से डाउनलोड किया गया ,) (VERY महत्वपूर्ण) कभी नहीं चलाया गया है।

मैक पर / usr / स्थानीय / mysql / डेटा / सामग्री के शीर्ष पर ubuntu मशीन से / var / lib / mysql / फ़ोल्डर सामग्री की प्रतिलिपि बनाएँ। Ubuntu मशीन पर फ़ोल्डर प्राप्त करने के लिए पहुँच प्राप्त करने के लिए मुझे sudo का उपयोग करना पड़ा है:

sudo cp /var/lib/mysql /home/foouser/mysql_data_folder
sudo chown -R foouser /home/foouser/mysql_data_folder

मैंने scp का उपयोग करके फ़ोल्डर की प्रतिलिपि बनाई।

इससे पहले कि आप शुरू करें कि आप कुछ भी गड़बड़ न करें, यह सुनिश्चित करने के लिए मैक पर mysql फ़ोल्डर की एक कॉपी लें।

फ़ोल्डर की प्रतिलिपि बनाने के बाद, मैक मशीन पर निम्न कार्य करें:

sudo chown -R _mysql /usr/local/mysql/data/
sudo chgrp -R wheel /usr/local/mysql/data/
sudo chmod -R g+rx /usr/local/mysql/data/

पहली बार mysql सर्वर को प्रारंभ करें (सिस्टम वरीयताएँ- mysql के अंतर्गत प्राथमिकताएँ फलक से)। सभी उपयोगकर्ताओं और डेटाबेस को अब सही ढंग से सेट किया जाना चाहिए।

इसने mysql 5.1.61 के साथ ubuntu 64 बिट 11.10 और mysql 5.1.63 पर ओएक्सएक्स शेर (मैकबुक प्रो) पर काम किया।


4

मुझे लगता है कि पहले के सभी उत्तर संभवतः ठीक काम करते हैं, लेकिन स्थानांतरण के दौरान डेटाबेस नाम सेट करने के मुद्दे को वास्तव में संबोधित नहीं करते हैं।

यह है कि मैं बस इसे मार के साथ किया:

यदि आप अक्सर ऐसा कर रहे हैं, तो आप फ़ाइल के उपयोग rsyncसे बेहतर हो सकते हैं scp, और फ़ाइल को संपीड़ित नहीं कर सकते।

मेरे स्रोत सर्वर पर:

me@web:~$ d=members
me@web:~$ mysqldump $d | gzip > $d.sql.gz
me@web:~$ scp -i .ssh/yourkeynamehere $d.sql.gz $sbox:$d.sql.gz

मेरे गंतव्य सर्वर पर:

me@sandbox:~$ d1=members
me@sandbox:~$ d2=members_sb
me@sandbox:~$ mysqladmin create $d2
me@sandbox:~$ cat $d1.sql.gz | gunzip |  mysql $d2

प्रगति देखने के लिए किसी भी मशीन पर:

me@sandbox:~$ ls *.gz 
me@sandbox:~$ cat $d.sql.gz | gunzip |  less

यह सब मान लें कि आपके पास दोनों मशीनों पर अपने घर निर्देशिका में MySQL कॉन्फ़िगरेशन फ़ाइल है और अनुमतियाँ सेट करें:

$ echo "
[client]
user=drupal6
password=metoknow
host=ord-mysql-001-sn.bananas.com
[mysql]
database=nz_drupal" > .my.cnf
$ chmod 0600 ~/.my.cnf

3

क्या आप इसे किसी अन्य mysql सर्वर db पर ले जा रहे हैं? यदि ऐसा है, तो उस पर एक निर्यात करें

# mysqldump -u username -ppassword database_name > FILE.sql

Mysqldump? जब आप कम मात्रा में डेटा के साथ काम कर रहे हों?
ओह चिन बून

2
मुझे लगता है कि इन दिनों छोटा / बड़ा व्यक्तिपरक है। जब मैंने प्रश्न का शीर्षक देखा तो मुझे उम्मीद थी कि डेटाबेस 20gb से बहुत बड़ा होने के लिए "बड़ा" माना जाएगा ...
हारून बर्ट्रेंड

3

सामान्य लिनक्स विधि:

/etc/init.d/mysqld stop
rsync -avz source_files destination
vi /etc/my.cnf

mysqld और mysqld_safe (यदि लागू हो) दोनों के लिए डेटादिर (और सॉकेट) को नए स्थान पर इंगित करने के लिए संपादित करें, फिर

/etc/init.d/mysql start

मैंने इसे पोस्ट किया क्योंकि कोई भी ऐसा करने के लिए कम से कम चरणों की सूची नहीं देता था और मुझे लगता है कि यह व्यक्तिगत रूप से सबसे सरल तरीका है।


2

शायद यह करने का एक बेहतर तरीका है:

संस्करण 1 : डेटा-फाइल कॉपी (केवल MYISAM)

ssh server1
service mysql stop
cd $mysql-data-dir
rsync -avz dirs-or-files server2:$mysql-data-dir
service mysql start

ssh Server2 सेवा mysql को पुनरारंभ करें

  • यदि आपकी डेटाबेस फाइलें केवल पढ़ी जाती हैं तो आप सर्वर को रोकना छोड़ सकते हैं।

संस्करण 2 : mysqldump

पिगज़ को स्थापित करें - आधुनिक ज़ीऑन या ओपर्टन प्रोसेसर पर, विशेषकर जब आपके पास 2 या अधिक सीपीयू हों, तो यह जीज़िप की तुलना में अधिक तेज़ होता है।

ssh server1 
mysqldump ... | pigz > backup-YYMDD.sql.gz
rsync backup-YYMDD.sql.gz server:location

ssh server2
pigz -dc location/backup-YYMDD.sql.gz | mysql ..

संस्करण 3 : मास्टर / दास + mysqldump / file-copy

In HA environment you should use the following trick:
setup slave server & do all backups from it
before backups - do "slave stop"; 
then do version 1 or version 2

स्क्रिप्ट:

touch full.start
mysqladmin -h slave-db stop-slave
echo "show slave status \G" | mysql -h slave-db > FULL/comfi-$NOW.master-position
/usr/bin/mysqldump -h slave-db --default-character-set=utf8 -A --opt --skip-lock-tables | pigz > "FULL/XXXX-$NOW.sql.gz"
mysqladmin -h slave-db start-slave
touch full.end

ln -fs "FULL/XXXX-$NOW.sql.gz" FULL.sql.gz

पुनश्च:

छोटे तालिकाओं का उपयोग करने के लिए:

ssh server1 mysqldump स्कीमा टेबल | ssh server2 mysql स्कीमा


2

मैं पूरे डेटाबेस को एक सर्वर से दूसरे सर्वर में स्थानांतरित करने के लिए दो सरल चरणों का सुझाव दूंगा।

चरण 1 : mysqldump का उपयोग करके स्रोत सर्वर में डेटाबेस का पूर्ण बैकअप लें ।

चरण 2 : आप पूरे डेटाबेस को गंतव्य सर्वर पर स्थानांतरित करने के लिए rsync कमांड का उपयोग कर सकते हैं ।

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