web-dev-qa-db-ja.com

MySQLデータベースをSQLiteデータベースにエクスポートする

MySQLデータベースをSQLiteデータベースにエクスポートするのを手伝ってください。

72
Devi

MysqlをSqlite3ファイルに変換する Githubの素晴らしいLinuxシェルスクリプト があります。サーバーにmysqldumpとsqlite3の両方がインストールされている必要があります。よく働く。

63
georgiecasey

@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 で見つけることができます

4
George Fisher

一番上の投稿で言及した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

以上です。私のために働いた単一のプログラムを見つけていません。これが誰かの助けになることを願っています。

3
user2111698

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つのデータベースの異なる頂点エンコードを修正する必要がありました

2
caiofior

個人的には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シェルスクリプト を使用することをお勧めします。

0
user243202

SQLite Database Browserと呼ばれる素晴らしい軽量のツールがあり、sqliteデータベースを作成および編集できます。 Androidアプリのデータベースを作成するために使用しました。SQLステートメントを実行してデータをロードできるため、mySQLデータベースからデータをエクスポートする場合は、このツールを使用してインポートできます。リンクは次のとおりです。 http://sqlitebrowser.sourceforge.net/

0
Aaron Ratner