-1

Я новичок в Cygwin, но не могу найти что-нибудь в Интернете, чтобы сделать то, что мне нужно.

Я скачал этот скрипт (от MySQL до Sqlite) и смог успешно запустить его в терминале Cygwin64 с помощью приведенной ниже команды и получить преобразованную базу данных

./mysql2sqlite.sh -h 127.0.0.1 -u root -pMySecretPassword databaseName | sqlite3 database.sqlite

То, что я надеюсь сделать, это вызвать этот скрипт с параметрами из командной строки Windows или в приложении .Net.

Это НЕ работает, но можно ожидать

C:\cygwin64\bin\mintty.exe -e '/cygdrive/c/cygwin64/mysql2sqlite.sh' -h 127.0.0.1 -u root -pMySecretPassword databaseName | sqlite3 database.sqlite

Как правильно выполнить скрипт в mintty и предоставить параметры, которые нужны скрипту?

2 ответа2

0

Я получил это работает так, как я хочу.

Этот скрипт действительно успешно преобразует базу данных MySQL в базу данных SQLite, но только если база данных MySQL является очень простой. В MySQL есть функции, которые SQLite не поддерживает. Как триггеры и т.д.

Вся моя проблема заключалась в том, чтобы в Windows был автоматизирован способ выполнения этого сценария, передавая параметры, необходимые сценарию для подключения mysqldump к MySQL, а также для получения данных SQLite и импорта в новую базу данных SQLite. В предыдущих попытках вывод mysqldump печатался на консоль, а не на SQLite3.exe.

Решение:

1) Сохраните скрипт mysql2sqlite.sh в «C:\cygwin64\bin»

2) Создайте командный файл (с содержимым ниже) и сохраните в «C:\cygwin64»

@ эхо выключено

SET script = '/bin/mysql2sqlite.sh'

SET host =% 1%

SET user =% 2%

SET pass =% 3%

База данных SET =% 4%

SET params =% script% -h% host% -u% user% -p% pass%% database%

C: chdir C:\cygwin64\bin

bash --login -i% params% | sqlite3 /cygdrive/c/cygwin64/%database%.db3

3) Назовите этот командный файл в любом месте Windows

C:\cygwin64\convert.bat mysql_host mysql_user mysql_pass mysql_db

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

-1

Трубка (|) должна быть в команде оболочки. То, как оно написано в вашем примере, символ канала и последующие аргументы являются аргументами для двоичного .exe .

Так что попробуйте что-то вроде этого:

C:\cygwin\bin\mintty.exe -h always -e /bin/sh -c \
'/cygdrive/c/cygwin64/mysql2sqlite.sh| /bin/sqlite3 database.sqlite'

Убедитесь, что канал появляется в командной строке, которая идет после -c .


Если полученный файл базы данных пуст, это означает, что скрипт неправильно преобразовал вывод из mysqldump . Это можно проверить так:

echo 'create table tbl1(one varchar(10), two smallint); ' | \
sqlite3 moo.db || echo  script failed

Что означает вывод некоторых команд SQL, их подача в sqlite или (||) вывод эхо-сообщения, если sqlite завершается с ошибкой.

Я попытался запустить скрипт преобразования в базе данных WordPress. Результаты были:

./mysql2sqlite.sh -h zzz.domeneshop.no -u xxx  -pyyy dbname |\
sqlite dbname.db 2> sqlite.errors || echo script failed
memory
script failed

Что говорит о том, что программа AWK имеет недостатки. Это правда, потому что журнал ошибок действительно имел содержимое;

$ grep Error sqlite.errors
Error: near line 29: near "Y": syntax error
Error: near line 175: no such table: wp_options
Error: near line 176: no such table: wp_options
Error: near line 177: no such table: wp_options
Error: near line 178: no such table: wp_options
Error: near line 179: near "_transient_timeout_feed_mod_b9388c83948825c1edaef0d856b7b109": syntax error
Error: near line 191: no such table: wp_options
Error: near line 192: no such table: wp_options
(...)

Таким образом, вердикт состоит в том, что неясный сценарий действительно неверен. Двоичный файл sqlite не может проанализировать выходные данные сценария mysgl2sqlite.sh.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .