Vui lòng giúp tôi xuất cơ sở dữ liệu MySQL thành cơ sở dữ liệu SQLite.
Câu trả lời:
Có một tập lệnh shell Linux tuyệt vời trên Github giúp chuyển đổi Mysql thành tệp Sqlite3. Bạn cần cài đặt cả mysqldump và sqlite3 trên máy chủ của mình. Hoạt động tuyệt vời.
2016-05-11 17:32 GMT+2 @esperlu declared MIT as a fitting license (also retrospectively) and the original gist as deprecated.
Câu trả lời của @ user2111698 được chỉnh sửa bởi @quassy hoạt động như đã hứa. Vì tôi làm điều này thường xuyên nên tôi đã đưa các hướng dẫn của họ vào một tập lệnh bash:
#!/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
Có thể tìm thấy ý chính với các nhận xét chi tiết tại https://gist.github.com/grfiv/b79ace3656113bcfbd9b7c7da8e9ae8d
mysql2sqlite.sh được đề cập trong bài đăng trên cùng không đối phó tốt với các dòng CHÍNH CHÍNH, nó không viết theo sau )
để hoàn thành câu lệnh CREATE.
Đây là những gì tôi đã làm. Tôi đã chạy bãi chứa mysql như:
mysqldump --skip-create-options --compatible=ansi --skip-extended-insert --compact --single-transaction -h<host> -u<user> -p<passwd> <database name> > localdb.txt
Sau đó, tôi đã sử dụng grep để xóa PRIMARY KEY và KEY:
cat localdb.txt | grep -v "PRIMARY KEY' | grep -v KEY > localdb.txt.1
Sau đó, tôi đã sử dụng một trình chỉnh sửa để sửa tệp. Khi các khóa được gỡ bỏ, bạn sẽ có câu lệnh CREATE trông giống như sau:
CREATE ...
...,
)
Dấu vết đó ,
phải được loại bỏ. Trong vi, biểu thức này khớp với chúng,, $ \ n)
Sau đó, bạn cần thay đổi tất cả \'
thành''
Sau đó, bạn có thể thực hiện nhập:
sqlite3 local.sqlite3 < localdb.txt.1
Và đó là nó. Tôi chưa tìm thấy một chương trình nào phù hợp với tôi. Tôi hi vọng điêu nay se giup được ai đo.
Tôi đã tạo cấu trúc bảng trong cơ sở dữ liệu sqlite bằng tay.
Hơn là tôi đã tải lên dữ liệu bằng lệnh teh sau:
mysqldump -u root {database} {table} --no-create-info --skip-extended-insert --complete-insert --skip-add-locks --compatible=ansi | sed "s/\\\'/''/g" |sqlite3 flora.db
Tôi đã phải sử dụng sed để sửa một mã hóa đỉnh khác nhau trong hai cơ sở dữ liệu
Cá nhân tôi thích cách sử dụng mysqldump đơn giản, nhưng cần phải điều chỉnh một số (tùy thuộc vào nghệ thuật của bạn với Unix và những gì bạn muốn làm).
Ví dụ. chỉ cho một bảng (sản phẩm) với PK:
$ 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")
);
Đối với những thứ phức tạp hơn, có lẽ tốt hơn nên viết một trình bao bọc, hoặc sau đó, sử dụng tập lệnh shell Linux awk tuyệt vời đã được đề cập trên Gist .
Có một công cụ tuyệt vời, nhẹ được gọi là Trình duyệt cơ sở dữ liệu SQLite cho phép bạn tạo và chỉnh sửa cơ sở dữ liệu sqlite. Tôi đã sử dụng nó để tìm kiếm cơ sở dữ liệu cho các ứng dụng Android. Bạn có thể chạy các câu lệnh SQL dựa vào nó để tải dữ liệu lên, vì vậy nếu bạn xuất dữ liệu từ cơ sở dữ liệu mySQL, bạn có thể nhập dữ liệu đó bằng công cụ này. Đây là liên kết: http://sqlitebrowser.sourceforge.net/
xuất dữ liệu với
mysqldump database > database.sql
và nhập dữ liệu với
sqlite3 database < database.sql
bạn có thể cần các tùy chọn -u (người dùng) và -p (mật khẩu)