Экспорт базы данных MySQL в базу данных SQLite - PullRequest
72 голосов
/ 02 марта 2011

Пожалуйста, помогите мне с экспортом базы данных MySQL в базу данных SQLite.

Ответы [ 7 ]

63 голосов
/ 14 декабря 2012
4 голосов
/ 04 сентября 2016

Ответ @ user2111698, отредактированный @quassy, ​​работает, как и было обещано. Поскольку я делаю это часто, я помещаю их инструкции в скрипт 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

3 голосов
/ 01 августа 2014

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

И это все.Я не нашел ни одной программы, которая бы работала на меня.Надеюсь, это кому-нибудь поможет.

2 голосов
/ 01 апреля 2016

Я вручную создал структуру таблицы в базе данных 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 , чтобыисправить другую кодировку апекса в двух базах данных

0 голосов
/ 25 ноября 2014

Лично мне нравится простое использование mysqldump, но некоторые изменения необходимы (в зависимости от вашего творчества в Unix и того, что вы хотите сделать).

Ex. только для одного стола (шипов) с ПК:

$ 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")
    );

Для более сложных вещей, возможно, лучше написать оболочку, либо использовать уже упомянутый фантастический скрипт оболочки awk для Linux на Gist .

0 голосов
/ 26 октября 2013

Существует фантастический, легкий инструмент под названием SQLite Database Browser, который позволяет создавать и редактировать базы данных sqlite.Я использовал его для создания баз данных для приложений Android.Вы можете использовать SQL-операторы для загрузки данных, поэтому, если вы экспортируете данные из базы данных MySQL, вы можете просто импортировать их с помощью этого инструмента.Вот ссылка: http://sqlitebrowser.sourceforge.net/

0 голосов
/ 02 марта 2011

экспортируйте данные с помощью

  mysqldump database > database.sql

и импортируйте данные с помощью

  sqlite3 database < database.sql

, вам могут понадобиться опции -u (пользователь) и -p (пароль)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...