将MySQL转换为SQlite

时间:2010-10-08 12:38:12

标签: mysql sqlite

是否可以在Windows上使用免费工具从MySQL转换为SQLite?

19 个答案:

答案 0 :(得分:65)

GitHub

上有一个mysql2sqlite.sh脚本

如标题中所述,脚本可以像这样使用:

./mysql2sqlite.sh myDbase | sqlite3 database.sqlite

<强>替代方案

答案 1 :(得分:51)

以下是转换器列表:

现在链接似乎已关闭,因此只能通过snapshot at archive.org提供,最后更新时间为2011年。


即使在Windows上也可以使用的替代方法很少提及:使用ORM类来为您抽象出特定的数据库差异。例如你可以用PHP(RedBean),Python(Django的ORM层,StormSqlAlchemy),Ruby on Rails(ActiveRecord),Cocoa(CoreData )等等。

即。你可以这样做:

  1. 使用ORM类从源数据库加载数据。
  2. 将数据存储在内存中或序列化到磁盘。
  3. 使用ORM类将数据存储到目标数据库中。

答案 2 :(得分:42)

Sequel(Ruby ORM)有一个用于处理数据库的命令行工具,你必须安装ruby,然后:

  $ gem install sequel mysql2 sqlite3 
  $ sequel mysql2://user:password@host/database -C sqlite://db.sqlite

答案 3 :(得分:18)

并非每个数据库架构都可以转换。 MySQL比SQLite更复杂,功能更丰富。但是,如果您的架构足够简单,您可以将其转储到SQL文件中并尝试将其导入/加载到SQLite DB中。

答案 4 :(得分:13)

从此网页:http://osenxpsuite.net

下载 SQLite2009专业版企业管理器

免费。它可以从Mysql数据库导入数据。我刚刚转换了一个17M的数据库。这很完美。

答案 5 :(得分:5)

我找到了完美的解决方案!看看:http://www.jbip.net/content/how-convert-mysql-sqlite

首先,您需要此脚本(将其放入名为&#39; mysql-to-sqlite.sh&#39;的文件中):

#!/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

然后,转储数据库的副本:

you@prompt:~$ mysqldump -u root -p --compatible=ansi --skip-opt generator > dumpfile

现在,运行转换:

you@prompt:~$ mysql-to-sqlite.sh dumpfile

如果一切顺利,你现在应该有一个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

答案 6 :(得分:4)

有不同的方法可以做到这一点。我也有这个问题,我搜索了很多。然后我有一个简单的方法将MySql转换为Sqlite。

请遵循以下说明:

第1步:首先需要安装SqliteDB浏览器(非常小且快速查看表和数据)

第2步:在记事本中打开MySql文件,如果在Notepad ++中打开它会很棒

第3步:删除第一个额外行包含信息或查询并保存。

第4步:在Mysql数据库中打开Sqlite Db Brower,创建数据库,然后是表格和相同类型。

第5步:在Sqlite Db浏览器的菜单栏中选择文件 - &gt;然后导入您保存的数据Mysql文件。

它会轻松转换为Sqlite After Warning对话框。

如果你的Mysql文件有错误,那么删除更多的额外行。

你也可以在试用版基础上安装Mysql到Sqlite转换器软件但我给转换的信息是生命时间。

您还可以查看本教程以获取更多帮助:https://www.youtube.com/watch?v=UcAHsm9iwpw

希望这个帮助。

答案 7 :(得分:3)

Sqlite正式列出了转换工具。

http://www2.sqlite.org/cvstrac/wiki?p=ConverterTools

答案 8 :(得分:2)

大约2天前,当我不得不将20GB以上的MySQL数据库转换为SQLite时,我遇到了同样的问题。这绝非易事,我最终写出this Python script来完成这项工作。

用Python编写的好处是,它是跨平台的(不同于shell / bash脚本),并且具有最小的依赖关系(可以使用pip install轻松安装)。它使用生成器和正在处理的数据的分块,因此具有很高的内存效率。

我也为correctly translate most of the datatypes from MySQL to 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

答案 9 :(得分:2)

将MySql DB转换为Sqlite的最简单方法:

1)为您的MySql数据库生成sql转储文件。

2)将文件上传到RebaseData在线转换器here

3)页面上将出现一个下载按钮,以Sqlite格式下载数据库

答案 10 :(得分:1)

答案 11 :(得分:1)

运行 Mac 的此问题的解决方案是

  1. 安装Ruby和续集类似于Macario的答案。我按照这个链接来帮助设置Ruby,mysql和sqlite3 Ruby on Rails development setup for Mac OSX
  2. 安装续集

    $ gem install sequel
    

    如果仍然需要

    % gem install mysql sqlite3
    

    然后使用以下基于续集文档bin_sequel.rdoc(参见复制数据库)

    sequel -C mysql://myUserName:myPassword@host/databaseName sqlite://myConvertedDatabaseName.sqlite
    
  3. windows 用户可以为Windows解决方案安装Ruby和Sequel。

答案 12 :(得分:1)

我在这个帖子上尝试了很多方法,但没有什么对我有用。所以这是一个新的解决方案,我也发现它非常简单:

  1. 安装RazorSQL。适用于Mac,Windows和Linux。
  2. 在RazorSQL中连接到您的数据库,例如在localhost上。转换不适用于sql转储文件。
  3. 右键点击您的数据库 - &gt;数据库转换 - &gt;选择SQLite。 这将保存包含创建此数据库所需的所有sqlite查询的txt文件。
  4. 安装SQLite数据库管理器,例如DB Browser for SQLite。它适用于任何操作系统。
  5. 创建一个空数据库,转到执行SQL选项卡并粘贴步骤3中的内容。
  6. 就是这样,现在你有了SQLite数据库。

答案 13 :(得分:0)

非程序性答案,但为我节省了很多时间。 SQL to SQLite converter

在这里,我能够转换一个包含33个表的数据库。花了大约一分钟。

  • 我的过程是转储(导出)我的MySQL数据库。
  • 然后使用上述网站将其导入。
  • 它为我准备了一个sqlite db data.sqlite,然后我刚刚打开它 在SQLite浏览器中。

答案 14 :(得分:0)

如果您已获得数据库文件并且尚未安装正确的服务器(SQLite或MySQL),请尝试使用此工具:https://dbconvert.com/sqlite/mysql/试用版允许转换每个表的前50条记录,其余部分数据加水印。这是一个Windows程序,可以转储到正在运行的数据库服务器,也可以将输出转储到.sql文件

答案 15 :(得分:0)

list of converter tools我找到Kexi。它是一个UI工具,可以从各种数据库服务器(包括MySQL)导入到SQLite中。当导入一些数据库(比如MySQL)时,它以Kexi格式存储它。 Kexi格式是“本机”SQLite格式。因此,只需复制kexi文件并以sqlite格式保存数据

答案 16 :(得分:0)

我喜欢Jfly建议的SQLite2009 Pro企业管理器。但是:

  • MySQL数据类型INT未转换为SQlite数据类型INTEGER(适用于DBeaver)

  • 它不会从MySQL导入外键重构(我找不到任何支持从MySQL到SQlite的外键约束传输的工具。)

答案 17 :(得分:0)

如果您有经验,可以通过Perl \ Python \ etc编写简单的脚本,并将MySQL转换为SQLite。 从Mysql读取数据并将其写在SQLite上。

答案 18 :(得分:-3)

这是一个简单的转换器:http://mysql2sqlite.felipemarques.com.br/(该网站是巴西葡萄牙语)