MySQLをSQliteに変換する[終了]


120

Windowsの無料ツールでMySQLからSQLiteに変換することは可能ですか?


回答:


78

GitHubに mysql2sqlite.shスクリプトがあります

ヘッダーで説明したように、スクリプトは次のように使用できます。

./mysql2sqlite.sh myDbase | sqlite3 database.sqlite

代替案


8
チャームとして活躍!ドキュメントの$ ./mysql2sqlite.sh -h host -u MyUserName -pMySecretPassWord myDbase | sqlite3 database.sqlite 一部を次に示し
kachar

スクリプトはコマンドラインから引数をプルしてmysqldumpに渡すだけなので、man mysqlまたはでカスタムポートなどの設定について調べることができますman mysqldump
デヴィンハワード

2
このスクリプトは、github.com
dumblob

非ASCII文字で遊ぶのがさらに良い:$。/ mysql2sqlite.sh --default-character-set = utf8 -hHost -uUser -pPass db | sqlite3 db.sqlite gist.github.com/esperlu/943776#gistcomment-984448
Sun

52

こちらコンバーターのリストです。(archive.todayのスナップショット


Windowsでも機能するがめったに言及されない代替方法は、特定のデータベースの違いを抽象化するORMクラスを使用することです。たとえば、PHP(RedBean)、Python(DjangoのORMレイヤー、StormSqlAlchemy)、Ruby on Rails(ActiveRecord)、Cocoa(CoreData)などでこれらを取得します。

つまり、これを行うことができます:

  1. ORMクラスを使用してソースデータベースからデータをロードします。
  2. データをメモリに保存するか、ディスクにシリアル化します。
  3. ORMクラスを使用してデータを宛先データベースに格納します。

43

Sequel(Ruby ORM)には、データベースを処理するためのコマンドラインツールがあり、rubyをインストールしておく必要があります。

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

1
忘れずgem install mysqlgem install sqlite3
Nick

1
またgem install pg、postgres dbとの間で変換を行う場合は、sequelに主要なdb用のアダプタが必要です
Macario

2
使用mysqlしてmysql2いる場合は置き換えてくださいmysql2
カルロシン

1
注:ruby-devこれらのネイティブgemパッケージをビルドするには、パッケージが必要です。
パンダ14

1
「gem install sequel mysql2 sqlite3」を使用してから、「sequel mysql2:// user:password @ host / database -C sqlite://db.sqlite」を使用する必要があったPERFECT
unom

17

すべてのDBスキーマを変換できるわけではありません。MySQLはSQLiteよりも複雑で機能が豊富です。ただし、スキーマが十分に単純な場合は、スキーマをSQLファイルにダンプして、それをSQLite DBにインポート/ロードすることができます。


MySQLデータベースをファイルにダンプした後、このスクリプトを使用してそれをSQLite github.com/dumblob/mysql2sqliteに変換できます(@David_LeBauerの回答に記載されています)。
Paul Rougieux、

7

20GB以上のMySQLデータベースをSQLiteに変換しなければならなかった約2日前に、同じ問題に直面しました。決して簡単な作業ではなかったので、このPythonパッケージを作成しましたを作成して仕事をしました。

Pythonで書かれていることの利点は、それが(シェル/ 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.

1
@techouseさん、こんにちは!.sqlダンプファイルを操作する方法はありますか、またはインストールされているMySQLデータベースへの接続が必要ですか?
vortek

おい!うーん、これ動作しているMySQLデータベースを必要としません。実際のサーバーがないダンプがある場合、最善の策は実行していることがわかっている場合は手動でファイルを変更することです。
KlemenTušar19年

私はあなたがいつものPython😎と仮想環境の使用をお勧め@arkadianriver
KlemenTušar


4

MySql DBをSqliteに変換する最も簡単な方法:

1)MySqlデータベースのSQLダンプファイルを生成します。

2)コンバータオンラインRebaseDataにファイルをアップロードし、ここで

3)ページにダウンロードボタンが表示され、データベースをSqlite形式でダウンロードします


4

完璧な解決策を見つけた

まず、次のスクリプトが必要です( '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

3

これにはさまざまな方法があります。私にもこの問題があり、何度も検索したところ、MySQLをSQLiteに変換する簡単な方法が見つかりました。

次の手順を実行します:

  1. 最初にSQLite DBブラウザをインストールする必要があります(テーブルとデータを表示するには非常に小さくて高速)

  2. MySQLファイルをメモ帳で開くか、メモ帳++で開くと便利です

  3. 情報またはクエリを含む最初の余分な行を削除して保存します。

  4. SQLite DBブラウザーを開き、データベースを作成してから、テーブル、そしてMySQLデータベースの場合と同じタイプを開きます。

  5. SQLite DBブラウザのメニューバーで、[ファイル]-> [保存したデータMySQLファイルのインポート]を選択します。

警告ダイアログの後、SQLiteに簡単に変換されます。

エラーが発生した場合、MySQLファイルに余分な行があれば削除します。

MySQL to SQLite Converterソフトウェアを試用版ベースでインストールすることもできますが、変換のために提供している情報は寿命です。


データにアポストロフィのような文字がない場合、これは正常に機能しました。たとえば、sql dumbの「This is Peter's book」は「This is Peter \ 's book」になります。これにより、DBブラウザーはエラーをスローします。大きなデータの場合、削除するのは困難です。しかし、phpAdminからCSVとしてデータをDBブラウザーにインポートすると、そのインポートは成功します。私はこの助けを願っています
Seunope '19

1

Macを実行しているこの問題に対する私の解決策は、

  1. Macarioの答えに似たRubyと続編をインストールします。Mac OSX用の Ruby、mysql、およびsqlite3 Ruby on Rails開発セットアップのセットアップを支援するために、このリンクをたどりました
  2. 続編をインストール

    $ gem install sequel

    それでも必要な場合

    % gem install mysql sqlite3

    次に、Sequel doc bin_sequel.rdocに基づいて以下を使用しました(データベースのコピーを参照)

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

Windowsのユーザーは、WindowsソリューションのためのRubyと続編をインストールすることができます。


mysqlデータベース全体ではなく、DBから1つのテーブルのみをコピーするにはどうすればよいですか?
Atul Vaibhav

以前は1つのテーブルでこれを実行しましたが、もっと良い方法があるかもしれません。最初の行オプションの列名がチェックされたcsvとしてテーブルをエクスポートします。次に、SQLブラウザー用のDBブラウザーを使用して、csvオプションからのインポートテーブルを使用して、既存のsqliteデータベースにテーブルをインポートします。次に、すべてのフィールドがTEXTに設定されると思うので、フィールドに移動して、必要なタイプにフィールドを変更する必要があります。私が取り組んでいたプロジェクトでは、テーブルのすべてのデータを返すAPI呼び出しを行ってから、アプリデータベースにデータを挿入/置換するプロセスを開発しました。
Grant Luck、

動作しているようです。それにもかかわらず、出力ファイルがどこにあるのかわかりません。手伝って頂けますか?
ポンティオス2018年

1

このスレッドでいくつかのメソッドを試しましたが、何もうまくいきませんでした。だからここに私も非常に簡単であることがわかった新しい解決策があります:

  1. RazorSQLをインストールします。Mac、Windows、Linuxで動作します。
  2. RazorSQLで、ローカルホストなどのデータベースに接続します。SQLダンプファイルでは変換は機能しません。
  3. データベースを右クリック->データベース変換-> SQLiteを選択します。これsqliteにより、このデータベースの作成に必要なすべてのクエリを含むtxtファイルが保存されます。
  4. SQLite 用のDBブラウザーなどのSQLiteデータベースマネージャーをインストールします。どのOSでも動作します。
  5. 空のデータベースを作成し、[SQLの実行]タブに移動して、手順3の内容を貼り付けます。

これで、SQLiteデータベースが完成しました。


RazorSQLは、テーブル定義とデータ挿入を含む「共通の」* .sqlファイルを構築するだけのようですが、特にSQLite固有のものはありません。それは大きなマイナスであるビューをエクスポートしませんでした。MySqlに付属のmysqldumpクライアントもビューをエクスポートしますが、SQLiteが消化しない多くの条件付きのものなども生成します。
dalilander 2018

0

経験があれば、Perl \ Python \ etcで簡単なスクリプトを書き、MySQLをSQLiteに変換します。Mysqlからデータを読み取り、SQLiteに書き込みます。


0

Jflyから提案されたSQLite2009 Pro Enterprise Managerが好きです。しかしながら:

  • MySQLデータ型INTはSQliteデータ型INTEGERに変換されません(DBeaverで動作)

  • MySQLから外部キー制約をインポートしません(MySQLからSQliteへの外部キー制約の転送をサポートするツールは見つかりませんでした)。


0

コンバータツールのリストからKexiを見つけました。さまざまなDBサーバー(MySQLを含む)からSQLiteにインポートするUIツールです。一部のデータベース(MySQLなど)をインポートすると、それはKexi形式で保存されます。Kexiフォーマットは「ネイティブ」のSQLiteフォーマットです。したがって、単にkexiファイルをコピーし、データをsqlite形式で保持します


0

データベースファイルが提供されていて、正しいサーバー(SQLiteまたはMySQL)がインストールされていない場合は、次のツールを試してください。https//dbconvert.com/sqlite/mysql/試用版では、各テーブルの最初の50レコードを変換できます、残りのデータには透かしが入ります。これはWindowsプログラムであり、実行中のデータベースサーバーにダンプするか、出力を.sqlファイルにダンプできます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.