Ubah MySQL menjadi SQlite [closed]

Jawaban:

78

Ada skrip mysql2sqlite.sh di GitHub

Seperti yang dijelaskan di tajuk, skrip dapat digunakan seperti ini:

./mysql2sqlite.sh myDbase | sqlite3 database.sqlite

alternatif

David LeBauer
sumber
8
Bekerja sebagai pesona! Ini sedikit dokumentasinya: $ ./mysql2sqlite.sh -h host -u MyUserName -pMySecretPassWord myDbase | sqlite3 database.sqlite gist.github.com/943776
kachar
Skrip hanya menarik argumen dari baris perintah dan meneruskannya ke mysqldump, sehingga Anda dapat mengetahui tentang konfigurasi port khusus, dll. Dengan man mysqlatauman mysqldump
Devin Howard
2
Perlu dicatat bahwa skrip ini telah digantikan oleh penerus yang dipertahankan di sini: github.com/dumblob/mysql2sqlite
drzax
Lebih baik lagi untuk bermain dengan karakter non-ascii: $. / Mysql2sqlite.sh --default-character-set = utf8 -hHost -uUser -pPass db | sqlite3 db.sqlite gist.github.com/esperlu/943776#gistcomment-984448
Minggu Junwen
52

Berikut adalah daftar konverter . ( snapshot di archive.today )


Metode alternatif yang akan bekerja bahkan di windows tetapi jarang disebutkan adalah: gunakan kelas ORM yang mengabstraksi perbedaan database tertentu untuk Anda. misalnya Anda mendapatkan ini dalam PHP ( RedBean ), Python (lapisan ORM Django, Storm , SqlAlchemy ), Ruby on Rails ( ActiveRecord ), Cocoa ( CoreData ) dll.

yaitu Anda bisa melakukan ini:

  1. Muat data dari database sumber menggunakan kelas ORM.
  2. Simpan data dalam memori atau buat serial ke disk.
  3. Menyimpan data ke dalam database tujuan menggunakan kelas ORM.
David d C e Freitas
sumber
43

Sequel (Ruby ORM) memiliki alat baris perintah untuk menangani database, Anda harus menginstal ruby, lalu:

  $ gem install sequel mysql2 sqlite3 
  $ sequel mysql2://user:password@host/database -C sqlite://db.sqlite
Macario
sumber
1
Jangan lupa gem install mysqldangem install sqlite3
Nick
1
dan gem install pgjika Anda ingin mengubah dari atau ke db postgres, sekuel harus memiliki adaptor untuk db mayor
Macario
2
ganti mysqldengan mysql2jika Anda menggunakanmysql2
Carlosin
1
Catatan: Anda memerlukan ruby-devpaket untuk membuat paket permata asli ini.
Panda
1
Harus menggunakan "gem install sequel mysql2 sqlite3" dan kemudian "sequel mysql2: // user: password @ host / database -C sqlite: //db.sqlite" PERFECT
unom
17

Tidak semua skema DB dapat dikonversi. MySQL lebih kompleks dan kaya fitur daripada SQLite. Namun, jika skema Anda cukup sederhana, Anda dapat memasukkannya ke dalam file SQL dan mencoba mengimpor / memuatnya ke SQLite DB.

Assaf Lavie
sumber
Setelah membuang database MySQL Anda ke sebuah file, Anda dapat menggunakan skrip ini untuk mengubahnya menjadi SQLite github.com/dumblob/mysql2sqlite (seperti yang disebutkan dalam jawaban @David_LeBauer).
Paul Rougieux
7

Saya menghadapi masalah yang sama sekitar 2 hari yang lalu ketika saya harus mengubah database MySQL 20GB + ke SQLite. Itu bukan tugas yang mudah dan saya akhirnya menulis paket Python ini yang melakukan pekerjaan itu.

Sisi positifnya ditulis dengan Python adalah bahwa itu lintas platform (tidak seperti skrip shell / bash) dan semuanya dapat dengan mudah diinstal menggunakan pip install(bahkan di Windows). Ini menggunakan generator dan chunking data yang sedang diproses dan oleh karena itu sangat efisien dalam memori.

Saya juga berusaha untuk menerjemahkan dengan benar sebagian besar tipe data dari MySQL ke SQLite .

Alat ini juga diuji secara menyeluruh dan berfungsi pada Python 2.7 dan 3.5+ .

Ini dapat dipanggil melalui baris perintah tetapi juga dapat digunakan sebagai kelas Python standar yang dapat Anda sertakan dalam beberapa orkestrasi Python yang lebih besar.

Inilah cara Anda menggunakannya:

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.
Klemen Tušar
sumber
1
Hai @techouse, ini terlihat bagus! Apakah ada cara itu bisa bekerja dengan .sqlfile dump atau apakah itu memerlukan koneksi ke database MySQL yang diinstal?
vortek
Hei! Ummm, tidak, ini membutuhkan database MySQL yang berfungsi. Jika Anda memiliki dump tanpa server yang sebenarnya, taruhan terbaik Anda adalah mengubah file secara manual jika Anda tahu apa yang Anda lakukan.
Klemen Tušar
@arkadianriver Saya sarankan Anda selalu menggunakan lingkungan virtual dengan Python 😎
Klemen Tušar
4

Cara termudah untuk Mengonversi MySql DB ke Sqlite:

1) Buat file dump sql untuk Anda database MySql.

2) Unggah file ke konverter online RebaseData di sini

3) Tombol unduh akan muncul di halaman untuk mengunduh database dalam format Sqlite

Sandeep Yohans
sumber
4

Saya menemukan solusi yang tepat

Pertama, Anda memerlukan skrip ini (masukkan ke dalam file bernama 'mysql-to-sqlite.sh'):

#!/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

Kemudian, buang salinan database Anda:

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

Dan sekarang, jalankan konversi:

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

Dan jika semuanya berjalan dengan baik, Anda sekarang harus memiliki dumpfile.db yang dapat digunakan melalui sqlite3.

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
Paulo Luan
sumber
3

Ada berbagai cara untuk melakukan ini. Saya juga mengalami masalah ini dan saya banyak mencari dan kemudian saya mendapat cara sederhana untuk mengonversi MySQL ke SQLite.

Ikuti langkah ini:

  1. Pertama, Anda Perlu Menginstal SQLite DB Browser (sangat kecil dan cepat untuk melihat Tabel dan Data)

  2. Buka File MySQL Anda di Notepad atau akan lebih bagus jika Anda membuka di Notepad ++

  3. Hapus Baris Ekstra Pertama Berisi Informasi atau Kueri dan Simpan.

  4. Buka SQLite DB Browser, Buat Database, lalu Tabel, dan Jenis yang Sama seperti di Database MySQL.

  5. Di Menu Bar SQLite DB Browser Pilih File-> kemudian Impor data File MySQL yang Anda simpan.

Ini akan dengan mudah diubah menjadi SQLite Setelah Dialog Peringatan.

Jika kesalahan maka hapus lebih banyak baris tambahan jika file MySQL Anda memiliki.

Anda juga dapat Menginstal Perangkat Lunak MySQL ke SQLite Converter pada percobaan Basis, tetapi informasi yang saya berikan untuk konversi adalah seumur hidup.

Uzair Qaiser
sumber
Ini berfungsi dengan baik jika data Anda tidak memiliki karakter seperti apostrof. Misalnya "Ini adalah buku Peter" di sql dumb akan menjadi 'Ini adalah buku Peter'. Ini akan membuat DB Browser membuang error, karena data yang besar sulit untuk dihapus. Tetapi jika Anda mengimpor data dari phpAdmin sebagai CSV ke DB Browser, pengimporan itu akan berhasil. Saya harap bantuan ini
Seunope
1

Solusi saya untuk masalah ini menjalankan Mac adalah dengan

  1. Instal Ruby dan sekuelnya yang mirip dengan jawaban Macario. Saya mengikuti tautan ini untuk membantu mengatur Ruby, mysql dan sqlite3 Ruby on Rails pengaturan pengembangan untuk Mac OSX
  2. Pasang sekuel

    $ gem install sequel

    Jika masih dibutuhkan

    % gem install mysql sqlite3

    kemudian gunakan yang berikut ini berdasarkan Sekuel doc bin_sequel.rdoc (lihat Salin Database)

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

Seorang pengguna windows dapat menginstal Ruby dan Sequel untuk solusi windows.

Berikan Keberuntungan
sumber
Bagaimana saya dapat menyalin hanya satu tabel dari DB bukan seluruh database mysql?
Atul Vaibhav
Untuk satu meja di masa lalu saya telah melakukan ini, tetapi mungkin ada cara yang lebih baik. Ekspor tabel sebagai csv dengan nama kolom di opsi baris pertama dicentang. Kemudian menggunakan DB Browser untuk SQLite, impor tabel ke database sqlite saya yang ada menggunakan opsi impor tabel dari csv. Anda kemudian mungkin harus masuk dan mengubah bidang ke jenis yang Anda butuhkan karena saya yakin semua bidang akan diatur ke TEXT. Dalam proyek yang saya kerjakan meskipun kami mengembangkan proses, kami membuat panggilan api untuk mengembalikan semua data dalam tabel dan kemudian memasukkan / mengganti data dalam database aplikasi.
Grant Luck
Sepertinya berhasil. Meskipun demikian, saya tidak dapat menemukan di mana file outputnya. Bisakah kamu membantuku?
Pontios
1

Saya mencoba sejumlah metode di utas ini, tetapi tidak ada yang berhasil untuk saya. Jadi, inilah solusi baru, yang menurut saya sangat sederhana:

  1. Instal RazorSQL . Bekerja untuk Mac, Windows dan Linux.
  2. Di RazorSQL, sambungkan ke database Anda, di localhost misalnya. Konversi tidak bekerja dengan file sql dump.
  3. Klik kanan pada database Anda -> Konversi Database -> pilih SQLite. Ini akan menyimpan file txt dengan semua sqlitequery yang diperlukan untuk membuat database ini.
  4. Instal pengelola database SQLite, seperti DB Browser for SQLite . Ini berfungsi di OS apa pun.
  5. Buat database kosong, buka tab Jalankan SQL dan tempel konten dari langkah 3.

Itu saja, sekarang Anda memiliki database SQLite Anda.

Vali Munteanu
sumber
RazorSQL tampaknya hanya membangun file "umum" * .sql dengan definisi tabel dan data yang dimasukkan ke dalam tetapi tidak ada yang khusus SQLite. Itu tidak mengekspor Views yang merupakan minus besar. Klien mysqldump yang hadir dengan tampilan ekspor MySql juga tetapi juga menghasilkan banyak hal bersyarat, dll. Apa yang tidak akan dicerna oleh SQLite.
dalilander
0

Jika Anda memiliki pengalaman, tulis skrip sederhana dengan Perl \ Python \ etc, dan konversikan MySQL ke SQLite. Baca data dari Mysql dan tulis di SQLite.

Eugene
sumber
0

Saya suka SQLite2009 Pro Enterprise Manager yang disarankan oleh Jfly. Namun:

  • Tipe data MySQL INT tidak diubah ke tipe data SQlite INTEGER (bekerja dengan DBeaver)

  • Itu tidak mengimpor batasan kunci asing dari MySQL (saya tidak dapat menemukan alat apa pun yang mendukung transfer batasan kunci asing dari MySQL ke SQlite.)

Stefan
sumber
0

Dari daftar alat konverter saya menemukan Kexi . Ini adalah alat UI untuk mengimpor dari berbagai server DB (termasuk MySQL) ke SQLite. Saat mengimpor beberapa database (katakanlah dari MySQL), ia menyimpannya dalam format Kexi. Format Kexi adalah format SQLite 'asli'. Jadi cukup salin file kexi dan miliki data Anda dalam format sqlite

Tushar Goswami
sumber
0

Jika Anda telah diberi file database dan belum menginstal server yang benar (baik SQLite atau MySQL), coba alat ini: https://dbconvert.com/sqlite/mysql/ Versi trial memungkinkan konversi 50 record pertama dari setiap tabel , data lainnya diberi watermark. Ini adalah program Windows, dan dapat dibuang ke server database yang sedang berjalan, atau dapat membuang keluaran ke file .sql

kurdtpage
sumber