SQL सर्वर के लिए एक MySQL डाटाबेस निर्यात करें


80

कृपया SQLite डेटाबेस में MySQL डेटाबेस को निर्यात करने में मेरी मदद करें।


2
SQLite परियोजना में रूपांतरण उपयोगिताओं पर एक पृष्ठ भी है: sqlite.org/cvstrac/wiki?p=ConverterTools
Clinton

@ क्लिंटन आपके द्वारा लिंक किए गए पृष्ठ पर एक चेतावनी है कि जानकारी अप्रचलित है।
kjones

जवाबों:


71

Github पर एक शानदार लिनक्स शेल स्क्रिप्ट है जो मैसकल को Sqlite3 फ़ाइल में कनवर्ट करता है। आपको अपने सर्वर पर mysqldump और sqlite3 दोनों की आवश्यकता है। बहुत अच्छा काम करता है।


अब तक का सबसे अच्छा काम करता है! केवल कुछ "COLLATE xy" कथनों को हटाने के लिए आवश्यक है जो कि एनक्लॉडिंग के साथ होते हैं जो कि sqlite does not को समझते हैं। ध्यान दें कि यदि आपको स्थानीय विकास के लिए अपने mysql डेटाबेस का क्लोन चाहिए, तो आपको अपने सर्वर पर sqlite3 की आवश्यकता नहीं होगी।
बेंज़कजी

1
दुर्भाग्य से मेरे लिए काम नहीं किया। नीचे दी गई "प्राथमिक कुंजी" कथनों के साथ समस्याओं के अलावा, कई अन्य त्रुटियां बताई गईं, जो "INSERT" कथनों और लापता तालिकाओं ("वस्तुओं") से संबंधित हैं।
बार्टोज़केपी

2
लेखक ने स्क्रिप्ट को छोड़ दिया, लेकिन इस कांटे में काम जारी रहा: github.com/dumblob/mysql2sqlite
ilyaigpetrov

3
github.com/dumblob/mysql2sqlite अब आधिकारिक संस्करण है। 2016-05-11 17:32 GMT+2 @esperlu declared MIT as a fitting license (also retrospectively) and the original gist as deprecated.
ली-आंग यिप

1
हेडअप ilyaigpetrov और @ Li-aungYip के लिए धन्यवाद, मैंने लिंक अपडेट किया है
georgiecasey

7

@ User2111698 द्वारा @quassy द्वारा संपादित उत्तर के रूप में वादा किया गया काम करता है। चूंकि मैं बार-बार ऐसा करता हूं, इसलिए मैंने उनके निर्देशों को बैश स्क्रिप्ट में डाला:

#!/bin/bash

mysql_host=localhost
mysql_user=george
mysql_dbname=database
sqlite3_dbname=database.sqlite3

# dump the mysql database to a txt file
mysqldump \
  --skip-create-options \
  --compatible=ansi \
  --skip-extended-insert \
  --compact \
  --single-transaction \
  -h$mysql_host \
  -u$mysql_user \
  -p $mysql_dbname \
  > /tmp/localdb.txt

# remove lines mentioning "PRIMARY KEY" or "KEY"
cat /tmp/localdb.txt \
  | grep -v "PRIMARY KEY" \
  | grep -v KEY \
  > /tmp/localdb.txt.1

# mysqldump leaves trailing commas before closing parentheses  
perl -0pe 's/,\n\)/\)/g' /tmp/localdb.txt.1 > /tmp/localdb.txt.2

# change all \' to ''
sed -e 's/\\'\''/'\'''\''/g' /tmp/localdb.txt.2 > /tmp/localdb.txt.3

if [ -e $sqlite3_dbname ]; then
    mv $sqlite3_dbname $sqlite3_dbname.bak
fi
sqlite3 $sqlite3_dbname < /tmp/localdb.txt.3

विस्तृत टिप्पणियों वाली एक तस्वीर https://gist.github.com/grfiv/b79ace3656113bcfbd9b7c7da8e9ae8d पर मिल सकती है


यदि आप स्क्रॉलिंग को समाप्त करने के लिए अपने कोड को प्रारूपित करते हैं, तो आप दूसरों के लिए पढ़ना आसान बनाते हैं।
यवन

को खुश हो; जल्दी से कैसे नहीं देखते हैं
जॉर्ज फिशर 19

1
यदि आप टिप्पणियों को हटाते हैं, तो आप ऊर्ध्वाधर स्क्रॉल के साथ किया जाता है (कोई भी टिप्पणी जो आपको लगता है कि आपके उत्तर के पाठ में महत्वपूर्ण हैं) जोड़ें। वर्टिकल स्क्रॉलिंग को बैकस्लैश न्यूलाइन के साथ संभाला जा सकता है।
20

यदि आपकी sql फ़ाइल 1GB से बड़ी है, तो इसे पहले विभाजित करें। अन्यथा पर्ल स्क्रिप्ट प्रतिस्थापन पाश त्रुटि देता है।
नर्स

3

mysql2sqlite.sh को शीर्ष पोस्ट में उल्लेख किया गया है जो कि PRIMARY KEY लाइनों के साथ अच्छी तरह से सामना नहीं करता है, यह क्रिएट )स्टेटमेंट को पूरा करने के लिए अनुगामी नहीं लिखता है ।

यह जो मैंने किया है। मैंने mysql डंप निम्नानुसार चलाया:

mysqldump --skip-create-options --compatible=ansi --skip-extended-insert --compact --single-transaction -h<host> -u<user> -p<passwd> <database name> > localdb.txt

मैंने तब प्राथमिक कुंजी और कुंजी को हटाने के लिए grep का उपयोग किया:

cat localdb.txt | grep -v "PRIMARY KEY' | grep -v KEY > localdb.txt.1

मैंने फ़ाइल को ठीक करने के लिए एक संपादक का उपयोग किया। जब कुंजियाँ हटा दी जाती हैं तो आप क्रिएट स्टेटमेंट के साथ समाप्त होते हैं जो दिखता है:

CREATE ...
  ...,
)

उस अनुगामी ,को हटाना होगा। Vi में यह अभिव्यक्ति उनसे मेल खाती है, $ \ n)

फिर आपको सभी \'को बदलने की आवश्यकता है''

फिर आप आयात कर सकते हैं:

sqlite3 local.sqlite3 < localdb.txt.1

और बस। मुझे एक भी कार्यक्रम नहीं मिला जो मेरे लिए काम करता हो। मुझे उम्मीद है इससे किसी को सहायता मिलेगी।


2

मैंने मैनुअल को साइक्लाइट डेटाबेस में तालिका संरचना बनाई।

क्या मैंने निम्नलिखित आदेश के साथ डेटा अपलोड किया है:

mysqldump -u root {database} {table} --no-create-info --skip-extended-insert  --complete-insert --skip-add-locks  --compatible=ansi | sed "s/\\\'/''/g" |sqlite3 flora.db

मुझे दो डेटाबेस में एक अलग एपेक्स एन्कोडिंग को ठीक करने के लिए sed का उपयोग करना था


इसके लिए धन्यवाद, यह मददगार था क्योंकि मूल प्रश्न में यह निर्दिष्ट नहीं किया गया था कि स्कीमा को शामिल किए जाने की आवश्यकता है या नहीं। सरल जब स्कीमा पहले से ही सेटअप किया गया है
kjones

0

व्यक्तिगत रूप से मुझे mysqldump का सरल उपयोग पसंद है, फिर भी कुछ समायोजन की आवश्यकता है (यूनिक्स के साथ आपकी कला के आधार पर और आप क्या करना चाहते हैं)।

पूर्व। पीके के साथ सिर्फ एक टेबल (प्रॉड्स) के लिए:

$ mysqldump mysql prods -u ME -pPASS  --compatible ansi --compact |grep -v "^\/\*" |sqlite3 testme2.db
$ mysqldump mysql prods -u ME -pPASS  --compatible ansi --compact |grep -v "^\/\*" |sqlite3 testme2.db
    Error: near line 1: table "prods" already exists
    Error: near line 7: UNIQUE constraint failed: prods.id, prods.ts
$ sqlite3 testme2.db '.schema'
    CREATE TABLE "prods" (
      "id" varchar(30) NOT NULL DEFAULT '',
      "ts" int(11) NOT NULL DEFAULT '0',
      "val" double DEFAULT NULL,
      PRIMARY KEY ("id","ts")
    );

अधिक जटिल चीजों के लिए, शायद एक आवरण लिखने के लिए बेहतर है, या फिर, जिस्ट पर पहले से ही उल्लिखित शानदार awk लिनक्स शेल स्क्रिप्ट का उपयोग करें ।


-1

SQLite डेटाबेस ब्राउज़र नामक एक शानदार, हल्का उपकरण है जो आपको sqlite डेटाबेस बनाने और संपादित करने की अनुमति देता है। मैंने इसका उपयोग एंड्रॉइड ऐप के लिए डेटाबेस को क्रिटेट करने के लिए किया। आप डेटा को लोड करने के लिए इसके खिलाफ SQL स्टेटमेंट चला सकते हैं, इसलिए यदि आप mySQL डेटाबेस से डेटा निर्यात करते हैं तो आप इस टूल का उपयोग करके इसे आयात कर सकते हैं। यहाँ एक लिंक है: http://sqlitebrowser.sourceforge.net/


2
यह MySQL रूपांतरण के साथ कैसे मदद करता है?
सीएल।

2
यह आपको वही करने में मदद करता है जो आपको करने की आवश्यकता है। वास्तव में, मैं सचमुच अभी यह कर रहा हूं। Mysqldump या phpMyAdmin का उपयोग करके अपने MySQL को निर्यात करें और फिर इसे एक sqlite डेटाबेस में आयात करने के लिए उपरोक्त टूल का उपयोग करें। उन्होंने "MySQL डेटाबेस को SQLite डेटाबेस में निर्यात करने के साथ" के लिए कहा और ऊपर दिया गया टूल ठीक उसी तरह से दूसरा कदम होगा जैसा आपको चाहिए। वोट करने के लिए वैध मदद सिर्फ इतना गलत है। मैं यहां नया हूं और मेरे उत्तर ने न केवल प्रश्न को संबोधित किया है, बल्कि वास्तविक दुनिया की स्थिति में मैं अभी उपयोग कर रहा हूं। बिना किसी कारण के वोट डाउन करने के लिए इतनी जल्दी मत करो और लोगों को भाग लेने से हतोत्साहित करें।
एरॉन रैटनर

2
आपने वास्तविक दूसरा (और सबसे महत्वपूर्ण) चरण छोड़ दिया, MySQL के सभी विशिष्ट भागों को SQLite- विशिष्ट या मानक सिंटैक्स में MySQL डंप में परिवर्तित किया।
सीएल।

4
देर से, लेकिन यह उपकरण इस समस्या के लिए काम नहीं करता है। यह MySQL-विशिष्ट सिंटैक्स (केवल SQLite सिंटैक्स) का समर्थन नहीं करता है। सफलतापूर्वक आयात किए जाने के लिए आपको डंप फ़ाइल को बहुत अधिक संपादित करना होगा।
सेवर्री एम। ओलसेन

5
@AaronRatner नहीं, समाधान काम नहीं करता है। प्रश्न MySQL डेटाबेस को बदलने के बारे में स्पष्ट रूप से पूछता है, और आपके द्वारा सुझाए गए टूल MySQL सिंटैक्स को संभाल नहीं करता है। आपको इसे व्यक्तिगत रूप से लेने की आवश्यकता नहीं है - आप जो कह रहे हैं उससे मैं अनुमान लगाऊंगा कि आप "आराम" करने की आवश्यकता वाले हैं :-) यदि कोई कहता है कि आपका समाधान उनके लिए मददगार नहीं है, तो वे सिर्फ एक बात बता रहे हैं साधारण तथ्य। आपकी प्रतिक्रिया कि यह "असाधारण रूप से कठिन है क्योंकि समाधान सहायक है" बेतुका है। मुझे पता है कि यह मेरे लिए उपयोगी नहीं है, क्योंकि यह :-) चीयर्स नहीं है!
बार्टोसजप जूल

-17

के साथ डेटा निर्यात करें

  mysqldump database > database.sql

और के साथ डेटा आयात करें

  sqlite3 database < database.sql

आपको -u (उपयोगकर्ता) और -p (पासवर्ड) विकल्प की आवश्यकता हो सकती है


9
क्या यह वास्तव में mysql में उपलब्ध अंतर और सुविधाओं के साथ काम करेगा और साइक्लाइट में नहीं होगा?
rzetterberg

5
यह काम नहीं करेगा। संकेत, तालिका विवरण, बाइनरी डेटा एस्केप सीक्वेंस, लॉकिंग मैकेनिज्म, संभवतः अन्य सामान, सभी MySQL और SQLite के बीच भिन्न हैं।
सी.आर.

यह एक बेहतर समाधान है: stackoverflow.com/questions/455606/…
जोसफ

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