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


120

Чи можливо перетворити з MySQL в SQLite за допомогою безкоштовного інструменту на Windows?


Відповіді:


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

Сценарій просто тягне аргументи з командного рядка і передає їх туздИшпр, так що ви можете дізнатися про налаштування призначених для користувача портів і т.д. з 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
Вс Ченвен

52

Ось це список перетворювачів . ( знімок в архіві.today )


Альтернативний метод, який би працював навіть у Windows, але його рідко згадують: використовувати клас ORM, який дозволяє абстрагувати певні відмінності баз даних. наприклад, ви отримуєте їх у PHP ( RedBean ), Python (шар ORM Django, Storm , SqlAlchemy ), Ruby on Rails ( ActiveRecord ), какао ( CoreData ) тощо.

тобто ви могли це зробити:

  1. Завантажте дані з вихідної бази даних за допомогою класу ORM.
  2. Зберігайте дані в пам'яті або серіалізуйте на диск.
  3. Зберігання даних у базі даних призначення за допомогою класу ORM.

43

Sequel (Ruby ORM) має інструмент командного рядка для роботи з базами даних, у вас повинен бути встановлений рубін, а потім:

  $ gem install sequel mysql2 sqlite3 
  $ sequel mysql2://user:password@host/database -C sqlite://db.sqlite

1
Не забувайте gem install mysqlіgem install sqlite3
Нік,

1
і gem install pgякщо ви хочете конвертувати з або на postgres db, у продовженнях повинні бути адаптери для великих db's
Macario

2
замінити mysqlз , mysql2якщо ви використовуєтеmysql2
Carlosin

1
Примітка. Вам знадобиться ruby-devпакет для створення цих початкових пакетів дорогоцінних каменів.
Панда

1
Довелося використати "gem встановити продовження mysql2 sqlite3", а потім "продовження mysql2: // користувач: пароль @ хост / база даних -C sqlite: //db.sqlite" PERFECT
unom

17

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


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

7

Я зіткнувся з тією ж проблемою близько 2 днів тому, коли мені довелося конвертувати 20 ГБ + базу даних MySQL в 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 DB Виберіть «Файл»> «Імпортуйте файл MySQL», який ви зберегли.

Він легко перетвориться в діалогове вікно після попередження.

Якщо помилка, тоді видаліть більше зайвих рядків, якщо ваш файл MySQL є.

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


Це добре спрацювало, якщо ваші дані не мають такого характеру, як апостроф. Наприклад, "Це книга Петра" в sql німий буде "Це книга Петра". Це зробить помилку підкидання браузера DB, для великих даних важко видалити. Але якщо ви імпортуєте дані з phpAdmin як CSV в браузер DB, імпорт буде успішним. Я сподіваюся, що ця допомога
Сенопа

1

Моє рішення цієї проблеми під керуванням Mac було

  1. Встановіть Ruby та продовження, подібне до відповіді Макаріо. Я перейшов за цим посиланням, щоб допомогти налаштувати налаштування розробки Ruby, mysql та sqlite3 Ruby on Rails для Mac OSX
  2. Встановити продовження

    $ gem install sequel

    Якщо все-таки потрібно

    % gem install mysql sqlite3

    потім використано наступне на основі документа Sequel doc bin_sequel.rdoc (див. Копіювати базу даних)

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

Користувач Windows може встановити Ruby і Sequel для рішення Windows.


Як я можу скопіювати лише одну таблицю з БД не всієї бази даних mysql?
Атул Вайбхав

Для однієї таблиці в минулому я це робив, але може бути кращий спосіб. Експортуйте таблицю у форматі csv з відміченими іменами стовпців у першому варіанті рядка Потім за допомогою браузера DB для SQLite імпортуйте таблицю в мою існуючу базу даних sqlite, використовуючи таблицю імпорту з параметра CSV. Тоді вам, ймовірно, доведеться зайти та змінити поля на потрібний вам тип, оскільки я вважаю, що всі поля будуть встановлені на TEXT. У проекті, над яким я працював, хоча ми розробили процес, ми зробили api-дзвінок, щоб повернути всі дані в таблицю, а потім вставили / замінили дані в базу даних програм.
Грант Удача

Здається, це працює. Тим не менш, я не можу знайти, де знаходиться вихідний файл. Можеш допомогти мені?
Понтіос

1

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

  1. Встановіть RazorSQL . Працює для Mac, Windows та Linux.
  2. У RazorSQL підключіться до вашої бази даних, наприклад, у localhost. Перетворення не працює з дамп-файлами sql.
  3. Клацніть правою кнопкою миші на базі даних -> Перетворення бази даних -> виберіть SQLite. Це збереже txt-файл із усіма sqliteзапитами, необхідними для створення цієї бази даних.
  4. Встановіть менеджер баз даних SQLite, як-от браузер БД для SQLite . Він працює на будь-якій ОС.
  5. Створіть порожню базу даних, перейдіть на вкладку Execute SQL та вставте вміст із кроку 3.

Це все, тепер у вас є ваша база даних SQLite.


Здається, RazorSQL просто будує "загальний" * .sql файл із визначеннями таблиці та вставкою даних, але нічого конкретного для SQLite. Він не експортував Views, що є великим мінусом. Клієнт mysqldump, який поставляється з MySql, також експортує погляди, але він також створює багато умовних речей тощо, які SQLite не перетравить.
dalilander

0

Якщо у вас є досвід, пишіть прості сценарії Perl \ Python \ тощо, і конвертуйте MySQL в SQLite. Прочитайте дані з Mysql і запишіть їх на SQLite.


0

Мені подобається менеджер SQLite2009 Pro Enterprise, запропонований Jfly. Однак:

  • Тип даних MySQL INT не перетворений у тип даних INTEGER SQlite (працює з 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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.