แปลง MySQL เป็น SQlite [ปิด]


120

เป็นไปได้ไหมที่จะแปลงจาก MySQL เป็น SQLite ด้วยเครื่องมือฟรีบน windows?


คำตอบ:


78

มีสคริปต์ mysql2sqlite.sh บนGitHub

ตามที่อธิบายไว้ในส่วนหัวสคริปต์สามารถใช้ได้ดังนี้:

./mysql2sqlite.sh myDbase | sqlite3 database.sqlite

ทางเลือก


8
ทำงานได้อย่างมีเสน่ห์! นี่คือเอกสารเล็กน้อย: $ ./mysql2sqlite.sh -h host -u MyUserName -pMySecretPassWord myDbase | sqlite3 database.sqlite gist.github.com/943776
kachar

สคริปต์เพียงแค่ดึงอาร์กิวเมนต์จากบรรทัดคำสั่งและส่งผ่านไปยัง mysqldump ดังนั้นคุณสามารถค้นหาเกี่ยวกับการกำหนดค่าพอร์ตที่กำหนดเอง ฯลฯ ด้วยman mysqlหรือman mysqldump
Devin Howard

2
เป็นที่น่าสังเกตว่าสคริปต์นี้ถูกแทนที่โดยผู้สืบทอดที่ดูแลอยู่ที่นี่: github.com/dumblob/mysql2sqlite
drzax

ดีกว่าที่จะเล่นกับอักขระที่ไม่ใช่ ascii: $. / mysql2sqlite.sh --default-character-set = utf8 -hHost -uUser -pPass db | sqlite3 db.sqlite gist.github.com/esperlu/943776#gistcomment-984448
อาทิตย์ Junwen

52

นี่เป็นรายชื่อของแปลง ( ภาพรวมที่ archive.today )


วิธีอื่นที่ใช้ได้แม้ใน windows แต่ไม่ค่อยมีใครพูดถึงคือ: ใช้คลาส ORM ที่แยกความแตกต่างของฐานข้อมูลที่เฉพาะเจาะจงออกไปให้คุณ เช่นคุณได้รับสิ่งเหล่านี้ใน PHP ( RedBean ), Python (เลเยอร์ ORM ของ Django, Storm , SqlAlchemy ), Ruby on Rails ( ActiveRecord ), Cocoa ( CoreData ) เป็นต้น

กล่าวคือคุณสามารถทำได้:

  1. โหลดข้อมูลจากฐานข้อมูลต้นทางโดยใช้คลาส ORM
  2. จัดเก็บข้อมูลในหน่วยความจำหรือจัดลำดับลงในดิสก์
  3. จัดเก็บข้อมูลลงในฐานข้อมูลปลายทางโดยใช้คลาส ORM

43

Sequel (Ruby ORM) มีเครื่องมือบรรทัดคำสั่งสำหรับจัดการกับฐานข้อมูลคุณต้องติดตั้ง Ruby จากนั้น:

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

1
อย่าลืมgem install mysqlและgem install sqlite3
นิค

1
และgem install pgถ้าคุณต้องการแปลงจากหรือเป็น db postgres ภาคต่อควรมีอะแดปเตอร์สำหรับฐานข้อมูลหลัก
Macario

2
แทนที่mysqlด้วยmysql2ถ้าคุณใช้mysql2
Carlosin

1
หมายเหตุ: คุณจะต้องใช้ruby-devแพ็คเกจเพื่อสร้างแพ็คเกจอัญมณีพื้นเมืองเหล่านี้
Panda

1
ต้องใช้ "gem install sequel mysql2 sqlite3" แล้ว "sequel mysql2: // user: password @ host / database -C sqlite: //db.sqlite" PERFECT
unom

17

ไม่ใช่ทุกสคีมา DB ที่สามารถแปลงได้ MySQL มีความซับซ้อนและมีคุณสมบัติหลากหลายกว่า SQLite อย่างไรก็ตามหากสคีมาของคุณง่ายพอคุณสามารถถ่ายโอนข้อมูลลงในไฟล์ SQL และลองนำเข้า / โหลดลงใน SQLite DB


หลังจากทิ้งฐานข้อมูล MySQL ไปยังไฟล์คุณสามารถใช้สคริปต์นี้เพื่อแปลงเป็น SQLite github.com/dumblob/mysql2sqlite (ตามที่กล่าวไว้ในคำตอบของ @David_LeBauer)
Paul Rougieux

7

ฉันประสบปัญหาเดียวกันเมื่อ 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.

1
เฮ้ @techouse นี้ดูดีมาก! มีวิธีใดบ้างที่สามารถทำงานกับ.sqlไฟล์ดัมพ์หรือต้องเชื่อมต่อกับฐานข้อมูล MySQL ที่ติดตั้งไว้
vortek

เฮ้! อืมไม่ต้องใช้ฐานข้อมูล MySQL ที่ใช้งานได้ หากคุณมีการถ่ายโอนข้อมูลโดยไม่มีเซิร์ฟเวอร์จริงทางออกที่ดีที่สุดคือเปลี่ยนไฟล์ด้วยตนเองหากคุณรู้ว่าคุณกำลังทำอะไรอยู่
Klemen Tušar

@arkadianriver ฉันขอแนะนำให้คุณใช้สภาพแวดล้อมเสมือนจริงกับ Python เสมอ😎
Klemen Tušar


4

วิธีที่ง่ายที่สุดในการแปลง MySql DB เป็น Sqlite:

1) สร้างไฟล์ดัมพ์ sql สำหรับฐานข้อมูล MySql ของคุณ

2) อัปโหลดไฟล์ไปยังตัวแปลง RebaseData ออนไลน์ที่นี่

3) ปุ่มดาวน์โหลดจะปรากฏบนหน้าเพื่อดาวน์โหลดฐานข้อมูลในรูปแบบ Sqlite


4

ฉันพบทางออกที่สมบูรณ์แบบแล้ว

ขั้นแรกคุณต้องมีสคริปต์นี้ (ใส่ไว้ในไฟล์ชื่อ '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

3

มีหลายวิธีในการทำเช่นนี้ ฉันมีปัญหานี้เช่นกันและฉันค้นหามากจากนั้นฉันก็มีวิธีง่ายๆในการแปลง MySQL เป็น SQLite

ทำตามขั้นตอนเหล่านี้:

  1. ก่อนอื่นคุณต้องติดตั้งเบราว์เซอร์ SQLite DB (เล็กมากและรวดเร็วในการดูตารางและข้อมูล)

  2. เปิดไฟล์ MySQL ใน Notepad หรือจะเป็นการดีถ้าคุณเปิดใน Notepad ++

  3. ลบบรรทัดแรกที่เพิ่มขึ้นประกอบด้วยข้อมูลหรือแบบสอบถามและบันทึกไว้

  4. เปิด SQLite DB Browser สร้างฐานข้อมูลแล้วตารางและประเภทเดียวกับที่อยู่ในฐานข้อมูล MySQL

  5. ในแถบเมนูของ SQLite DB Browser เลือกไฟล์ -> จากนั้นนำเข้าข้อมูลไฟล์ MySQL ที่คุณบันทึกไว้

มันจะแปลงเป็น SQLite After Warning Dialog ได้อย่างง่ายดาย

หากมีข้อผิดพลาดให้ลบบรรทัดพิเศษเพิ่มเติมหากไฟล์ MySQL ของคุณมีไฟล์.

นอกจากนี้คุณยังสามารถติดตั้ง MySQL เป็นซอฟต์แวร์ SQLite Converter บนพื้นฐานการทดลองใช้งานได้ แต่ข้อมูลที่ฉันให้สำหรับการแปลงคือเวลาชีวิต


วิธีนี้ใช้ได้ดีหากข้อมูลของคุณไม่มีอักขระเช่นเครื่องหมายอะพอสทรอฟี ตัวอย่างเช่น "This is Peter's book" ใน sql dumb จะเป็น "This is Peter \ 's book" ซึ่งจะทำให้ DB Browser เกิดข้อผิดพลาดเนื่องจากข้อมูลขนาดใหญ่ยากที่จะลบออก แต่ถ้าคุณนำเข้าข้อมูลจาก phpAdmin เป็น CSV ไปยัง DB Browser การนำเข้านั้นจะสำเร็จ ฉันหวังว่านี่จะช่วยได้
Seunope

1

วิธีแก้ปัญหาของฉันสำหรับปัญหานี้ในการใช้งานMacคือการ

  1. ติดตั้ง Ruby และภาคต่อที่คล้ายกับคำตอบของ Macario ฉันไปที่ลิงค์นี้เพื่อช่วยตั้งค่า Ruby, mysql และ sqlite3 Ruby on Rails development setup สำหรับ Mac OSX
  2. ติดตั้งภาคต่อ

    $ gem install sequel

    หากยังจำเป็น

    % gem install mysql sqlite3

    จากนั้นใช้สิ่งต่อไปนี้ตามลำดับ doc bin_sequel.rdoc (ดูที่ Copy Database)

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

หน้าต่างผู้ใช้สามารถติดตั้งทับทิมและผลสืบเนื่องสำหรับการแก้ปัญหาหน้าต่าง


ฉันจะคัดลอกเพียงตารางเดียวจากฐานข้อมูลไม่ใช่ฐานข้อมูล mysql ทั้งหมดได้อย่างไร
Atul Vaibhav

สำหรับตารางเดียวในอดีตฉันเคยทำสิ่งนี้มาแล้ว แต่อาจมีวิธีที่ดีกว่านี้ ส่งออกตารางเป็น csv พร้อมกับชื่อคอลัมน์ในตัวเลือกแถวแรกที่ติ๊กไว้ จากนั้นใช้ DB Browser สำหรับ SQLite นำเข้าตารางไปยังฐานข้อมูล sqlite ที่มีอยู่ของฉันโดยใช้ตารางนำเข้าจากตัวเลือก csv จากนั้นคุณจะต้องเข้าไปและเปลี่ยนฟิลด์เป็นประเภทที่คุณต้องการเนื่องจากฉันเชื่อว่าฟิลด์ทั้งหมดจะถูกตั้งค่าเป็น TEXT ในโครงการที่ฉันกำลังดำเนินการแม้ว่าเราจะพัฒนากระบวนการ แต่เราได้ทำการเรียก API เพื่อส่งคืนข้อมูลทั้งหมดในตารางจากนั้นแทรก / แทนที่ข้อมูลในฐานข้อมูลแอป
โชค

ดูเหมือนว่าจะใช้งานได้ อย่างไรก็ตามฉันไม่พบว่าไฟล์เอาต์พุตอยู่ที่ไหน คุณสามารถช่วยฉันได้ไหม?
Pontios

1

ฉันลองใช้หลายวิธีในชุดข้อความนี้ แต่ไม่มีอะไรได้ผลสำหรับฉัน นี่คือวิธีแก้ปัญหาใหม่ซึ่งฉันพบว่าง่ายมาก:

  1. ติดตั้งRazorSQL ใช้งานได้กับ Mac, Windows และ Linux
  2. ใน RazorSQL เชื่อมต่อกับฐานข้อมูลของคุณบน localhost เช่น การแปลงใช้ไม่ได้กับไฟล์การถ่ายโอนข้อมูล sql
  3. คลิกขวาที่ฐานข้อมูลของคุณ -> การแปลงฐานข้อมูล -> เลือก SQLite สิ่งนี้จะบันทึกไฟล์ txt พร้อมกับsqliteแบบสอบถามทั้งหมดที่จำเป็นในการสร้างฐานข้อมูลนี้
  4. ติดตั้งเครื่องมือจัดการฐานข้อมูล SQLite เช่นDB เบราว์เซอร์สำหรับ SQLite ทำงานบน OS ใดก็ได้
  5. สร้างฐานข้อมูลเปล่าไปที่แท็บ Execute SQL และวางเนื้อหาจากขั้นตอนที่ 3

เท่านี้คุณก็มีฐานข้อมูล SQLite แล้ว


ดูเหมือนว่า RazorSQL จะสร้างไฟล์ "common" * .sql ที่มีคำจำกัดความของตารางและการแทรกข้อมูล แต่ไม่มีอะไรที่เฉพาะเจาะจงโดยเฉพาะ SQLite ไม่ได้ส่งออก Views ซึ่งเป็นลบจำนวนมาก ไคลเอนต์ mysqldump ซึ่งมาพร้อมกับมุมมองการส่งออก MySql เช่นกัน แต่ยังสร้างสิ่งที่มีเงื่อนไขมากมาย ฯลฯ สิ่งที่ SQLite จะไม่ย่อย
dalilander

0

หากคุณมีประสบการณ์ในการเขียนสคริปต์ง่ายๆโดย Perl \ Python \ etc และแปลง MySQL เป็น SQLite อ่านข้อมูลจาก Mysql และเขียนบน SQLite


0

ฉันชอบ SQLite2009 Pro Enterprise Manager ที่ Jfly แนะนำ อย่างไรก็ตาม:

  • INT ประเภทข้อมูล MySQL จะไม่ถูกแปลงเป็น SQlite datatype INTEGER (ทำงานร่วมกับ DBeaver)

  • ไม่นำเข้าข้อ จำกัด คีย์ต่างประเทศจาก MySQL (ฉันไม่พบเครื่องมือใด ๆ ที่รองรับการถ่ายโอนข้อ จำกัด ของคีย์ต่างประเทศจาก MySQL ไปยัง SQlite)


0

จากรายชื่อของเครื่องมือแปลงผมพบว่าKexi เป็นเครื่องมือ UI ในการนำเข้าจากเซิร์ฟเวอร์ DB ต่างๆ (รวมถึง MySQL) ไปยัง SQLite เมื่อนำเข้าฐานข้อมูลบางส่วน (พูดจาก MySQL) จะจัดเก็บในรูปแบบ Kexi รูปแบบ Kexi เป็นรูปแบบ SQLite 'ดั้งเดิม' ดังนั้นเพียงแค่คัดลอกไฟล์ kexi และมีข้อมูลของคุณในรูปแบบ sqlite


0

หากคุณได้รับไฟล์ฐานข้อมูลและยังไม่ได้ติดตั้งเซิร์ฟเวอร์ที่ถูกต้อง (ไม่ว่าจะเป็น SQLite หรือ MySQL) ให้ลองใช้เครื่องมือนี้: https://dbconvert.com/sqlite/mysql/เวอร์ชันทดลองใช้สามารถแปลงระเบียน 50 รายการแรกของแต่ละตารางได้ ข้อมูลที่เหลือจะถูกใส่ลายน้ำ นี่คือโปรแกรม Windows และสามารถถ่ายโอนข้อมูลลงในเซิร์ฟเวอร์ฐานข้อมูลที่กำลังรันอยู่หรือสามารถถ่ายโอนข้อมูลเอาต์พุตไปยังไฟล์. sql

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.