Пожалуйста, помогите мне с экспортом базы данных MySQL в базу данных SQLite.
Экспорт базы данных MySQL в базу данных SQLite
Ответ 1
Там есть фантастическая Linux-оболочка script в Github, которая преобразует Mysql в файл Sqlite3. Вам нужны оба mysqldump и sqlite3, установленные на вашем сервере. Отлично работает.
Ответ 2
Ответ @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
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
И что это. Я не нашел ни одной программы, которая работала бы на меня. Надеюсь, это поможет кому-то.
Ответ 4
Я вручную создал структуру таблицы в базе данных 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 в двух базах данных
Ответ 5
Существует фантастический, легкий инструмент под названием SQLite Database Browser, который позволяет создавать и редактировать базы данных sqlite. Я использовал его для создания баз данных для Android-приложений. Вы можете запускать инструкции SQL для него, чтобы загрузить данные, поэтому, если вы экспортируете данные из базы данных mySQL, вы можете просто импортировать ее с помощью этого инструмента. Здесь ссылка: http://sqlitebrowser.sourceforge.net/
Ответ 6
Лично мне нравится простое использование 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,
Ответ 7
экспортировать данные с помощью
mysqldump database > database.sql
и импортируйте данные с помощью
sqlite3 database < database.sql
вам могут понадобиться опции -u (пользователь) и -p (пароль)