将MySQL转换为SQlite

mul*_*lek 110 mysql sqlite

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

Dav*_*uer 71

GitHub上有一个mysql2sqlite.sh脚本

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

./mysql2sqlite.sh myDbase | sqlite3 database.sqlite
Run Code Online (Sandbox Code Playgroud)

备择方案

  • 充当魅力!这里有一些文档:`$ ./mysql2sqlite.sh -h host -u MyUserName -pMySecretPassWord myDbase | sqlite3 database.sqlite`https://gist.github.com/943776 (8认同)
  • 值得注意的是,此脚本已被此处维护的继任者取代:https://github.com/dumblob/mysql2sqlite (2认同)

Dav*_*tas 52

以下是转换器列表:

链接现在似乎没有了,因此它只能通过archive.org上的快照获得,最近更新时间为2011年.


另一种方法甚至可以在Windows上工作,但很少提及:使用ORM类来为您提取特定的数据库差异.例如,你在PHP(RedBean),Python(Django的ORM层,Storm,SqlAlchemy),Ruby on Rails(ActiveRecord),Cocoa(CoreData)等中获得这些.

即你可以这样做:

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


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)

  • 不要忘记 `gem install mysql` 和 `gem install sqlite3` (2认同)
  • 和 `gem install pg` 如果你想从 postgres 数据库转换或转换到 postgres 数据库,续集应该有适用于主要数据库的适配器 (2认同)
  • 如果你使用`mysql2`,用`mysql2`替换`mysql` (2认同)

Ass*_*vie 17

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


Jfl*_*fly 12

从这个网页:http://osenxpsuite.net

下载SQLite2009 Pro企业管理器

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

  • 该链接仅显示在Windows中. (3认同)
  • 您能否提供有关如何进行导入的更多信息?根据该网站,它只从MSAccess和MS-SQL服务器导入数据.@ user407749:这就是原始问题所要求的. (2认同)
  • 这是一个2011年的答案,但它仍然完美无缺.我刚刚将MySQL 5.5基础转换为SQLite3 (2认同)

San*_*ans 8

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

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

2) 在此处上传文件到 RebaseData 在线转换器

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


Pau*_*uan 7

我找到了完美的解决方案!看看: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的简单方法。

按着这些次序:

  1. 首先您需要安装 SQLite DB 浏览器(非常小且快速查看表和数据)

  2. 在记事本中打开 MySQL 文件,或者如果在 Notepad++ 中打开,那就太好了

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

  4. 打开 SQLite DB 浏览器,创建数据库,然后创建表,然后选择与 MySQL 数据库中相同的类型。

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

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

如果出现错误,则删除更多额外的行(如果您的 MySQL 文件有)。

您还可以试用安装 MySQL 到 SQLite 转换器软件,但我提供的转换信息是终生的。

  • 但什么是“额外的线路”呢?文件中可能存在不兼容的数据类型。 (2认同)

may*_*ʎɐɯ 5

Sqlite具有正式的转换工具列表。

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


tec*_*use 5

大约两天前,当我不得不将一个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)

  • 嘿@techouse,这看起来很棒!有什么办法可以使用`.sql`转储文件,还是需要连接到已安装的MySQL数据库? (2认同)