Преобразование MySQL в SQlite [закрыто]

120

Можно ли конвертировать из MySQL в SQLite с помощью бесплатного инструмента для Windows?

mullek
источник
См. Также stackoverflow.com/questions/18671/…
Дэвид д'Се Фрейтас,

Ответы:

78

На GitHub есть скрипт mysql2sqlite.sh

Как описано в шапке, скрипт можно использовать так:

./mysql2sqlite.sh myDbase | sqlite3 database.sqlite

альтернативы

Дэвид Лебауэр
источник
8
Работает как шарм! Вот немного документации: $ ./mysql2sqlite.sh -h host -u MyUserName -pMySecretPassWord myDbase | sqlite3 database.sqlite gist.github.com/943776
kachar
Сценарий просто извлекает аргументы из командной строки и передает их в mysqldump, чтобы вы могли узнать о настройке пользовательских портов и т. Д. С помощью man mysqlилиman mysqldump
Девин Ховард
2
Стоит отметить, что этот скрипт был заменен преемником, поддерживаемым здесь: github.com/dumblob/mysql2sqlite
drzax
Еще лучше играть с символами, отличными от ascii: $. / Mysql2sqlite.sh --default-character-set = utf8 -hHost -uUser -pPass db | sqlite3 db.sqlite gist.github.com/esperlu/943776#gistcomment-984448
Вс Джунвэнь, 06
52

Вот это список преобразователей . ( снимок на archive.today )


Альтернативный метод, который будет работать даже в Windows, но редко упоминается: используйте класс ORM, который абстрагирует для вас конкретные различия в базе данных. например, вы получаете их в PHP ( RedBean ), Python (уровень ORM Django, Storm , SqlAlchemy ), Ruby on Rails ( ActiveRecord ), Cocoa ( CoreData ) и т. д.

то есть вы можете сделать это:

  1. Загрузить данные из исходной базы данных с помощью класса ORM.
  2. Храните данные в памяти или сериализуйте на диск.
  3. Сохраняйте данные в целевой базе данных с помощью класса ORM.
Давид д'Се Фрейтас
источник
43

В Sequel (Ruby ORM) есть инструмент командной строки для работы с базами данных, у вас должен быть установлен ruby, затем:

  $ gem install sequel mysql2 sqlite3 
  $ sequel mysql2://user:password@host/database -C sqlite://db.sqlite
Macario
источник
1
Не забывай gem install mysqlиgem install sqlite3
Ник
1
и gem install pgесли вы хотите конвертировать из или в базу данных postgres, сиквел должен иметь адаптеры для основных баз данных
Macario
2
замените mysqlна, mysql2если вы используетеmysql2
Carlosin 09
1
Примечание: вам понадобится этот ruby-devпакет для сборки этих собственных пакетов gem.
Panda
1
Пришлось использовать «gem install sequel mysql2 sqlite3», а затем «sequel mysql2: // user: password @ host / database -C sqlite: //db.sqlite»
ИДЕАЛЬНО
17

Не каждую схему БД можно преобразовать. MySQL более сложный и многофункциональный, чем SQLite. Однако, если ваша схема достаточно проста, вы можете сбросить ее в файл SQL и попытаться импортировать / загрузить в базу данных SQLite.

Ассаф Лави
источник
После сброса базы данных MySQL в файл вы можете использовать этот скрипт для преобразования его в SQLite github.com/dumblob/mysql2sqlite (как указано в ответе @David_LeBauer).
Поль Руже,
7

Я столкнулся с той же проблемой около двух дней назад, когда мне пришлось преобразовать базу данных MySQL размером более 20 ГБ в SQLite. Это была непростая задача, и в итоге я написал этот пакет Python, который выполняет эту работу.

Плюс его написания на Python заключается в том, что он кроссплатформенный (в отличие от сценария оболочки / bash) и может быть легко установлен с помощью pip install(даже в Windows). Он использует генераторы и фрагменты обрабатываемых данных и поэтому очень эффективно использует память.

Я также приложил некоторые усилия, чтобы правильно перевести большинство типов данных из MySQL в SQLite .

Инструмент также тщательно протестирован и работает на Python 2.7 и 3.5+ .

Он вызывается из командной строки, но также может использоваться как стандартный класс Python, который можно включить в более крупную оркестровку Python.

Вот как вы это используете:

Usage: mysql2sqlite [OPTIONS]

Options:
  -f, --sqlite-file PATH     SQLite3 database file  [required]
  -d, --mysql-database TEXT  MySQL database name  [required]
  -u, --mysql-user TEXT      MySQL user  [required]
  -p, --mysql-password TEXT  MySQL password
  -h, --mysql-host TEXT      MySQL host. Defaults to localhost.
  -P, --mysql-port INTEGER   MySQL port. Defaults to 3306.
  -c, --chunk INTEGER        Chunk reading/writing SQL records
  -l, --log-file PATH        Log file
  -V, --vacuum               Use the VACUUM command to rebuild the SQLite
                             database file, repacking it into a minimal amount
                             of disk space
  --use-buffered-cursors     Use MySQLCursorBuffered for reading the MySQL
                             database. This can be useful in situations where
                             multiple queries, with small result sets, need to
                             be combined or computed with each other.
  --help                     Show this message and exit.
Клемен Тушар
источник
1
Привет, @techouse, выглядит отлично! Есть ли способ работать с .sqlфайлом дампа или требуется подключение к установленной базе данных MySQL?
vortek
Привет! Эммм, нет, для этого нужна рабочая база данных MySQL. Если у вас есть дамп без реального сервера, лучше всего изменить файл вручную, если вы знаете, что делаете.
Клемен Тушар
@arkadianriver Я предлагаю вам всегда использовать виртуальные среды с Python 😎
Клемен Тушар
4

Самый простой способ конвертировать MySql DB в Sqlite:

1) Создайте файл дампа sql для вашей базы данных MySql.

2) Загрузите файл в онлайн-конвертер RebaseData здесь

3) На странице появится кнопка загрузки для загрузки базы данных в формате Sqlite.

Сандип Йоханс
источник
4

Я нашел идеальное решение

Во-первых, вам понадобится этот скрипт (поместите его в файл с именем mysql-to-sqlite.sh):

#!/bin/bash
if [ "x$1" == "x" ]; then
  echo "Usage: $0 <dumpname>"
  exit
fi

cat $1 |
grep -v ' KEY "' |
grep -v ' UNIQUE KEY "' |
grep -v ' PRIMARY KEY ' |
sed '/^SET/d' |
sed 's/ unsigned / /g' |
sed 's/ auto_increment/ primary key autoincrement/g' |
sed 's/ smallint([0-9]*) / integer /g' |
sed 's/ tinyint([0-9]*) / integer /g' |
sed 's/ int([0-9]*) / integer /g' |
sed 's/ character set [^ ]* / /g' |
sed 's/ enum([^)]*) / varchar(255) /g' |
sed 's/ on update [^,]*//g' |
sed 's/\\r\\n/\\n/g' |
sed 's/\\"/"/g' |
perl -e 'local $/;$_=<>;s/,\n\)/\n\)/gs;print "begin;\n";print;print "commit;\n"' |
perl -pe '
if (/^(INSERT.+?)\(/) {
  $a=$1;
  s/\\'\''/'\'\''/g;
  s/\\n/\n/g;
  s/\),\(/\);\n$a\(/g;
}
' > $1.sql
cat $1.sql | sqlite3 $1.db > $1.err
ERRORS=`cat $1.err | wc -l`
if [ $ERRORS == 0 ]; then
  echo "Conversion completed without error. Output file: $1.db"
  rm $1.sql
  rm $1.err
else
  echo "There were errors during conversion.  Please review $1.err and $1.sql for details."
fi

Затем скопируйте копию своей базы данных:

you@prompt:~$ mysqldump -u root -p --compatible=ansi --skip-opt generator > dumpfile

А теперь запустим преобразование:

you@prompt:~$ mysql-to-sqlite.sh dumpfile

И если все пойдет хорошо, теперь у вас должен быть dumpfile.db, который можно использовать через sqlite3.

you@prompt:~$ sqlite3 dumpfile.db 
SQLite version 3.6.10
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .tables
dg_cities                 dg_forms                  dg_surnames             
dg_counties               dg_provinces              dg_user_accounts        
dg_countries              dg_provinces_netherlands
dg_first_names            dg_states
Пауло Луан
источник
3

Есть разные способы сделать это. У меня тоже была эта проблема, я много искал, а потом получил простой способ конвертировать MySQL в SQLite.

Следуй этим шагам:

  1. Сначала вам нужно установить браузер SQLite DB (очень маленький и быстрый для просмотра таблиц и данных)

  2. Откройте файл MySQL в Блокноте, или было бы здорово, если бы вы открыли его в Блокноте ++.

  3. Удалить первые лишние строки, содержащие информацию или запросы, и сохранить их.

  4. Откройте браузер базы данных SQLite, создайте базу данных, затем таблицы и те же типы, что и в базе данных MySQL.

  5. В строке меню браузера БД SQLite выберите Файл-> затем Импортировать файл данных MySQL, который вы сохранили.

Он легко преобразуется в SQLite после диалогового окна предупреждения.

В случае ошибки удалите лишние строки, если в вашем файле MySQL есть.

Вы также можете установить программное обеспечение преобразователя MySQL в SQLite на пробной основе, но информация, которую я даю для преобразования, - это время жизни.

Узаир Кайзер
источник
Это нормально работало, если в ваших данных нет символа вроде апострофа. Например, «Это книга Питера» в sql dumb будет «Это книга Петра». Это приведет к ошибке браузера БД, так как для больших данных их трудно удалить. Но если вы импортируете данные из phpAdmin как CSV в браузер БД, этот импорт будет успешным. Я надеюсь, что это поможет
Seunope
1

Мое решение этой проблемы на Mac заключалось в

  1. Установите Ruby и продолжение, аналогично ответу Macario. Я перешел по этой ссылке, чтобы помочь настроить Ruby, mysql и sqlite3 для разработки Ruby on Rails для Mac OSX.
  2. Установить продолжение

    $ gem install sequel

    Если еще требуется

    % gem install mysql sqlite3

    затем использовал следующее, основанное на документе Sequel bin_sequel.rdoc (см. Копирование базы данных)

    sequel -C mysql://myUserName:myPassword@host/databaseName sqlite://myConvertedDatabaseName.sqlite

Окна пользователь может установить Ruby , и Sequel для решения окна.

Даруй удачу
источник
Как я могу скопировать только одну таблицу из БД, а не всю базу данных mysql?
Атул Вайбхав
Раньше я делал это для одной таблицы, но может быть способ получше. Экспортируйте таблицу как csv с отмеченными именами столбцов в первой строке. Затем с помощью DB Browser для SQLite импортируйте таблицу в мою существующую базу данных sqlite, используя параметр импорта таблицы из csv. Затем вам, вероятно, придется войти и изменить поля на требуемый тип, поскольку я считаю, что все поля будут установлены на ТЕКСТ. В проекте, над которым я работал, мы разработали процесс, в котором мы вызывали api для возврата всех данных в таблице, а затем вставляли / заменяли данные в базе данных приложений.
Grant Luck
Кажется, это работает. Тем не менее, я не могу найти выходной файл. Вы можете помочь мне?
Понтиос
1

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

  1. Установите RazorSQL . Работает для Mac, Windows и Linux.
  2. В RazorSQL подключитесь к вашей базе данных, например, на localhost. Преобразование не работает с файлами дампа sql.
  3. Щелкните правой кнопкой мыши свою базу данных -> Преобразование базы данных -> выберите SQLite. Это сохранит текстовый файл со всеми sqliteзапросами, необходимыми для создания этой базы данных.
  4. Установите менеджер баз данных SQLite, например DB Browser для SQLite . Работает на любой ОС.
  5. Создайте пустую базу данных, перейдите на вкладку «Выполнение SQL» и вставьте содержимое из шага 3.

Вот и все, теперь у вас есть база данных SQLite.

Вали Мунтяну
источник
Кажется, что RazorSQL просто создает «общий» файл * .sql с определениями таблиц и вставками данных, но ничего особенного для SQLite. Он не экспортирует Views, что является большим минусом. Клиент mysqldump, который поставляется с MySql, также экспортирует представления, но он также создает много условных вещей и т. Д., Которые SQLite не переваривает.
dalilander
0

Если у вас есть опыт, напишите простые скрипты на Perl \ Python \ etc и конвертируйте MySQL в SQLite. Считайте данные из Mysql и запишите их на SQLite.

Евгений
источник
0

Мне нравится SQLite2009 Pro Enterprise Manager, предложенный Jfly. Тем не мение:

  • Тип данных MySQL INT не преобразуется в тип данных SQlite INTEGER (работает с DBeaver).

  • Он не импортирует константы внешнего ключа из MySQL (я не смог найти ни одного инструмента, поддерживающего перенос ограничений внешнего ключа из MySQL в SQlite.)

Стефан
источник
0

Из списка инструментов конвертера я нашел Kexi . Это инструмент пользовательского интерфейса для импорта с различных серверов БД (включая MySQL) в SQLite. При импорте некоторой базы данных (скажем, из MySQL) он сохраняет ее в формате Kexi. Формат Kexi - это «родной» формат SQLite. Так что просто скопируйте файл kexi и сохраните данные в формате sqlite.

Тушар Госвами
источник
0

Если вам предоставили файл базы данных и вы не установили правильный сервер (SQLite или MySQL), попробуйте этот инструмент: https://dbconvert.com/sqlite/mysql/ Пробная версия позволяет преобразовать первые 50 записей каждой таблицы , остальные данные помечены водяными знаками. Это программа для Windows, которая может либо выгружать на работающий сервер базы данных, либо выгружать вывод в файл .sql.

kurdtpage
источник