Chuyển đổi MySQL sang SQlite [đã đóng]


120

Có thể chuyển đổi từ MySQL sang SQLite bằng công cụ miễn phí trên windows không?


Câu trả lời:


78

Có một tập lệnh mysql2sqlite.sh trên GitHub

Như được mô tả trong tiêu đề, tập lệnh có thể được sử dụng như sau:

./mysql2sqlite.sh myDbase | sqlite3 database.sqlite

lựa chọn thay thế


8
Hoạt động như một sự quyến rũ! Dưới đây là một chút tài liệu: $ ./mysql2sqlite.sh -h host -u MyUserName -pMySecretPassWord myDbase | sqlite3 database.sqlite gist.github.com/943776
kachar

Các kịch bản chỉ kéo đối số từ dòng lệnh và vượt qua họ để mysqldump, vì vậy bạn có thể tìm hiểu về cấu hình cổng tùy chỉnh, vv với man mysqlhoặcman mysqldump
Devin Howard

2
Nó đáng chú ý là kịch bản này đã được thay thế bởi một người kế nhiệm duy trì ở đây: github.com/dumblob/mysql2sqlite
drzax

Tốt hơn nữa khi chơi với các ký tự không phải ascii: $. / Mysql2sqlite.sh --default-character-set = utf8 -hHost -uUser -pPass db | sqlite3 db.sqlite gist.github.com/esperlu/943776#gistcomment-984448
Sun Junwen

52

Đâydanh sách các bộ chuyển đổi . ( ảnh chụp nhanh tại archive.today )


Một phương pháp thay thế có thể hoạt động ngay cả trên windows nhưng hiếm khi được đề cập đến là: sử dụng lớp ORM để tóm tắt các khác biệt cơ sở dữ liệu cụ thể cho bạn. ví dụ: bạn nhận được những thứ này trong PHP ( RedBean ), Python (lớp ORM của Django, Storm , SqlAlchemy ), Ruby on Rails ( ActiveRecord ), Cocoa ( CoreData ), v.v.

tức là bạn có thể làm điều này:

  1. Tải dữ liệu từ cơ sở dữ liệu nguồn bằng cách sử dụng lớp ORM.
  2. Lưu trữ dữ liệu trong bộ nhớ hoặc tuần tự hóa vào đĩa.
  3. Lưu trữ dữ liệu vào cơ sở dữ liệu đích bằng cách sử dụng lớp ORM.

43

Sequel (Ruby ORM) có một công cụ dòng lệnh để xử lý cơ sở dữ liệu, bạn phải cài đặt ruby, sau đó:

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

1
Đừng quên gem install mysqlgem install sqlite3
Nick

1
gem install pgnếu bạn muốn chuyển đổi từ hoặc sang db postgres, phần tiếp theo phải có bộ điều hợp cho db's chính
Macario

2
thay thế mysqlvới mysql2nếu bạn đang sử dụngmysql2
Carlosin

1
Lưu ý: Bạn sẽ cần ruby-devgói để xây dựng các gói đá quý gốc này.
Panda

1
Phải sử dụng "gem cài đặt phần tiếp theo mysql2 sqlite3" và sau đó "phần tiếp theo mysql2: // user: password @ host / database -C sqlite: //db.sqlite" PERFECT
unom

17

Không phải mọi lược đồ DB đều có thể được chuyển đổi. MySQL phức tạp hơn và nhiều tính năng hơn SQLite. Tuy nhiên, nếu lược đồ của bạn đủ đơn giản, bạn có thể kết xuất nó vào một tệp SQL và cố gắng nhập / tải nó vào một SQLite DB.


Sau khi kết xuất cơ sở dữ liệu MySQL của bạn vào một tệp, bạn có thể sử dụng tập lệnh này để chuyển đổi nó thành SQLite github.com/dumblob/mysql2sqlite (như đã đề cập trong câu trả lời của @David_LeBauer).
Paul Rougieux

7

Tôi đã đối mặt với vấn đề tương tự khoảng 2 ngày trước khi tôi phải chuyển đổi cơ sở dữ liệu 20GB + MySQL sang SQLite. Nó hoàn toàn không phải là một nhiệm vụ dễ dàng và tôi đã viết gói Python này để thực hiện công việc.

Ưu điểm của việc nó được viết bằng Python là nó đa nền tảng (không giống như script shell / bash) và tất cả đều có thể dễ dàng cài đặt bằng cách sử dụng pip install(ngay cả trên Windows). Nó sử dụng bộ tạo và phân chia dữ liệu đang được xử lý và do đó rất hiệu quả về bộ nhớ.

Tôi cũng đã cố gắng dịch chính xác hầu hết các kiểu dữ liệu từ MySQL sang SQLite .

Công cụ này cũng được kiểm tra kỹ lưỡng và hoạt động trên Python 2.7 và 3.5+ .

Nó không thể truy xuất được thông qua dòng lệnh nhưng cũng có thể được sử dụng như một lớp Python tiêu chuẩn mà bạn có thể đưa vào một số điều phối Python lớn hơn.

Đây là cách bạn sử dụng nó:

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
Này @techouse, cái này trông rất tuyệt! Có cách nào nó có thể hoạt động với .sqltệp kết xuất hoặc nó có yêu cầu kết nối với cơ sở dữ liệu MySQL đã cài đặt không?
vortek

Chào! Ummm, không, điều này yêu cầu cơ sở dữ liệu MySQL đang hoạt động. Nếu bạn có một kết xuất mà không có một máy chủ thực tế, cách tốt nhất của bạn là thay đổi tệp theo cách thủ công nếu bạn biết mình đang làm gì.
Klemen Tušar

@arkadianriver Tôi khuyên bạn nên luôn sử dụng môi trường ảo với Python 😎
Klemen Tušar,


4

Cách đơn giản nhất để chuyển đổi MySql DB sang Sqlite:

1) Tạo tệp kết xuất sql cho cơ sở dữ liệu MySql của bạn.

2) Tải tệp lên trình chuyển đổi trực tuyến RebaseData tại đây

3) Một nút tải xuống sẽ xuất hiện trên trang để tải xuống cơ sở dữ liệu ở định dạng Sqlite


4

Tôi đã tìm thấy giải pháp hoàn hảo

Đầu tiên, bạn cần tập lệnh này (đặt nó vào một tệp có tên '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

Sau đó, kết xuất một bản sao cơ sở dữ liệu của bạn:

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

Và bây giờ, hãy chạy chuyển đổi:

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

Và nếu mọi việc suôn sẻ, bây giờ bạn sẽ có một tệp dumpfile.db có thể được sử dụng thông qua 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

3

Có nhiều cách khác nhau để làm điều này. Tôi cũng gặp sự cố này và tôi đã tìm kiếm rất nhiều và sau đó tôi có một cách đơn giản để chuyển đổi MySQL sang SQLite.

Làm theo các bước sau:

  1. Đầu tiên bạn cần cài đặt trình duyệt SQLite DB (rất nhỏ và nhanh để xem các bảng và dữ liệu)

  2. Mở tệp MySQL của bạn trong Notepad hoặc sẽ rất tuyệt nếu bạn mở bằng Notepad ++

  3. Loại bỏ các dòng phụ đầu tiên chứa thông tin hoặc truy vấn và lưu nó.

  4. Mở Trình duyệt SQLite DB, Tạo Cơ sở dữ liệu, sau đó đến Bảng và Các loại tương tự như trong Cơ sở dữ liệu MySQL.

  5. Trong Thanh Menu của Trình duyệt SQLite DB, Chọn Tệp-> sau đó Nhập dữ liệu Tệp MySQL mà bạn đã lưu.

Nó sẽ dễ dàng Chuyển đổi thành Hộp thoại Cảnh báo Sau SQLite.

Nếu lỗi, hãy xóa thêm các dòng thừa nếu tệp MySQL của bạn có.

Bạn cũng có thể Cài đặt Phần mềm Chuyển đổi MySQL sang SQLite trên Cơ sở dùng thử, nhưng thông tin tôi đưa ra để chuyển đổi là thời gian tồn tại.


Điều này hoạt động tốt nếu dữ liệu của bạn không có ký tự như dấu nháy đơn. Ví dụ "Đây là cuốn sách của Peter" trong sql câm sẽ là "Đây là cuốn sách của Peter". Điều này sẽ làm cho DB Browser bị lỗi, đối với một dữ liệu lớn thì rất khó để loại bỏ. Nhưng nếu bạn nhập dữ liệu từ phpAdmin dưới dạng CSV vào Trình duyệt DB, quá trình nhập đó sẽ thành công. Tôi hy vọng điều này giúp đỡ
Seunope

1

Giải pháp của tôi cho vấn đề này khi chạy Mac

  1. Cài đặt Ruby và phần tiếp theo tương tự như câu trả lời của Macario. Tôi đã theo liên kết này để giúp thiết lập Ruby, mysql và sqlite3 Thiết lập phát triển Ruby on Rails cho Mac OSX
  2. Cài đặt phần tiếp theo

    $ gem install sequel

    Nếu vẫn được yêu cầu

    % gem install mysql sqlite3

    sau đó sử dụng phần sau dựa trên Phần tiếp theo doc bin_sequel.rdoc (xem Cơ sở dữ liệu sao chép)

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

Người dùng windows có thể cài đặt Ruby và Sequel cho giải pháp windows.


Làm cách nào để chỉ sao chép một bảng từ cơ sở dữ liệu DB chứ không phải toàn bộ cơ sở dữ liệu mysql?
Atul Vaibhav

Đối với một bảng trong quá khứ, tôi đã làm điều này, nhưng có thể có một cách tốt hơn. Xuất bảng dưới dạng csv với các tên cột trong tùy chọn hàng đầu tiên được đánh dấu. Sau đó, sử dụng Trình duyệt DB cho SQLite, nhập bảng vào cơ sở dữ liệu sqlite hiện có của tôi bằng cách sử dụng tùy chọn nhập bảng từ csv. Sau đó, bạn có thể sẽ phải vào và thay đổi các trường thành loại bạn yêu cầu vì tôi tin rằng tất cả các trường sẽ được đặt thành TEXT. Trong dự án mà tôi đang thực hiện, mặc dù chúng tôi đã phát triển một quy trình là chúng tôi thực hiện một cuộc gọi api để trả về tất cả dữ liệu trong bảng và sau đó chèn / thay thế dữ liệu trong cơ sở dữ liệu ứng dụng.
Grant Luck,

Nó dường như được làm việc. Tuy nhiên, tôi không thể tìm thấy đâu là tệp đầu ra. Bạn có thể giúp tôi được không?
Pontios

1

Tôi đã thử một số phương pháp trên chủ đề này, nhưng không có gì hiệu quả với tôi. Vì vậy, đây là một giải pháp mới, mà tôi cũng thấy rất đơn giản:

  1. Cài đặt RazorSQL . Hoạt động cho Mac, Windows và Linux.
  2. Trong RazorSQL, hãy kết nối với cơ sở dữ liệu của bạn, trên localhost chẳng hạn. Chuyển đổi không hoạt động với các tệp kết xuất sql.
  3. Nhấp chuột phải vào cơ sở dữ liệu của bạn -> Chuyển đổi cơ sở dữ liệu -> chọn SQLite. Thao tác này sẽ lưu một tệp txt với tất cả các sqlitetruy vấn cần thiết để tạo cơ sở dữ liệu này.
  4. Cài đặt trình quản lý cơ sở dữ liệu SQLite, như Trình duyệt DB cho SQLite . Nó hoạt động trên mọi hệ điều hành.
  5. Tạo cơ sở dữ liệu trống, chuyển đến tab Execute SQL và dán nội dung từ bước 3.

Vậy là xong, bây giờ bạn đã có cơ sở dữ liệu SQLite của mình.


RazorSQL dường như chỉ xây dựng một tệp * .sql "thông thường" với các định nghĩa bảng và chèn dữ liệu intos nhưng không có gì đặc biệt là SQLite cụ thể. Nó không xuất Lượt xem, đây là một điểm trừ lớn. Máy khách mysqldump đi kèm với MySql cũng xuất các chế độ xem nhưng nó cũng tạo ra rất nhiều thứ có điều kiện, v.v. những gì SQLite sẽ không tiêu hóa.
dalilander 13/02/18

0

Nếu bạn có kinh nghiệm viết các tập lệnh đơn giản bằng Perl \ Python \ etc và chuyển đổi MySQL sang SQLite. Đọc dữ liệu từ Mysql và viết nó trên SQLite.


0

Tôi thích SQLite2009 Pro Enterprise Manager do Jfly đề xuất. Tuy nhiên:

  • Kiểu dữ liệu MySQL INT không được chuyển đổi thành kiểu dữ liệu SQlite INTEGER (hoạt động với DBeaver)

  • Nó không nhập các hằng số khóa ngoại từ MySQL (Tôi không thể tìm thấy bất kỳ công cụ nào hỗ trợ chuyển các ràng buộc khóa ngoại từ MySQL sang SQlite.)


0

Từ danh sách các công cụ chuyển đổi, tôi tìm thấy Kexi . Nó là một công cụ giao diện người dùng để nhập từ các máy chủ DB khác nhau (bao gồm cả MySQL) vào SQLite. Khi nhập một số cơ sở dữ liệu (ví dụ từ MySQL), nó sẽ lưu trữ nó ở định dạng Kexi. Định dạng Kexi là định dạng SQLite 'nguyên bản'. Vì vậy, chỉ cần sao chép tệp kexi và có dữ liệu của bạn ở định dạng sqlite


0

Nếu bạn đã được cung cấp tệp cơ sở dữ liệu và chưa cài đặt đúng máy chủ (SQLite hoặc MySQL), hãy thử công cụ này: https://dbconvert.com/sqlite/mysql/ Phiên bản dùng thử cho phép chuyển đổi 50 bản ghi đầu tiên của mỗi bảng , phần còn lại của dữ liệu được đánh dấu chìm. Đây là một chương trình Windows và có thể kết xuất vào một máy chủ cơ sở dữ liệu đang chạy hoặc có thể kết xuất đầu ra thành tệp .sql

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.