Будь ласка, допоможіть мені з експортом бази даних MySQL у базу даних SQLite.
Будь ласка, допоможіть мені з експортом бази даних MySQL у базу даних SQLite.
Відповіді:
На Github є фантастичний сценарій оболонки Linux, який перетворює Mysql у файл Sqlite3. Вам потрібні як mysqldump, так і sqlite3, встановлені на вашому сервері. Чудово працює.
2016-05-11 17:32 GMT+2 @esperlu declared MIT as a fitting license (also retrospectively) and the original gist as deprecated.
Відповідь @ 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
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 для видалення ОСНОВНОГО КЛЮЧУ та КЛЮЧУ:
cat localdb.txt | grep -v "PRIMARY KEY' | grep -v KEY > localdb.txt.1
Потім я використав редактор для виправлення файлу. Після видалення ключів у вас виходить оператор CREATE, який виглядає так:
CREATE ...
...,
)
Цей трейлінг ,
потрібно видалити. У vi цей вираз відповідає їм,, $ \ n)
Потім потрібно змінити все \'
на''
Тоді ви можете виконати імпорт:
sqlite3 local.sqlite3 < localdb.txt.1
І це все. Я не знайшов жодної програми, яка б працювала на мене. Сподіваюся, це комусь допомагає.
Я вручну створив структуру таблиці в базі даних 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, щоб зафіксувати інше кодування вершини в двох базах даних
Особисто мені подобається просте використання mysqldump, проте потрібні деякі коригування (залежно від вашого мистецтва в Unix та того, що ви хочете зробити).
Напр. лише для однієї таблиці (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 на Gist .
Існує фантастичний, легкий інструмент під назвою SQLite Database Browser, який дозволяє створювати та редагувати бази даних sqlite. Я використовував його для створення баз даних для програм для Android. Ви можете запустити проти нього оператори SQL для завантаження даних, тому, якщо ви експортуєте дані з бази даних MySQL, ви можете просто імпортувати їх за допомогою цього інструменту. Ось посилання: http://sqlitebrowser.sourceforge.net/
експортувати дані за допомогою
mysqldump database > database.sql
та імпортуйте дані за допомогою
sqlite3 database < database.sql
Вам можуть знадобитися параметри -u (користувач) та -p (пароль)