The code is from https://github.com/athlite/sqlite3-to-mysql/blob/master/sqlite3-to-mysql and the author should take the whole credit.
#/usr/bin/env shHere are the full process of immigrating SQLite3 to MySQL in Linux (Ubuntu for me).
sed \
-e '/PRAGMA.*;/ d' \
-e '/BEGIN TRANSACTION.*/ d' \
-e '/COMMIT;/ d' \
-e '/.*sqlite_sequence.*;/d' \
-e 's/"/`/g' \
-e 's/CREATE TABLE \(`\w\+`\)/DROP TABLE IF EXISTS \1;\nCREATE TABLE \1/' \
-e 's/\(CREATE TABLE.*\)\(PRIMARY KEY\) \(AUTOINCREMENT\)\(.*\)\();\)/\1AUTO_INCREMENT\4, PRIMARY KEY(id)\5/' \
-e "s/'t'/1/g" \
-e "s/'f'/0/g" \
$1
1) Make sure that you have installed sqlite3 which is a management software for sqlite database. Otherwise,
$ sudo apt-get install sqlite3
2) Save the above code in a file like sqlite32mysql.sh and assign execute privilege.
$ chmod +x sqlite32mysql.sh
3) If you don't have a database, then create one
mysql -u xx -p xx -h 127.0.0.1 "CREATE DATABASE sample IF NOT EXIST"
4) If you'd like only import the data to old tables,
$ sqlite3 your_sqlite3_db.db .dump|grep "^INSERT"| ./sqlite32mysql.sh >dump.sql
Otherwise create new tables,
$ sqlite3 your_sqlite3_db.db .dump| ./sqlite32mysql.sh >dump.sql
5) If there are still some records cannot be imported correctly, do it separately using the following command to grab them out.
$ sed -n "starter_num, end_line_num p" dump.sql > manual.sql
6) Load the dump.sql using mysql.
$ mysql -u xx -p xx -h 127.0.0.1 sample <dump.sql
BINGO!
No comments:
Post a Comment