将 MySQL 转换为 SQlite

有可能从 MySQL 转换到 SQLite 与一个免费的工具上的窗口?

232550 次浏览

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

如果您有使用 PerlPython 等编写简单脚本的经验,可以将 MySQL 转换为 SQLite。 从 Mysql 读取数据并将其写入 SQLite。

这里 转换器清单(今日档案馆快照)


一种即使在 Windows 上也可以工作,但很少被提及的替代方法是: 使用一个 ORM 类,为您抽象出特定的数据库差异。例如,你可以在 PHP (红豆) ,Python (Django 的 ORM 层,暴风女SqlAlchemy) ,Ruby on Rails (ActiveRecord) ,Cocoa (CoreData)等中得到这些。

也就是说,你可以这样做:

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

GitHub上有一个 mysql2sqlite.sh 脚本

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

./mysql2sqlite.sh myDbase | sqlite3 database.sqlite

选择

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

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

我喜欢 Jfly 推荐的 SQLite2009 Pro Enterprise Manager,但是:

  • MySQL 数据类型 INT 不会转换为 SQlite 数据类型 INTEGER (与 DBeaver 一起使用)

  • 它不从 MySQL 导入外键约束(我找不到任何支持将外键约束从 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

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

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

现在,运行转换:

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

如果一切顺利,现在应该有一个可以通过 sqlite3使用的 Dumpfile.db。

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

对于这个运行 麦克的问题,我的解决方案是

  1. 安装 Ruby 和类似于 Macario 的答案的续集
  2. 安装续集

    $ gem install sequel
    

    如果还需要的话

    % gem install mysql sqlite3
    

    然后使用以下基于 Sequel doc 的 Bin _ Sequel. rdoc(参见复制数据库)

    sequel -C mysql://myUserName:myPassword@host/databaseName sqlite://myConvertedDatabaseName.sqlite
    

A windows user could install Ruby and Sequel for a windows solution.

转炉工具清单我发现 科西。它是一个 UI 工具,可以从各种 DB 服务器(包括 MySQL)导入到 SQLite 中。当导入一些数据库(比如从 MySQL)时,它会以 Kexi 格式存储。Kexi 格式是“本地”SQLite 格式。因此,只需复制 kexi 文件,并将数据设置为 sqlite 格式

Sqlite 已经正式列出了转换工具的列表。

Http://www2.sqlite.org/cvstrac/wiki?p=convertertools

如果你已经得到了一个数据库文件,但是没有安装正确的服务器(SQLite 或 MySQL) ,请尝试这个工具: https://dbconvert.com/sqlite/mysql/试用版允许转换每个表的前50条记录,其余的数据都有水印。这是一个 Windows 程序,可以转储到正在运行的数据库服务器,也可以将输出转储到。Sql 文件

有很多不同的方法。我也有这个问题,我搜索了很多,然后我得到了一个简单的方法来转换 MySQL 到 SQLite。

遵循以下步骤:

  1. 首先,您需要安装 SQLiteDB 浏览器(非常小,可以快速查看表和数据)

  2. 在记事本中打开 MySQL 文件,如果在记事本 + + 中打开就更好了

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

  4. 打开 SQLiteDB 浏览器,创建数据库,然后创建表,以及与 MySQL 数据库中相同的类型。

  5. 在 SQLite DB 浏览器的菜单栏中选择文件-> 然后导入保存的数据 MySQL 文件。

它将很容易转换为 SQLite 后警告对话框。

如果错误,那么删除更多的行,如果您的 MySQL 文件有。

您也可以在试用的基础上安装 MySQL 到 SQLite 转换器软件,但是我提供的转换信息是生命周期。

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

  1. 安装 RazorSQL.Works for Mac,Windows and Linux。
  2. 在 RazorSQL 连接到数据库中,例如在 localhost 上。
  3. 右键单击数据库-> 数据库转换-> 选择 SQLite。 这将保存一个 txt 文件,其中包含创建此数据库所需的所有 sqlite查询。
  4. 安装一个 SQLite 数据库管理器,如 SQLite 数据库浏览器
  5. 创建一个空数据库,转到 ExecuteSQL 选项卡并粘贴步骤3中的内容。

就是这样,现在您有了 SQLite 数据库。

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

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

2)上载文件到 RebaseData 在线转换器 给你

3)下载按钮将出现在页面上下载数据库的 Sqlite 格式

大约两天前,我遇到了同样的问题,当时我不得不将一个20GB + MySQL 数据库转换为 SQLite。这绝不是一项容易的任务,我最终写了 这个巨蟒软件包来完成这项工作。

使用 Python 编写它的好处是它是跨平台的(不像 shell/bash 脚本) ,并且都可以使用 pip install轻松安装(甚至在 Windows 上)。它使用生成器和正在处理的数据块,因此非常节省内存。

我也对 正确地将大多数数据类型从 MySQL 转换为 SQLite做了一些努力。

该工具也是 彻底测试和工程的 Python 2.7和3.5 +

它可以通过命令行调用,但也可以用作标准的 Python 类,您可以将其包含在一些更大的 Python 编排中。

以下是使用方法:

Usage: mysql2sqlite [OPTIONS]


Options:
-f, --sqlite-file PATH     SQLite3 database file  [required]
-d, --mysql-database TEXT  MySQL database name  [required]
-u, --mysql-user TEXT      MySQL user  [required]
-p, --mysql-password TEXT  MySQL password
-h, --mysql-host TEXT      MySQL host. Defaults to localhost.
-P, --mysql-port INTEGER   MySQL port. Defaults to 3306.
-c, --chunk INTEGER        Chunk reading/writing SQL records
-l, --log-file PATH        Log file
-V, --vacuum               Use the VACUUM command to rebuild the SQLite
database file, repacking it into a minimal amount
of disk space
--use-buffered-cursors     Use MySQLCursorBuffered for reading the MySQL
database. This can be useful in situations where
multiple queries, with small result sets, need to
be combined or computed with each other.
--help                     Show this message and exit.