Sqlite डेटाबेस का बैकअप कैसे लें?


93

इसे करने का उचित तरीका क्या है? क्या मैं सिर्फ .sq3 फ़ाइल की प्रतिलिपि बनाता हूं?

क्या होगा अगर साइट पर उपयोगकर्ता हैं और फ़ाइल को कॉपी करते समय लिखा जा रहा है?



1
डेटाबेस तक पहुँचने के लिए आप किस भाषा और ड्राइवर का उपयोग कर रहे हैं?
सीएल।

1
मैं PHP और PDO एक्सटेंशन का उपयोग कर रहा हूँ
thelolcat

वर्तमान में php में sqlite बैकअप एपीआई को उजागर करने के लिए एक फीचर अनुरोध है: Bugs.php.net/bug.php?id=70950
ब्रायन मिंटन

जवाबों:


152

Sqlite3 कमांड लाइन टूल में .backupडॉट कमांड की सुविधा है

आप अपने डेटाबेस से जुड़ सकते हैं:

sqlite3 my_database.sq3

और बैकअप डॉट कमांड के साथ चलाएं:

.backup backup_file.sq3

डेटाबेस से इंटरएक्टिव कनेक्शन के बजाय, आप बैकअप भी कर सकते हैं और बाद में कनेक्शन को बंद कर सकते हैं

sqlite3 my_database.sq3 ".backup 'backup_file.sq3'"

किसी भी तरह से परिणाम backup_file.sq3डेटाबेस का नाम है my_database.sq3

यह नियमित रूप से फाइल कॉपी से अलग है, क्योंकि यह डेटाबेस पर वर्तमान में काम कर रहे किसी भी उपयोगकर्ता का ख्याल रखता है। डेटाबेस पर उचित ताले सेट होते हैं, इसलिए बैकअप विशेष रूप से किया जाता है।


68
आप यह सब एक लाइन में कर सकते हैं ...sqlite3 m_database.sq3 ".backup m_database.sq3.bak"
मार्क सेटेल 18

@Googie: क्या हम इसे प्रतिकृति के लिए उपयोग कर सकते हैं? or
mOna

4
@mOna: यह केवल बैकअप बनाने के लिए एक तंत्र है। प्रतिकृति का अर्थ है मक्खी पर वितरित परिवर्तन (एक वितरित डेटाबेस का प्रकार), जो यह आपके लिए नहीं करेगा।
गोगोई

उत्तर के लिए धन्यवाद :)
mOna

1
@RonJohn यह वास्तव में एक फ़ाइल की एक प्रति बनाता है, लेकिन यह भी ansures है, कि डेटाबेस तक पहुंच लिखना उचित तालों के साथ प्रतिबंधित है, इसलिए यह एक परमाणु संचालन, कोई मध्यवर्ती संशोधन नहीं है।
गूगी

5

.backup सबसे अच्छा तरीका है।

sqlite3 my_database .backup my_database.back

आप .dump कमांड भी आज़मा सकते हैं, यह आपको पूरे डेटाबेस या टेबल्स को टेक्स्ट फाइल में डंप करने की सुविधा देता है। यदि TABLE निर्दिष्ट किया गया है, तो केवल LIKE पैटर्न TABLE से मेल खाते डंप टेबल।

sqlite3 my_database .dump > my_database.back

डंप और स्टोर का उपयोग करके एक अभिलेखीय प्रतिलिपि बनाने का एक अच्छा तरीका, बाद के समय में डेटाबेस का पुनर्निर्माण करना।

sqlite3 my_database .dump | gzip -c > my_database.dump.gz
zcat my_database.dump.gz | sqlite3 my_database

इस प्रश्न की भी जाँच करें क्या SQLite3 .backup और .dump कमांड डेटाबेस को लॉक करते हैं?


4
SQLite 3.8.2 पर, .backupऊपर दिखाए गए अनुसार काम नहीं करता है ("। पर लापता फ़ाइलनाम तर्क")
फ्रांसेक

4
यह सबसे अच्छा जवाब है। यदि आप किसी काम कर रहे डेटाबेस पर .backup का उपयोग कर रहे हैं तो यह बहुत से काम नहीं कर सकता है क्योंकि किसी बिंदु पर डेटाबेस लॉक हो जाता है। इसलिए यदि आप इसे CRON में उपयोग कर रहे हैं तो यह काम नहीं करेगा और आपको यह नहीं बताएगा कि कोई त्रुटि है ... बेहतर उपयोग .dump (allways works) या SQLite द्वारा दिया गया API।
मेमोरर

@Memristor लेकिन .dump दूसरों के लिए DB को लॉक नहीं करता है? एफडब्ल्यूआईडब्ल्यू, मैं बाधित सेवा के लिए एक असफल बैकअप (एडमिन को मेल के साथ) पसंद करूंगा।
टॉरस्ट ब्रोंगर

1
कृपया अपने उत्तर में .backup सिंटैक्स ठीक करें।
नाशीव

-23
try {
    final String inFileName = "/data/data/your app package/databases/db";
    File dbFile = new File(inFileName);
    FileInputStream fis = new FileInputStream(dbFile);
    String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/CALC/Backup";
    File dir = new File(path);
    if (!dir.exists()) dir.mkdirs();
    String outFileName = path + "/filename"; // output file name
    // Open the empty db as the output stream
    OutputStream output = new FileOutputStream(outFileName);

    // Transfer bytes from the inputfile to the outputfile
    byte[] buffer = new byte[1024];
    int length;
    while ((length = fis.read(buffer)) > 0) {
        output.write(buffer, 0, length);
    }
    Toast.makeText(getActivity(), "Backup Successfully", 2).show();
    // Close the streams
    output.flush();
    output.close();
    fis.close();
} 
catch (Exception e) {
    e.printStackTrace();
}

क्या आप डेटाबेस फाइल के फाइल सिस्टम स्तर में प्रोग्राम कॉपी की नकल कर रहे हैं?
एंड्रियास तसौलस

4
1. आप यह भी नहीं कहते कि यह कोड किस भाषा का है। ओपी ने कहा कि वह PHP का उपयोग कर रहा है, लेकिन यह जावा कोड लगता है। 2. आप एक फाइल को बाइट से कॉपी करते हैं। ऐसा करने से क्या फायदा होना चाहिए? जावा (और php) में फ़ाइलों को कॉपी करने के तरीके हैं। Docs.oracle.com/javase/tutorial/essential/io/copy.html 3. पढ़ें । यह समस्या को संबोधित नहीं करता है कि आप इसे कॉपी करते समय db लिखा जा सकता है।
क्रिस्टोफर के।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.