MySQLデータベースをSQLiteデータベースにエクスポートするのを手伝ってください。
MySQLデータベースをSQLiteデータベースにエクスポートするのを手伝ってください。
回答:
MysqlをSqlite3ファイルに変換する素晴らしいLinuxシェルスクリプトがGithubにあります。サーバーにmysqldumpとsqlite3の両方をインストールする必要があります。よく働く。
2016-05-11 17:32 GMT+2 @esperlu declared MIT as a fitting license (also retrospectively) and the original gist as deprecated.
@quassyによって編集された@ user2111698による回答は、約束どおりに機能します。私はこれを頻繁に行うので、彼らの指示をbashスクリプトに入れます。
#!/bin/bash
mysql_host=localhost
mysql_user=george
mysql_dbname=database
sqlite3_dbname=database.sqlite3
# dump the mysql database to a txt file
mysqldump \
--skip-create-options \
--compatible=ansi \
--skip-extended-insert \
--compact \
--single-transaction \
-h$mysql_host \
-u$mysql_user \
-p $mysql_dbname \
> /tmp/localdb.txt
# remove lines mentioning "PRIMARY KEY" or "KEY"
cat /tmp/localdb.txt \
| grep -v "PRIMARY KEY" \
| grep -v KEY \
> /tmp/localdb.txt.1
# mysqldump leaves trailing commas before closing parentheses
perl -0pe 's/,\n\)/\)/g' /tmp/localdb.txt.1 > /tmp/localdb.txt.2
# change all \' to ''
sed -e 's/\\'\''/'\'''\''/g' /tmp/localdb.txt.2 > /tmp/localdb.txt.3
if [ -e $sqlite3_dbname ]; then
mv $sqlite3_dbname $sqlite3_dbname.bak
fi
sqlite3 $sqlite3_dbname < /tmp/localdb.txt.3
詳細なコメントの要点はhttps://gist.github.com/grfiv/b79ace3656113bcfbd9b7c7da8e9ae8dにあります。
一番上の投稿で言及されているmysql2sqlite.shは、PRIMARY KEY行をうまく処理できず)
、CREATEステートメントを完了するための末尾を記述しません。
これが私がしたことです。私はmysqlダンプを次のように実行しました:
mysqldump --skip-create-options --compatible=ansi --skip-extended-insert --compact --single-transaction -h<host> -u<user> -p<passwd> <database name> > localdb.txt
次に、grepを使用してPRIMARYKEYとKEYを削除しました。
cat localdb.txt | grep -v "PRIMARY KEY' | grep -v KEY > localdb.txt.1
次に、エディターを使用してファイルを修正しました。キーを削除すると、次のようなCREATEステートメントが作成されます。
CREATE ...
...,
)
その末尾,
を削除する必要があります。viでは、この式はそれらと一致します、$ \ n)
次に、すべて\'
をに変更する必要があります''
次に、インポートを実行できます。
sqlite3 local.sqlite3 < localdb.txt.1
以上です。自分に合ったプログラムは1つも見つかりませんでした。これが誰かに役立つことを願っています。
sqliteデータベースにテーブル構造を手動で作成しました。
次のコマンドでデータをアップロードしたよりも:
mysqldump -u root {database} {table} --no-create-info --skip-extended-insert --complete-insert --skip-add-locks --compatible=ansi | sed "s/\\\'/''/g" |sqlite3 flora.db
2つのデータベースで異なるapexエンコーディングを修正するためにsedを使用する必要がありました
個人的には、mysqldumpの簡単な使用法が好きですが、いくつかの調整が必要です(Unixでのアートと何をしたいかによって異なります)。
例 PKを使用する1つのテーブル(製品)の場合:
$ mysqldump mysql prods -u ME -pPASS --compatible ansi --compact |grep -v "^\/\*" |sqlite3 testme2.db
$ mysqldump mysql prods -u ME -pPASS --compatible ansi --compact |grep -v "^\/\*" |sqlite3 testme2.db
Error: near line 1: table "prods" already exists
Error: near line 7: UNIQUE constraint failed: prods.id, prods.ts
$ sqlite3 testme2.db '.schema'
CREATE TABLE "prods" (
"id" varchar(30) NOT NULL DEFAULT '',
"ts" int(11) NOT NULL DEFAULT '0',
"val" double DEFAULT NULL,
PRIMARY KEY ("id","ts")
);
より複雑な場合は、ラッパーを作成するか、Gistですでに説明した素晴らしいawkLinuxシェルスクリプトを使用することをお勧めします 。
SQLiteデータベースを作成および編集できるSQLiteデータベースブラウザと呼ばれる素晴らしい軽量ツールがあります。これを使用して、Androidアプリのデータベースを作成しました。それに対してSQLステートメントを実行してデータをロードできるため、mySQLデータベースからデータをエクスポートする場合は、このツールを使用してデータをインポートできます。リンクは次のとおりです:http://sqlitebrowser.sourceforge.net/
でデータをエクスポートします
mysqldump database > database.sql
でデータをインポートします
sqlite3 database < database.sql
-u(ユーザー)および-p(パスワード)オプションが必要になる場合があります