将MySQL数据库导出到SQLite数据库

时间:2011-03-02 06:10:20

标签: mysql database sqlite

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

7 个答案:

答案 0 :(得分:63)

有一个fantastic Linux shell script on Github将Mysql转换为Sqlite3文件。您需要在服务器上安装mysqldump和sqlite3。效果很好。

答案 1 :(得分:4)

由@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

找到详细评论的要点

答案 2 :(得分:2)

顶部帖子中提到的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中,这个表达式匹配它们,$ \ n)

然后您需要将所有\'更改为''

然后你可以进行导入:

sqlite3 local.sqlite3 < localdb.txt.1

就是这样。我还没找到一个适合我的程序。我希望这有助于某人。

答案 3 :(得分:2)

我manualy在sqlite数据库中创建了表结构。

比我用以下命令上传数据:

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 在两个数据库中修复不同的顶点编码

答案 4 :(得分:0)

有一个非常棒的轻量级工具,称为SQLite数据库浏览器,允许您创建和编辑sqlite数据库。我用它来为Android应用程序创建数据库。您可以对它运行SQL语句来加载数据,因此如果从mySQL数据库导出数据,您只需使用此工具导入它即可。这是一个链接:http://sqlitebrowser.sourceforge.net/

答案 5 :(得分:0)

我个人喜欢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")
    );

对于更复杂的事情,可能最好编写一个包装器,或者然后使用已经提到的fantastic awk Linux shell script on Gist

答案 6 :(得分:-12)

使用

导出数据
  mysqldump database > database.sql

并使用

导入数据
  sqlite3 database < database.sql

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