MySQL'i SQlite'a dönüştürme [kapalı]


120

Windows üzerinde ücretsiz bir araçla MySQL'den SQLite'a dönüştürmek mümkün müdür?


Yanıtlar:


78

GitHub'da bir mysql2sqlite.sh betiği var

Başlıkta açıklandığı gibi, komut dosyası şu şekilde kullanılabilir:

./mysql2sqlite.sh myDbase | sqlite3 database.sqlite

alternatifleri


8
Cazibe olarak çalışıyor! İşte bir parça belge: $ ./mysql2sqlite.sh -h host -u MyUserName -pMySecretPassWord myDbase | sqlite3 database.sqlite gist.github.com/943776
kachar

Komut dosyası, komut satırından argümanları çeker ve bunları mysqldump'a iletir, böylece özel bağlantı noktalarını vb. man mysqlVeya ile yapılandırmayı öğrenebilirsinizman mysqldump
Devin Howard

2
Bu betiğin, burada tutulan bir halef tarafından değiştirildiğini belirtmek gerekir: github.com/dumblob/mysql2sqlite
drzax

Ascii olmayan karakterlerle oynamak daha da iyi: $. / Mysql2sqlite.sh --default-character-set = utf8 -hHost -uUser -pPass db | sqlite3 db.sqlite gist.github.com/esperlu/943776#gistcomment-984448
Sun Junwen

52

İşte dönüştürücülerin bir listesi . ( arşiv.today'da anlık görüntü )


Pencerelerde bile çalışabilecek ancak nadiren bahsedilen alternatif bir yöntem şudur: sizin için belirli veritabanı farklılıklarını ortadan kaldıran bir ORM sınıfı kullanın. örneğin bunları PHP ( RedBean ), Python (Django'nun ORM katmanı, Storm , SqlAlchemy ), Ruby on Rails ( ActiveRecord ), Cocoa ( CoreData ) vb.

yani bunu yapabilirsin:

  1. ORM sınıfını kullanarak kaynak veritabanından veri yükleyin.
  2. Verileri bellekte saklayın veya diske serileştirin.
  3. ORM sınıfını kullanarak verileri hedef veritabanına depolayın.

43

Sequel (Ruby ORM), veritabanları ile uğraşmak için bir komut satırı aracına sahiptir, Ruby'nin kurulu olması gerekir, sonra:

  $ gem install sequel mysql2 sqlite3 
  $ sequel mysql2://user:password@host/database -C sqlite://db.sqlite

1
Unutma gem install mysqlvegem install sqlite3
Nick

1
ve gem install pgbir postgres db'den veya bir postgres db'ye dönüştürmek istiyorsanız, devamı, büyük db'ler için adaptörlere sahip olmalıdır
Macario

2
kullanıyorsanız mysqlile değiştirinmysql2mysql2
Carlosin

1
Not: ruby-devBu yerel mücevher paketlerini oluşturmak için pakete ihtiyacınız olacak .
Panda

1
"Gem install sequel mysql2 sqlite3" ve ardından "sequel mysql2: // kullanıcı: şifre @ ana bilgisayar / veritabanı -C sqlite: //db.sqlite" MÜKEMMEL
unom

17

Her DB şeması dönüştürülemez. MySQL, SQLite'den daha karmaşık ve zengin özelliklere sahiptir. Bununla birlikte, şemanız yeterince basitse, onu bir SQL dosyasına dökebilir ve onu bir SQLite DB'ye aktarmayı / yüklemeyi deneyebilirsiniz.


MySQL veritabanınızı bir dosyaya döktükten sonra, bu komut dosyasını SQLite github.com/dumblob/mysql2sqlite'a dönüştürmek için kullanabilirsiniz ( @David_LeBauer'in cevabında belirtildiği gibi).
Paul Rougieux

7

Yaklaşık 2 gün önce, 20GB + MySQL veritabanını SQLite'a dönüştürmek zorunda kaldığımda aynı problemle karşılaştım. Bu hiçbir şekilde kolay bir görev değildi ve işi yapan bu Python paketini yazdım .

Python'da yazılmasının iyi yanı, çapraz platform olması (bir kabuk / bash betiğinin aksine) ve tümü kullanılarak pip install(Windows'ta bile) kolayca kurulabilir olmasıdır . Üreteçleri ve işlenmekte olan verilerin yığınlarını kullanır ve bu nedenle bellek açısından çok verimlidir.

Ayrıca , veri türlerinin çoğunu MySQL'den SQLite'a doğru şekilde çevirmek için biraz çaba sarf ettim .

Araç ayrıca kapsamlı bir şekilde test edilmiştir ve Python 2.7 ve 3.5+ üzerinde çalışır .

Komut satırı aracılığıyla çağrılabilir, ancak bazı daha büyük Python düzenlemelerine dahil edebileceğiniz standart bir Python sınıfı olarak da kullanılabilir.

İşte bunu nasıl kullanacağınız:

Usage: mysql2sqlite [OPTIONS]

Options:
  -f, --sqlite-file PATH     SQLite3 database file  [required]
  -d, --mysql-database TEXT  MySQL database name  [required]
  -u, --mysql-user TEXT      MySQL user  [required]
  -p, --mysql-password TEXT  MySQL password
  -h, --mysql-host TEXT      MySQL host. Defaults to localhost.
  -P, --mysql-port INTEGER   MySQL port. Defaults to 3306.
  -c, --chunk INTEGER        Chunk reading/writing SQL records
  -l, --log-file PATH        Log file
  -V, --vacuum               Use the VACUUM command to rebuild the SQLite
                             database file, repacking it into a minimal amount
                             of disk space
  --use-buffered-cursors     Use MySQLCursorBuffered for reading the MySQL
                             database. This can be useful in situations where
                             multiple queries, with small result sets, need to
                             be combined or computed with each other.
  --help                     Show this message and exit.

1
Hey @techouse, bu harika görünüyor! Bir .sqldöküm dosyasıyla çalışmasının bir yolu var mı veya kurulu bir MySQL veritabanına bağlantı gerektiriyor mu?
vortek

Hey! Ummm, hayır bunun için çalışan bir MySQL veritabanı gerekir. Eğer gerçek bir sunucu olmadan bir dökümü varsa en iyi bahis elle dosya değiştirmek için eğer sen ne yaptığını biliyorum.
Klemen Tušar

@arkadianriver Python 😎 ile her zaman sanal ortamları kullanmanızı öneririm
Klemen Tušar


4

MySql DB'yi Sqlite'a dönüştürmenin en basit yolu:

1) MySql veritabanınız için sql döküm dosyası oluşturun.

2) Dosyayı RebaseData çevrimiçi dönüştürücüye buradan yükleyin

3) Veritabanını Sqlite formatında indirmek için sayfada bir indirme düğmesi görünecektir.


4

Mükemmel çözümü buldum

Öncelikle, bu betiğe ihtiyacınız var ('mysql-to-sqlite.sh' adlı bir dosyaya koyun):

#!/bin/bash
if [ "x$1" == "x" ]; then
  echo "Usage: $0 <dumpname>"
  exit
fi

cat $1 |
grep -v ' KEY "' |
grep -v ' UNIQUE KEY "' |
grep -v ' PRIMARY KEY ' |
sed '/^SET/d' |
sed 's/ unsigned / /g' |
sed 's/ auto_increment/ primary key autoincrement/g' |
sed 's/ smallint([0-9]*) / integer /g' |
sed 's/ tinyint([0-9]*) / integer /g' |
sed 's/ int([0-9]*) / integer /g' |
sed 's/ character set [^ ]* / /g' |
sed 's/ enum([^)]*) / varchar(255) /g' |
sed 's/ on update [^,]*//g' |
sed 's/\\r\\n/\\n/g' |
sed 's/\\"/"/g' |
perl -e 'local $/;$_=<>;s/,\n\)/\n\)/gs;print "begin;\n";print;print "commit;\n"' |
perl -pe '
if (/^(INSERT.+?)\(/) {
  $a=$1;
  s/\\'\''/'\'\''/g;
  s/\\n/\n/g;
  s/\),\(/\);\n$a\(/g;
}
' > $1.sql
cat $1.sql | sqlite3 $1.db > $1.err
ERRORS=`cat $1.err | wc -l`
if [ $ERRORS == 0 ]; then
  echo "Conversion completed without error. Output file: $1.db"
  rm $1.sql
  rm $1.err
else
  echo "There were errors during conversion.  Please review $1.err and $1.sql for details."
fi

Ardından, veritabanınızın bir kopyasını alın:

you@prompt:~$ mysqldump -u root -p --compatible=ansi --skip-opt generator > dumpfile

Ve şimdi dönüşümü çalıştırın:

you@prompt:~$ mysql-to-sqlite.sh dumpfile

Ve her şey yolunda giderse, artık sqlite3 aracılığıyla kullanılabilen bir dumpfile.db'ye sahip olmalısınız.

you@prompt:~$ sqlite3 dumpfile.db 
SQLite version 3.6.10
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .tables
dg_cities                 dg_forms                  dg_surnames             
dg_counties               dg_provinces              dg_user_accounts        
dg_countries              dg_provinces_netherlands
dg_first_names            dg_states

3

Bunu yapmanın farklı yolları var. Ben de bu problemi yaşadım ve çok araştırdım ve sonra MySQL'i SQLite'a dönüştürmenin basit bir yolunu buldum.

Bu adımları takip et:

  1. Önce SQLite DB Tarayıcısını Kurmanız Gerekiyor (Tabloları ve Verileri görüntülemek için çok küçük ve hızlı)

  2. MySQL Dosyanızı Not Defteri'nde açın, yoksa Notepad ++ ile açarsanız harika olur

  3. İlk Ekstra Satırları Kaldır, Bilgi veya Sorgu İçerir ve Kaydedin.

  4. MySQL Veritabanında olduğu gibi SQLite DB Tarayıcısını, Veritabanı Oluştur, ardından Tabloları ve Aynı Türleri açın.

  5. SQLite DB Browser Menü Çubuğunda File-> öğesini seçin ve ardından kaydettiğiniz MySQL Dosyasını içe aktar öğesini seçin.

Uyarı Sonrası İletişim Kutusuna kolayca SQLite dönüştürülür.

Hata varsa, MySQL dosyanızda varsa daha fazla satırı kaldırın.

Ayrıca MySQL'den SQLite Converter Yazılımına deneme bazında da yükleyebilirsiniz, ancak dönüştürme için verdiğim bilgiler ömür boyu.


Verilerinizde kesme işareti gibi bir karakter yoksa bu iyi çalıştı. Örneğin sql'de "Bu Peter'ın kitabı" aptalca "Bu Peter \ 'ın kitabı" olacaktır. Bu, DB Tarayıcısının hata atmasına neden olur, büyük bir veri için kaldırılması zordur. Ancak verileri phpAdmin'den CSV olarak DB Tarayıcısına aktarırsanız, bu içe aktarma başarılı olacaktır. Umarım bu yardımcı olur
Seunope

1

Mac çalıştıran bu soruna çözümüm ,

  1. Ruby'yi yükleyin ve Macario'nun cevabına benzer devam edin. Mac OSX için Ruby, mysql ve sqlite3 Ruby on Rails geliştirme kurulumuna yardımcı olmak için bu bağlantıyı takip ettim
  2. Devamı yükleyin

    $ gem install sequel

    Hala gerekliyse

    % gem install mysql sqlite3

    daha sonra Sequel doc bin_sequel.rdoc'a dayalı olarak aşağıdakileri kullandı (bkz. Veritabanını Kopyalama)

    sequel -C mysql://myUserName:myPassword@host/databaseName sqlite://myConvertedDatabaseName.sqlite

Bir Windows kullanıcısı, bir Windows çözümü için Ruby ve Sequel'i kurabilir.


Tüm mysql veritabanından değil, veritabanından yalnızca bir tabloyu nasıl kopyalayabilirim?
Atul Vaibhav

Geçmişte tek bir masa için bunu yaptım, ancak daha iyi bir yolu olabilir. Tabloyu csv olarak, ilk satırdaki sütun adları seçeneği işaretli olarak dışa aktarın. Daha sonra SQLite için DB Browser kullanarak, csv'den içe aktarma tablosunu kullanarak tabloyu mevcut sqlite veritabanıma içe aktarın. Tüm alanların METİN olarak ayarlanacağına inandığım için, daha sonra büyük olasılıkla içeri girip alanları istediğiniz türle değiştirmeniz gerekecektir. Üzerinde çalıştığım projede, bir süreç geliştirmemize rağmen, bir tablodaki tüm verileri döndürmek için bir api çağrısı yaptık ve ardından verileri uygulama veritabanına yerleştirdik / değiştirdik.
Grant Luck

Çalışıyor gibi görünüyor. Yine de çıktı dosyasının nerede olduğunu bulamıyorum. Bana yardım eder misiniz?
Pontios

1

Bu konu üzerinde bir dizi yöntem denedim, ancak hiçbir şey benim için işe yaramadı. İşte burada çok basit bulduğum yeni bir çözüm:

  1. RazorSQL'i yükleyin . Mac, Windows ve Linux için çalışır.
  2. RazorSQL'de, örneğin localhost'ta veritabanınıza bağlanın. Dönüştürme, sql döküm dosyalarıyla çalışmaz.
  3. Veritabanınıza sağ tıklayın -> Veritabanı Dönüştürme -> SQLite öğesini seçin. Bu, sqlitebu veritabanını oluşturmak için gerekli tüm sorguları içeren bir txt dosyasını kaydedecektir .
  4. SQLite için DB Tarayıcısı gibi bir SQLite veritabanı yöneticisi kurun . Herhangi bir işletim sisteminde çalışır.
  5. Boş bir veritabanı oluşturun, SQL Yürüt sekmesine gidin ve 3. adımdaki içeriği yapıştırın.

İşte bu, artık SQLite veritabanınız var.


RazorSQL, tablo tanımları ve veri girişleri ile "ortak" bir * .sql dosyası oluşturuyor gibi görünüyor, ancak özellikle SQLite'ye özgü değil. Büyük bir eksi olan Görünümleri dışa aktarmadı. MySql ile gelen mysqldump istemcisi de görünümleri dışa aktarır, ancak aynı zamanda SQLite'nin sindiremeyeceği birçok koşullu şeyler üretir.
dalilander

0

Tecrübeniz varsa, Perl \ Python \ etc ile basit betikler yazın ve MySQL'i SQLite'a dönüştürün. Mysql'deki verileri okuyun ve SQLite'a yazın.


0

Jfly tarafından önerilen SQLite2009 Pro Enterprise Manager'ı beğendim. Ancak:

  • MySQL veri türü INT, SQlite veri türü INTEGER'a dönüştürülmez (DBeaver ile çalışır)

  • MySQL'den yabancı anahtar kısıtlamalarını içe aktarmıyor (Yabancı anahtar kısıtlamalarının MySQL'den SQlite'a aktarılmasını destekleyen herhangi bir araç bulamadım.)


0

Gönderen dönüştürücü araçlar listesinin buldum kexi . Çeşitli DB sunucularından (MySQL dahil) SQLite'a aktarmak için bir UI aracıdır. Bazı veritabanlarını içe aktarırken (örneğin MySQL'den) Kexi formatında depolar. Kexi formatı 'yerel' SQLite formatıdır. Yani basitçe kexi dosyasını kopyalayın ve verilerinizi sqlite formatında alın


0

Bir veritabanı dosyası verilmişse ve doğru sunucuyu (SQLite veya MySQL) yüklemediyseniz, bu aracı deneyin: https://dbconvert.com/sqlite/mysql/ Deneme sürümü her tablonun ilk 50 kaydını dönüştürmeye izin verir , verilerin geri kalanı filigranlıdır. Bu bir Windows programıdır ve çalışan bir veritabanı sunucusuna döküm yapabilir veya çıktıyı bir .sql dosyasına dökebilir

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.