导出一个MySQL数据库到SQLite数据库

请帮助我将MySQL数据库导出到SQLite数据库。

Github上有一个非常棒的Linux shell脚本,可以将Mysql转换为Sqlite3文件。 你需要在你的服务器上安装mysqldump和sqlite3。 很好用。

由@quassy编辑的@ user2111698的答案按照承诺的方式工作。 由于我经常这样做,所以我把他们的指示放到一个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 

有关详细意见的要点,请访问https://gist.github.com/grfiv/b79ace3656113bcfbd9b7c7da8e9ae8d

在上面提到的mysql2sqlite.sh不能很好地处理PRIMARY KEY行,它不会写尾)来完成CREATE语句。

这就是我所做的。 我运行mysql转储为:

 mysqldump --skip-create-options --compatible=ansi --skip-extended-insert --compact --single-transaction -h<host> -u<user> -p<passwd> <database name> > localdb.txt 

然后我用grep删除PRIMARY KEY和KEY:

 cat localdb.txt | grep -v "PRIMARY KEY' | grep -v KEY > localdb.txt.1 

然后我用一个编辑器来修复这个文件。 当键被删除时,你最终会看到一个CREATE语句:

 CREATE ... ..., ) 

那尾随,必须被去除。 在vi中,这个expression式匹配它们,$ \ n)

那么你需要改变所有的\'''

那么你可以进行导入:

 sqlite3 local.sqlite3 < localdb.txt.1 

就是这样。 我还没有find一个适合我的程序。 我希望这可以帮助别人。

我手动在sqlite数据库中创build表结构。

比我用下面的命令上传了数据:

 mysqldump -u root {database} {table} --no-create-info --skip-extended-insert --complete-insert --skip-add-locks --compatible=ansi | sed "s/\\\'/''/g" |sqlite3 flora.db 

我不得不使用sed来修复两个数据库中不同的顶点编码

就我个人而言,我喜欢mysqldump的简单使用,但是需要进行一些调整(取决于你使用Unix的艺术以及你想要做什么)。

防爆。 只有一个表(prods)与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") ); 

对于更复杂的事情,最好写一个包装器,或者使用Gist上已经提到的awk Linux shell脚本 。

有一个梦幻般的,轻量级的SQLite数据库浏览器工具,允许您创build和编辑sqlite数据库。 我用它来craete Android应用程序的数据库。 你可以运行SQL语句来加载数据,所以如果你从一个MySQL数据库导出数据,你可以使用这个工具导入它。 这里有一个链接: http : //sqlitebrowser.sourceforge.net/

导出数据

  mysqldump database > database.sql 

并用导入数据

  sqlite3 database < database.sql 

您可能需要-u(用户)和-p(密码)选项