回答:
GitHubに mysql2sqlite.shスクリプトがあります
ヘッダーで説明したように、スクリプトは次のように使用できます。
./mysql2sqlite.sh myDbase | sqlite3 database.sqlite
代替案
man mysql
またはでカスタムポートなどの設定について調べることができますman mysqldump
こちらがコンバーターのリストです。(archive.todayのスナップショット)
Windowsでも機能するがめったに言及されない代替方法は、特定のデータベースの違いを抽象化するORMクラスを使用することです。たとえば、PHP(RedBean)、Python(DjangoのORMレイヤー、Storm、SqlAlchemy)、Ruby on Rails(ActiveRecord)、Cocoa(CoreData)などでこれらを取得します。
つまり、これを行うことができます:
Sequel(Ruby ORM)には、データベースを処理するためのコマンドラインツールがあり、rubyをインストールしておく必要があります。
$ gem install sequel mysql2 sqlite3
$ sequel mysql2://user:password@host/database -C sqlite://db.sqlite
gem install mysql
にgem install sqlite3
gem install pg
、postgres dbとの間で変換を行う場合は、sequelに主要なdb用のアダプタが必要です
mysql
してmysql2
いる場合は置き換えてくださいmysql2
ruby-dev
これらのネイティブgemパッケージをビルドするには、パッケージが必要です。
すべてのDBスキーマを変換できるわけではありません。MySQLはSQLiteよりも複雑で機能が豊富です。ただし、スキーマが十分に単純な場合は、スキーマをSQLファイルにダンプして、それをSQLite DBにインポート/ロードすることができます。
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.
.sql
ダンプファイルを操作する方法はありますか、またはインストールされている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
これにはさまざまな方法があります。私にもこの問題があり、何度も検索したところ、MySQLをSQLiteに変換する簡単な方法が見つかりました。
次の手順を実行します:
最初にSQLite DBブラウザをインストールする必要があります(テーブルとデータを表示するには非常に小さくて高速)
MySQLファイルをメモ帳で開くか、メモ帳++で開くと便利です
情報またはクエリを含む最初の余分な行を削除して保存します。
SQLite DBブラウザーを開き、データベースを作成してから、テーブル、そしてMySQLデータベースの場合と同じタイプを開きます。
SQLite DBブラウザのメニューバーで、[ファイル]-> [保存したデータMySQLファイルのインポート]を選択します。
警告ダイアログの後、SQLiteに簡単に変換されます。
エラーが発生した場合、MySQLファイルに余分な行があれば削除します。
MySQL to SQLite Converterソフトウェアを試用版ベースでインストールすることもできますが、変換のために提供している情報は寿命です。
Macを実行しているこの問題に対する私の解決策は、
続編をインストール
$ 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と続編をインストールすることができます。
このスレッドでいくつかのメソッドを試しましたが、何もうまくいきませんでした。だからここに私も非常に簡単であることがわかった新しい解決策があります:
sqlite
により、このデータベースの作成に必要なすべてのクエリを含むtxtファイルが保存されます。これで、SQLiteデータベースが完成しました。
コンバータツールのリストから、Kexiを見つけました。さまざまなDBサーバー(MySQLを含む)からSQLiteにインポートするUIツールです。一部のデータベース(MySQLなど)をインポートすると、それはKexi形式で保存されます。Kexiフォーマットは「ネイティブ」のSQLiteフォーマットです。したがって、単にkexiファイルをコピーし、データをsqlite形式で保持します
データベースファイルが提供されていて、正しいサーバー(SQLiteまたはMySQL)がインストールされていない場合は、次のツールを試してください。https://dbconvert.com/sqlite/mysql/試用版では、各テーブルの最初の50レコードを変換できます、残りのデータには透かしが入ります。これはWindowsプログラムであり、実行中のデータベースサーバーにダンプするか、出力を.sqlファイルにダンプできます。