Экспорт базы данных MySQL в базу данных SQLite

64

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

  • 2
    В проекте SQLite также есть страница с утилитами преобразования: sqlite.org/cvstrac/wiki?p=ConverterTools
  • 0
    @Clinton на странице, на которую вы ссылаетесь, предупреждение о том, что информация устарела.
Теги:
database

7 ответов

52

Там есть фантастическая Linux-оболочка script в Github, которая преобразует Mysql в файл Sqlite3. Вам нужны оба mysqldump и sqlite3, установленные на вашем сервере. Отлично работает.

  • 0
    работает лучше всего до сих пор! нужно только удалить некоторые операторы «COLLATE xy» с кодировками, которые sqlite не понимает. обратите внимание, что вам не нужен sqlite3 на вашем сервере, если вы хотите клон вашей базы данных mysql для локальной разработки.
  • 1
    К сожалению, не работает для меня. Помимо проблем с утверждениями «PRIMARY KEY», упомянутых ниже, было сообщено о многих других ошибках, связанных с операторами «INSERT» и отсутствующими таблицами («объектами»).
Показать ещё 3 комментария
3

Ответ by @user2111698 под редакцией @quassy работает, как и было обещано. Поскольку я делаю это часто, я помещаю их инструкции в bash script:

#!/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

  • 0
    Если вы отформатируете свой код, чтобы исключить прокрутку, вам будет легче читать его другим.
  • 0
    Счастлив; не быстро увидеть, как
Показать ещё 2 комментария
2

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

  • 0
    Спасибо за это, это было полезно, так как в исходном вопросе не было указано, нужно ли включать схему создания. Проще, когда схема уже настроена
2

mysql2sqlite.sh, упомянутый в верхнем сообщении, не очень хорошо справляется с линиями PRIMARY KEY, он не записывает завершающий ) для завершения инструкции CREATE.

Это то, что я сделал. Я запустил mysql dump как:

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

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

0

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

Ex. для одной таблицы (prods) с PK:

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

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

-2

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

  • 2
    Как это помогает с преобразованием MySQL?
  • 2
    Это поможет вам сделать именно то, что вам нужно сделать. На самом деле, я буквально делаю это прямо сейчас. Экспортируйте MySQL, используя mysqldump или phpMyAdmin, а затем используйте вышеупомянутый инструмент, чтобы импортировать его в базу данных sqlite. Он попросил «с экспортом базы данных MySQL в базу данных SQLite», и вышеуказанный инструмент станет вторым шагом в выполнении именно того, что вам нужно. Голосовать за законную помощь просто так неправильно. Я новичок здесь, и мой ответ не только обратился к вопросу, но и является тем, что я использую прямо сейчас в реальной ситуации. Не спешите без причины голосовать и отговаривать людей участвовать.
Показать ещё 5 комментариев
-12

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

  mysqldump database > database.sql

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

  sqlite3 database < database.sql

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

  • 8
    Будет ли это работать с различиями и возможностями, доступными в mysql, а не в sqlite?
  • 4
    Это не будет работать. Индексы, описания таблиц, escape-последовательности двоичных данных, механизмы блокировки, возможно, другие вещи, все различаются в MySQL и SQLite.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню