MySQLDump из исполняемого файла на Windows 7 - PullRequest
0 голосов
/ 13 февраля 2012

Я попытался вывести базу данных mysql с помощью вызова ws jscript-файла, но он не работает.

У меня есть этот код, вызываемый с помощью оболочки git, и он отлично работает:

# If something fails, exit with status other than 0
set -e

# select dump directory
cd "$(git rev-parse --show-toplevel)"

# first, remove our original schema
rm -f "WebShop\DataBase\backup.sql"

# generate a new schema
exec "C:\Program Files\MySQL\MySQL Server 5.5\bin\mysqldump.exe" --skip-comments -u root --password=root webshopdb |sed 's$),($),\n($g' > "WebShop\DataBase\backup.sql"

Я попробовал почти такой же код в WSH, но он возвращает только с заголовком файла дампа и не создает файл.Я понятия не имею, что работает неправильно, или как отлаживать код ...: S

var shellObj = WScript.CreateObject('WScript.Shell');
var exec = shellObj.Exec(
    '"C:\\Program Files\\MySQL\\MySQL Server 5.5\\bin\\mysqldump.exe"'+
    " --skip-comments -u root --password=root webshopdb |sed 's$),($),\\n($g' > " + 
    '"D:\\creation\\software developer\\projects\\webshop-refactoring-project\\document root\\WebShop\\DataBase\\backup.sql"'
);
WScript.Echo(exec.StdOut.ReadAll());

Я пробовал с файлами bat и cmd, но они не могут обработать пространство в путях.

Кто-нибудь может помочь?

(Для меня было бы достаточно сделать каким-то образом исполняемый файл из кода git или заставить работать wsh ... Идеальным решением было бы, если бы я могназови дамп из netbeans, но в жизни нет ничего настолько идеального ...: D)

1 Ответ

1 голос
/ 15 февраля 2012

Я сделал это с файловой ассоциацией.

Я создал файл git.bat:

if not exist %1 exit
set bash=C:\Program Files (x86)\Git\bin\bash.exe
"%bash%" --login -i -c "exec "%1""

И связал его с файлами .hook.

После этого я создал тестовый файл dump.hook:

#!/bin/sh
cd "D:/creation/software developer/projects/webshop-refactoring-project/document root/WebShop";
cd "$(git rev-parse --show-toplevel)"
rm -f "WebShop/DataBase/backup.sql"
exec "C:/Program Files/MySQL/MySQL Server 5.5/bin/mysqldump.exe" --skip-comments -u root --password=root webshopdb |sed 's$),($),\n($g' > "WebShop/DataBase/backup.sql"
exit

И это прекрасно работает.

Через 3 дня я понял! Woohoo! : D

примечание: * В командной строке Windows обычно возникают проблемы с пробелами и специальными символами в имени пути, поэтому гораздо проще использовать эмулированный linux из git, чем пытаться его исправить. Можно также поместить файл .hook в ловушку git перед фиксацией, чтобы он мог автоматически выгружать схему базы данных при каждом коммите ... (возможно, git add не работает с этими файлами, я не нашел авто решение для дампа и фиксации: git pre-commit + mysqldump: невозможно найти путь, несуществующая команда ) *

...