请帮助我将MySQL数据库导出到SQLite数据库。
Answers:
Github上有一个很棒的Linux Shell脚本,可以将Mysql转换为Sqlite3文件。您需要在服务器上同时安装mysqldump和sqlite3。效果很好。
2016-05-11 17:32 GMT+2 @esperlu declared MIT as a fitting license (also retrospectively) and the original gist as deprecated.
由@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 dump转储为:
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
就是这样。我没有找到适合我的单个程序。我希望这可以帮助别人。
就我个人而言,我喜欢mysqldump的简单用法,但仍需要进行一些调整(取决于您使用Unix的技术以及您想做什么)。
例如 只需一张带有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数据库浏览器,可用于创建和编辑sqlite数据库。我用它来创建Android应用程序的数据库。您可以对其执行SQL语句以加载数据,因此,如果从mySQL数据库中导出数据,则可以使用此工具将其导入。这是链接:http : //sqlitebrowser.sourceforge.net/
用导出数据
mysqldump database > database.sql
并使用导入数据
sqlite3 database < database.sql
您可能需要-u(用户)和-p(密码)选项