Câu trả lời:
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ế
$ ./mysql2sqlite.sh -h host -u MyUserName -pMySecretPassWord myDbase | sqlite3 database.sqlite
gist.github.com/943776
man mysql
hoặcman mysqldump
Đây là danh 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:
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
gem install mysql
vàgem install sqlite3
gem install pg
nế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
mysql
với mysql2
nếu bạn đang sử dụngmysql2
ruby-dev
gói để xây dựng các gói đá quý gốc này.
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.
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.
.sql
tệ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?
Sqlite đã chính thức có danh sách các công cụ chuyển đổi.
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
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
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:
Đầ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)
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 ++
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ó.
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.
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.
Giải pháp của tôi cho vấn đề này khi chạy Mac là
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.
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:
sqlite
truy vấn cần thiết để tạo cơ sở dữ liệu này.Vậy là xong, bây giờ bạn đã có cơ sở dữ liệu SQLite của mình.
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.)
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
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