เป็นไปได้ไหมที่จะแปลงจาก MySQL เป็น SQLite ด้วยเครื่องมือฟรีบน windows?
เป็นไปได้ไหมที่จะแปลงจาก MySQL เป็น SQLite ด้วยเครื่องมือฟรีบน windows?
คำตอบ:
มีสคริปต์ mysql2sqlite.sh บนGitHub
ตามที่อธิบายไว้ในส่วนหัวสคริปต์สามารถใช้ได้ดังนี้:
./mysql2sqlite.sh myDbase | sqlite3 database.sqlite
ทางเลือก
$ ./mysql2sqlite.sh -h host -u MyUserName -pMySecretPassWord myDbase | sqlite3 database.sqlite
gist.github.com/943776
man mysql
หรือman mysqldump
นี่เป็นรายชื่อของแปลง ( ภาพรวมที่ archive.today )
วิธีอื่นที่ใช้ได้แม้ใน windows แต่ไม่ค่อยมีใครพูดถึงคือ: ใช้คลาส ORM ที่แยกความแตกต่างของฐานข้อมูลที่เฉพาะเจาะจงออกไปให้คุณ เช่นคุณได้รับสิ่งเหล่านี้ใน PHP ( RedBean ), Python (เลเยอร์ ORM ของ Django, Storm , SqlAlchemy ), Ruby on Rails ( ActiveRecord ), Cocoa ( CoreData ) เป็นต้น
กล่าวคือคุณสามารถทำได้:
Sequel (Ruby ORM) มีเครื่องมือบรรทัดคำสั่งสำหรับจัดการกับฐานข้อมูลคุณต้องติดตั้ง Ruby จากนั้น:
$ gem install sequel mysql2 sqlite3
$ sequel mysql2://user:password@host/database -C sqlite://db.sqlite
gem install mysql
และgem install sqlite3
gem install pg
ถ้าคุณต้องการแปลงจากหรือเป็น db postgres ภาคต่อควรมีอะแดปเตอร์สำหรับฐานข้อมูลหลัก
mysql
ด้วยmysql2
ถ้าคุณใช้mysql2
ruby-dev
แพ็คเกจเพื่อสร้างแพ็คเกจอัญมณีพื้นเมืองเหล่านี้
ไม่ใช่ทุกสคีมา DB ที่สามารถแปลงได้ MySQL มีความซับซ้อนและมีคุณสมบัติหลากหลายกว่า SQLite อย่างไรก็ตามหากสคีมาของคุณง่ายพอคุณสามารถถ่ายโอนข้อมูลลงในไฟล์ SQL และลองนำเข้า / โหลดลงใน SQLite DB
ฉันประสบปัญหาเดียวกันเมื่อ 2 วันที่แล้วเมื่อฉันต้องแปลงฐานข้อมูล 20GB + MySQL เป็น SQLite มันไม่ใช่เรื่องง่ายเลยและฉันก็เขียนแพ็คเกจ Pythonที่ใช้งานได้
ข้อดีของมันที่เขียนด้วย Python คือมันข้ามแพลตฟอร์ม (ไม่เหมือนเชลล์ / สคริปต์ทุบตี) และทั้งหมดนี้สามารถติดตั้งได้อย่างง่ายดายโดยใช้pip install
(แม้ใน Windows) ใช้เครื่องกำเนิดไฟฟ้าและการแบ่งส่วนข้อมูลที่กำลังประมวลผลดังนั้นหน่วยความจำจึงมีประสิทธิภาพมาก
ฉันยังใส่ในความพยายามที่จะถูกต้องแปลมากที่สุดของประเภทข้อมูลจาก MySQL เพื่อ SQLite
เครื่องมือนี้ยังมีการทดสอบอย่างละเอียดและทำงานบนPython 2.7 และ 3.5 ขึ้นไป
สามารถเรียกใช้ได้ผ่านทางบรรทัดคำสั่ง แต่ยังสามารถใช้เป็นคลาส Python มาตรฐานซึ่งคุณสามารถรวมไว้ในการจัดระเบียบ Python ที่ใหญ่กว่าได้
นี่คือวิธีที่คุณใช้:
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
ไฟล์ดัมพ์หรือต้องเชื่อมต่อกับฐานข้อมูล MySQL ที่ติดตั้งไว้
Sqlite มีรายการเครื่องมือแปลงอย่างเป็นทางการ
วิธีที่ง่ายที่สุดในการแปลง MySql DB เป็น Sqlite:
1) สร้างไฟล์ดัมพ์ sql สำหรับฐานข้อมูล MySql ของคุณ
2) อัปโหลดไฟล์ไปยังตัวแปลง RebaseData ออนไลน์ที่นี่
3) ปุ่มดาวน์โหลดจะปรากฏบนหน้าเพื่อดาวน์โหลดฐานข้อมูลในรูปแบบ Sqlite
ขั้นแรกคุณต้องมีสคริปต์นี้ (ใส่ไว้ในไฟล์ชื่อ '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
จากนั้นถ่ายโอนสำเนาฐานข้อมูลของคุณ:
you@prompt:~$ mysqldump -u root -p --compatible=ansi --skip-opt generator > dumpfile
ตอนนี้เรียกใช้การแปลง:
you@prompt:~$ mysql-to-sqlite.sh dumpfile
และถ้าทุกอย่างเป็นไปด้วยดีตอนนี้คุณควรมี dumpfile.db ซึ่งสามารถใช้ผ่าน 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
มีหลายวิธีในการทำเช่นนี้ ฉันมีปัญหานี้เช่นกันและฉันค้นหามากจากนั้นฉันก็มีวิธีง่ายๆในการแปลง MySQL เป็น SQLite
ทำตามขั้นตอนเหล่านี้:
ก่อนอื่นคุณต้องติดตั้งเบราว์เซอร์ SQLite DB (เล็กมากและรวดเร็วในการดูตารางและข้อมูล)
เปิดไฟล์ MySQL ใน Notepad หรือจะเป็นการดีถ้าคุณเปิดใน Notepad ++
ลบบรรทัดแรกที่เพิ่มขึ้นประกอบด้วยข้อมูลหรือแบบสอบถามและบันทึกไว้
เปิด SQLite DB Browser สร้างฐานข้อมูลแล้วตารางและประเภทเดียวกับที่อยู่ในฐานข้อมูล MySQL
ในแถบเมนูของ SQLite DB Browser เลือกไฟล์ -> จากนั้นนำเข้าข้อมูลไฟล์ MySQL ที่คุณบันทึกไว้
มันจะแปลงเป็น SQLite After Warning Dialog ได้อย่างง่ายดาย
หากมีข้อผิดพลาดให้ลบบรรทัดพิเศษเพิ่มเติมหากไฟล์ MySQL ของคุณมีไฟล์.
นอกจากนี้คุณยังสามารถติดตั้ง MySQL เป็นซอฟต์แวร์ SQLite Converter บนพื้นฐานการทดลองใช้งานได้ แต่ข้อมูลที่ฉันให้สำหรับการแปลงคือเวลาชีวิต
วิธีแก้ปัญหาของฉันสำหรับปัญหานี้ในการใช้งานMacคือการ
ติดตั้งภาคต่อ
$ gem install sequel
หากยังจำเป็น
% gem install mysql sqlite3
จากนั้นใช้สิ่งต่อไปนี้ตามลำดับ doc bin_sequel.rdoc (ดูที่ Copy Database)
sequel -C mysql://myUserName:myPassword@host/databaseName sqlite://myConvertedDatabaseName.sqlite
หน้าต่างผู้ใช้สามารถติดตั้งทับทิมและผลสืบเนื่องสำหรับการแก้ปัญหาหน้าต่าง
ฉันลองใช้หลายวิธีในชุดข้อความนี้ แต่ไม่มีอะไรได้ผลสำหรับฉัน นี่คือวิธีแก้ปัญหาใหม่ซึ่งฉันพบว่าง่ายมาก:
sqlite
แบบสอบถามทั้งหมดที่จำเป็นในการสร้างฐานข้อมูลนี้เท่านี้คุณก็มีฐานข้อมูล SQLite แล้ว
หากคุณมีประสบการณ์ในการเขียนสคริปต์ง่ายๆโดย Perl \ Python \ etc และแปลง MySQL เป็น SQLite อ่านข้อมูลจาก Mysql และเขียนบน SQLite
ฉันชอบ SQLite2009 Pro Enterprise Manager ที่ Jfly แนะนำ อย่างไรก็ตาม:
INT ประเภทข้อมูล MySQL จะไม่ถูกแปลงเป็น SQlite datatype INTEGER (ทำงานร่วมกับ DBeaver)
ไม่นำเข้าข้อ จำกัด คีย์ต่างประเทศจาก MySQL (ฉันไม่พบเครื่องมือใด ๆ ที่รองรับการถ่ายโอนข้อ จำกัด ของคีย์ต่างประเทศจาก MySQL ไปยัง SQlite)
จากรายชื่อของเครื่องมือแปลงผมพบว่าKexi เป็นเครื่องมือ UI ในการนำเข้าจากเซิร์ฟเวอร์ DB ต่างๆ (รวมถึง MySQL) ไปยัง SQLite เมื่อนำเข้าฐานข้อมูลบางส่วน (พูดจาก MySQL) จะจัดเก็บในรูปแบบ Kexi รูปแบบ Kexi เป็นรูปแบบ SQLite 'ดั้งเดิม' ดังนั้นเพียงแค่คัดลอกไฟล์ kexi และมีข้อมูลของคุณในรูปแบบ sqlite
หากคุณได้รับไฟล์ฐานข้อมูลและยังไม่ได้ติดตั้งเซิร์ฟเวอร์ที่ถูกต้อง (ไม่ว่าจะเป็น SQLite หรือ MySQL) ให้ลองใช้เครื่องมือนี้: https://dbconvert.com/sqlite/mysql/เวอร์ชันทดลองใช้สามารถแปลงระเบียน 50 รายการแรกของแต่ละตารางได้ ข้อมูลที่เหลือจะถูกใส่ลายน้ำ นี่คือโปรแกรม Windows และสามารถถ่ายโอนข้อมูลลงในเซิร์ฟเวอร์ฐานข้อมูลที่กำลังรันอยู่หรือสามารถถ่ายโอนข้อมูลเอาต์พุตไปยังไฟล์. sql