Dav*_*uer 71
GitHub上有一个mysql2sqlite.sh脚本
如标题中所述,脚本可以像这样使用:
./mysql2sqlite.sh myDbase | sqlite3 database.sqlite
Run Code Online (Sandbox Code Playgroud)
备择方案
Dav*_*tas 52
以下是转换器列表:
链接现在似乎没有了,因此它只能通过archive.org上的快照获得,最近更新时间为2011年.
另一种方法甚至可以在Windows上工作,但很少提及:使用ORM类来为您提取特定的数据库差异.例如,你在PHP(RedBean),Python(Django的ORM层,Storm,SqlAlchemy),Ruby on Rails(ActiveRecord),Cocoa(CoreData)等中获得这些.
即你可以这样做:
Mac*_*rio 42
Sequel(Ruby ORM)有一个用于处理数据库的命令行工具,你必须安装ruby,然后:
$ gem install sequel mysql2 sqlite3
$ sequel mysql2://user:password@host/database -C sqlite://db.sqlite
Run Code Online (Sandbox Code Playgroud)
Ass*_*vie 17
并非每个数据库架构都可以转换.MySQL比SQLite更复杂,功能更丰富.但是,如果您的架构足够简单,您可以将其转储到SQL文件中并尝试将其导入/加载到SQLite DB中.
Jfl*_*fly 12
从这个网页:http://osenxpsuite.net
下载SQLite2009 Pro企业管理器
这是免费的.它可以从Mysql数据库导入数据.我刚刚转换了一个17M的数据库.这十分完美.
我找到了完美的解决方案!看看:http://www.jbip.net/content/how-convert-mysql-sqlite
首先,您需要此脚本(将其放入名为'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
Run Code Online (Sandbox Code Playgroud)
然后,转储数据库的副本:
you@prompt:~$ mysqldump -u root -p --compatible=ansi --skip-opt generator > dumpfile
Run Code Online (Sandbox Code Playgroud)
现在,运行转换:
you@prompt:~$ mysql-to-sqlite.sh dumpfile
Run Code Online (Sandbox Code Playgroud)
如果一切顺利,你现在应该有一个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
Run Code Online (Sandbox Code Playgroud)
小智 6
有不同的方法可以做到这一点。我也遇到了这个问题,我进行了很多搜索,然后我得到了一个将MySQL转换为SQLite的简单方法。
按着这些次序:
首先您需要安装 SQLite DB 浏览器(非常小且快速查看表和数据)
在记事本中打开 MySQL 文件,或者如果在 Notepad++ 中打开,那就太好了
删除包含信息或查询的第一行额外行并保存。
打开 SQLite DB 浏览器,创建数据库,然后创建表,然后选择与 MySQL 数据库中相同的类型。
在 SQLite DB 浏览器的菜单栏中选择文件 -> 然后导入您保存的数据 MySQL 文件。
警告对话框后它会很容易地转换为 SQLite。
如果出现错误,则删除更多额外的行(如果您的 MySQL 文件有)。
您还可以试用安装 MySQL 到 SQLite 转换器软件,但我提供的转换信息是终生的。
大约两天前,当我不得不将一个20GB +的MySQL数据库转换为SQLite时,我遇到了同样的问题。这绝非易事,我最终编写了完成此任务的Python脚本。
用Python编写的好处在于,它是跨平台的(与shell / bash脚本不同),并且只有很少的依赖项(可以使用轻松安装pip install
)。它使用生成器和正在处理的数据的分块,因此具有很高的内存效率。
我还付出了一些努力来将大多数数据类型从MySQL正确转换为SQLite。
该脚本可通过命令行调用,但也可以用作标准Python类,您可以将其包含在更大的Python编排中。
使用方法如下:
usage: mysql2sqlite.py [-h] [-f SQLITE_FILE] [-u MYSQL_USER]
[-p MYSQL_PASSWORD] [-d MYSQL_DATABASE]
[--mysql-host MYSQL_HOST] [-c CHUNK] [-l LOG_FILE]
optional arguments:
-h, --help show this help message and exit
-f SQLITE_FILE, --sqlite-file SQLITE_FILE
SQLite3 db file
-u MYSQL_USER, --mysql-user MYSQL_USER
MySQL user
-p MYSQL_PASSWORD, --mysql-password MYSQL_PASSWORD
MySQL password
-d MYSQL_DATABASE, --mysql-database MYSQL_DATABASE
MySQL host
--mysql-host MYSQL_HOST
MySQL host
-c CHUNK, --chunk CHUNK
Chunk reading/writing SQL records
-l LOG_FILE, --log-file LOG_FILE
Log file
Run Code Online (Sandbox Code Playgroud)