MySQLデータベースをSQLiteデータベースにエクスポートするのを手伝ってください。
MysqlをSqlite3ファイルに変換する Githubの素晴らしいLinuxシェルスクリプト があります。サーバーにmysqldumpとsqlite3の両方がインストールされている必要があります。よく働く。
@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を使用して、PRIMARY KEYとKEYを削除しました。
cat localdb.txt | grep -v "PRIMARY KEY' | grep -v KEY > localdb.txt.1
その後、エディターを使用してファイルを修正しました。キーが削除されると、次のようなCREATEステートメントが作成されます。
CREATE ...
...,
)
末尾の,
は削除する必要があります。 viでは、この式はそれらに一致します($\n)
次に、すべての\'
を''
に変更する必要があります
その後、インポートを実行できます。
sqlite3 local.sqlite3 < localdb.txt.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
sedを使用して、2つのデータベースの異なる頂点エンコードを修正する必要がありました
個人的には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のファンタスティックawk Linuxシェルスクリプト を使用することをお勧めします。
SQLite Database Browserと呼ばれる素晴らしい軽量のツールがあり、sqliteデータベースを作成および編集できます。 Androidアプリのデータベースを作成するために使用しました。SQLステートメントを実行してデータをロードできるため、mySQLデータベースからデータをエクスポートする場合は、このツールを使用してインポートできます。リンクは次のとおりです。 http://sqlitebrowser.sourceforge.net/