मैं एक बड़ी MySql बैकअप फ़ाइल को कई फ़ाइलों में कैसे विभाजित करूँ?


14

मेरे पास एक 250 एमबी बैकअप एसक्यूएल फ़ाइल है लेकिन नई होस्टिंग की सीमा केवल 100 एमबी है ...

क्या कोई प्रोग्राम है जो आप SQL फ़ाइल को कई SQL फ़ाइलों में विभाजित करते हैं?

ऐसा लगता है कि लोग गलत सवाल का जवाब दे रहे हैं ... इसलिए मैं और स्पष्ट करूंगा:

मेरे पास केवल 250 एमबी फ़ाइल है और केवल phpMyAdmin का उपयोग करके नई होस्टिंग है, जिसका वर्तमान में डेटाबेस में कोई डेटा नहीं है। मुझे 250 एमबी फाइल लेने और नए होस्ट पर अपलोड करने की आवश्यकता है लेकिन 100 एमबी एसक्यूएल बैकअप फाइल अपलोड साइज सीमा है। मुझे बस एक फाइल लेने की जरूरत है जो बहुत बड़ी है और इसे कई फाइलों में विभाजित किया गया है जिसमें प्रत्येक में केवल पूर्ण वैध एसक्यूएल स्टेटमेंट हैं (कोई स्टेटमेंट दो फाइलों के बीच विभाजित नहीं किया जा सकता है)।


क्या यह कई मान्य SQL फ़ाइलें होना चाहिए? मैं फ़ाइल को 100MB विखंडू में कई अभिलेखों में ज़िप करूँगा और अपलोड करूँगा।
निप्पल

हाँ, यह कई मान्य SQL फ़ाइलें होना चाहिए ... जहाँ तक एक फाइल में एक स्टेटमेंट का आधा हिस्सा नहीं होता है और दूसरी फाइल में आधा हिस्सा होता है।
ब्रायन टी हन्नान

जवाबों:


5

से मैं कैसे छोटी फ़ाइलों में mysqldump से उत्पादन विभाजित हो जाते हैं?

पहले स्कीमा डंप करें (यह निश्चित रूप से 2Mb में फिट बैठता है, नहीं?)

mysqldump -d --all-databases

और इसे पुनर्स्थापित करें।

बाद में केवल डेटा को अलग-अलग इन्सर्ट स्टेटमेंट में डंप करें, ताकि आप फ़ाइलों को विभाजित कर सकें और उन्हें रिस्टोर न करके रिमोट सर्वर पर रख सकें

mysqldump --all-databases --extended-insert=FALSE --no-create-info=TRUE

अच्छी सलाह! एकदम सही समझ में आता है। वास्तव में अच्छा है जब तालिकाओं के बीच जटिल निर्भरता होती है ताकि स्कीमा और डेटा दोनों के निर्यात का एक विभाजन काम न करे।
रीड रिचर्ड्स

7

बैकअप फ़ाइल को विभाजित करने का सबसे सरल तरीका एक सॉफ़्टवेयर का उपयोग करना है sqldumpsplitter, जो आपको db फ़ाइल को कई db फ़ाइलों में विभाजित करने की अनुमति देता है। यहाँ डाउनलोड करें

या फिर इस टर्मिनल कमांड का उपयोग करें।

स्प्लिट -l ६०० ./path/to/source/file.sql/path/to/dest/file-

यहां, 600 वह संख्या है जो आप अपनी विभाजित फ़ाइलों में रखना चाहते हैं। और दो तर्क क्रमशः स्रोत और फाइलों के गंतव्य हैं।

नोट: आपको विभाजित फ़ाइलों की जांच करनी चाहिए, आप किसी भी आदेश को विभाजित नहीं करते हैं।


1
सही दिशा में इशारा करने के लिए धन्यवाद! लेकिन उपयोग करने के बजाय splitमैं उपयोग करने की सलाह देता हूं csplit। यह एक निश्चित लाइन नंबर के बाद सही विभाजित नहीं होगा, जो INSERTउदाहरण के लिए मानों की सूची को इनबेट कर सकता है । आप विभाजित करने के लिए लाइनों की पहचान करने के लिए एक रेगेक्स पास कर सकते हैं । इसे निम्न तरीके से उपयोग करें, उदाहरण : `csplit -k dip.sql '/ ^ CREATE TABLE। * /' '' {900} '' यह प्रत्येक create table …विवरण से पहले आपकी डंप फ़ाइल को विभाजित करेगा । इसे अपनी आवश्यकताओं में बदलें। (वैसे मैं {900}इसके बजाय पास से गुजरता हूं {*}क्योंकि मुझे एक त्रुटि मिलती है "csplit: *}: खराब पुनरावृत्ति गिनती" , शायद मैकओएस पर एक समस्या?)
अरविद

3

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

sh mysqldumpsplitter.sh --source mysqldump-file.sql --extract DB --match_str database-name

2

यह कोड वही करेगा जो आप चाहते हैं (और यह खुला स्रोत है):

https://web.archive.org/web/20160313044916/http://rodo.nl/index.php?page=mysql-splitter

यह आपको किसी भी SQL फ़ाइल को कई छोटी फ़ाइलों में विभाजित करने की अनुमति देता है (आप अधिकतम आकार को परिभाषित कर सकते हैं) SQL सिंटैक्स को सही रखा जाएगा और यह 'कई इंसर्ट' क्वेरी सिंटैक्स के साथ काम करता है।

उम्मीद है की यह मदद करेगा!


0

1) क्या आपके पास फ़ाइल को किसी अन्य विधि द्वारा अपलोड करने का विकल्प है जैसे: scp या ftp और फिर इसे स्थानीय फ़ाइल से पुनर्स्थापित करें?

2) क्या आपका आईएसपी सीडी पर फ़ाइल ले जाएगा और इसे आपके लिए लोड करेगा?

3) क्या आप किसी स्थानीय सर्वर पर फ़ाइल को पुनर्स्थापित कर सकते हैं और फिर व्यक्तिगत आकारों को नीचे रखने के लिए विशिष्ट मानदंडों का उपयोग करके बैकअप फ़ाइलों की एक श्रृंखला बना सकते हैं?

4) आप फ़ाइल को मैन्युअल रूप से विभाजित कर सकते हैं और फिर फ़ाइलों के अंत में SQL कमांड को साफ कर सकते हैं?


मैं विकल्प 2, 3 और 4 के बारे में सोच रहा था। 2 अंतिम उपाय होगा। 3 वास्तव में शायद अगली चीज है जो मैं करने की कोशिश करने जा रहा हूं। 4 मेरा पहला विचार था, लेकिन मैं नोटपैड या किसी भी संपादक b / c में बड़ी फ़ाइल को भी नहीं खोल सकता, सभी पाठों की 250 एमबी की फ़ाइल खोलने में घंटों लगते हैं ... सभी नोटपैड जैसे ऐप्स फ्रीज हो जाते हैं और कभी वापस नहीं आते हैं।
ब्रायन टी हन्नान

@ ब्रायन: 4 was my first thought, but I can't even open the large file in notepad or any editor - नोटपैड ++ उन्हें ठीक से संभाल सकता है। से संबंधित कोई और नज़र superuser.com/questions/34749/...
Sathyajith भट्ट

यदि आप फ़ाइल को स्वचालित रूप से विभाजित करना चाहते हैं और फिर छोटे टुकड़ों को साफ करते हैं, तो स्विस फाइल नाइफ यूटिलिटी ( stahlworks.com/dev/swiss-file-knife.html ) के विभाजन विकल्प पर एक नजर डालें
Linkin3000

0

आप ग्रहण में एक बड़ी फ़ाइल को विभाजित कर सकते हैं। मैंने Windows में 105GB फ़ाइल को सफलतापूर्वक आज़माया है:

बस अपनी परियोजना में MySQLDumpSplitter लाइब्रेरी जोड़ें: http://dl.bintray.com/verace/MySQLDumpSplitter/jar/

आयात करने के तरीके पर त्वरित ध्यान दें:

- In Eclipse, Right click on your project --> Import
- Select "File System" and then "Next"
- Browse the path of the jar file and press "Ok"
- Select (thick) the "MySQLDumpSplitter.jar" file and then "Finish"
- It will be added to your project and shown in the project folder in Package Explorer in Eclipse
- Double click on the jar file in Eclipse (in Package Explorer)
- The "MySQL Dump file splitter" window opens which you can specify the address of your dump file and proceed with split.

0

मुझे यह समस्या भी थी और एक बहुत ही मेमोरी और सीपीयू कुशल कोड का कोड बनाने का फैसला किया जो एकल .sql फ़ाइल को कई (एक-प्रति-तालिका) में विभाजित करता है।

मुझे इसे लिखना पड़ा क्योंकि किसी भी अन्य समाधान के बाद मुझे अच्छा प्रदर्शन नहीं मिला। एक असली 16 जीबी डंप पर मैं इसे 2 मिनट से भी कम समय में विभाजित करने में कामयाब रहा।

कोड और निर्देश परियोजना पृष्ठ पर जीथब पर उपलब्ध हैं


0

यदि आप एक बैश या पर्ल स्क्रिप्ट चला सकते हैं तो कुछ विकल्प हैं। इसे yoodey.com से देखें

#!/usr/bin/perl -w
#
# splitmysqldump - split mysqldump file into per-database dump files.
use strict;
use warnings;
my $dbfile;
my $dbname = q{};
my $header = q{};
while (<>) {    

# Beginning of a new database section:
    # close currently open file and start a new one
    if (m/-- Current Database\: \`([-\w]+)\`/) {
    if (defined $dbfile && tell $dbfile != -1) {
        close $dbfile or die "Could not close file!"
    }
    $dbname = $1;
    open $dbfile, ">>", "$1_dump.sql" or die "Could not create file!";
    print $dbfile $header;
    print "Writing file $1_dump.sql ...\n";
    }
    if (defined

$dbfile && tell $dbfile != -1) {
    print $dbfile $_;
    }
    # Catch dump file header in the beginning
    # to be printed to each separate dump file.
    if (!

$dbname) { $header .= $_; }
}
close $dbfile or die "Could not close file!"

-1

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

बेशक 250MB SQL इंटरनेट पर भेजने में कुछ समय लग सकता है।

आप बिगडम्प भी आजमा सकते हैं

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