Что нового

Загрузка дампа в mysql

E_gorka

Новичок
Сообщения
7
Репутация
0
Имеется винда с установленной HeidiSQL в которой есть база mysql. Стоит задача написать скрипты для снятия дампа и разворачивания (упростить работу пользователей и не давать права на базу). Так как в HeidiSQL есть mysqldump, mysql и прочие ехе-шники, то работаю через них.
Снятие дампа
Код:
$iReturn = RunWait ('C:\Program Files\MariaDB 10.0\bin\mysqldump.exe --user=root --password=12345 --port=3308 --single-transaction --databases psbase --result-file=' &  $sDir )

работает без нареканий.

Загрузка дампа
Код:
$dump1 = FileOpenDialog("Требуется выбрать файл с дампом базы данных", @WorkingDir, "Дамп MYSQL (*.sql)", 1+2)
RunWait ('C:\Program Files\MariaDB 10.0\bin\mysqladmin.exe --user=root --password=12345 --port=3308 --force drop psbase')
RunWait ('C:\Program Files\MariaDB 10.0\bin\mysqladmin.exe --user=root --password=12345 --port=3308 create psbase')
RunWait ("C:\Program Files\MariaDB 10.0\bin\mysql.exe --user=root --password=12345 --port=3308 --force psbase < " & $dump1 )

В части последней команды не работает. Выскакивает окно командной строки на пол секунды с каким то многочисленным выводом (предполагаю хелп от mysql) и закрывается. То есть база удаляется, создается, но дамп не заливается

При этом данный подход
Код:
Run ("C:\Windows\System32\cmd.exe")
WinWaitActive("[CLASS:ConsoleWindowClass]", "", 5)
Send("c:")
Send("{ENTER}")
Send("cd \")
Send("{ENTER}")
Send("cd +'Program Files\MariaDB 10.0\bin+' ")
Send("{ENTER}")
Send("mysql.exe --user=root --password=12345 --port=3308 --force psbase < " & $dump1)
Send("{ENTER}")

отрабатывает без нареканий.

Прошу объяснить чем эти два подхода принципиально отличаются, что второй работает, а первый нет.

Пинать в сторону "AutoIT умеет работать с mysql напрямую" пока не нужно, оставлю это как запасной вариант.
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
E_gorka
чем эти два подхода принципиально отличаются
В командной строке вы используете знак <, отвечающий за перенаправление ввода-вывода. И обрабатывает этот знак именно cmd.exe. А для mysql.exe - это неизвестная команда. Найдите в справке по командной строке mysql.exe, как указать путь к файлу дампа, и используйте эту команду вместо < в функции RunWait().
 
A

Alofa

Гость
InnI а так не прокатит?
(проверить никак)
Код:
RunWait(@ComSpec & ' /c ' & '"C:\Program Files\MariaDB 10.0\bin\mysql.exe" --user=root --password=12345 --port=3308 --force psbase < "' & $dump1 & '"')
 
Автор
E

E_gorka

Новичок
Сообщения
7
Репутация
0
Найдите в справке по командной строке mysql.exe
в том то и дело, что во всех мануалах импорт описан так:
Код:
shell> mysql < backup_sunday_1_PM.sql



Добавлено:
Сообщение автоматически объединено:

Alofa сказал(а):
OffTopic:
InnI а так не прокатит?
(проверить никак)
Код:
RunWait(@ComSpec & ' /c ' & '"C:\Program Files\MariaDB 10.0\bin\mysql.exe" --user=root --password=12345 --port=3308 --force psbase < "' & $dump1 & '"')

Пустая база, импорт не сработал.
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
E_gorka
импорт не сработал
Убедитесь, что $dump1 содержит полный путь к файлу, а не только имя. Также разберитесь в кавычками, если в пути пробелы.
 
Автор
E

E_gorka

Новичок
Сообщения
7
Репутация
0
InnI сказал(а):
E_gorka
импорт не сработал
Убедитесь, что $dump1 содержит полный путь к файлу, а не только имя. Также разберитесь в кавычками, если в пути пробелы.

Про переменную, даже такой вариант не работает:
Код:
RunWait ("C:\Program Files\MariaDB 10.0\bin\mysql.exe --user=root --password=12345 --port=3308 --force psbase < C:\1\123.sql" )


Про кавычки:
Код:
RunWait ('C:\Program Files\MariaDB 10.0\bin\mysql.exe --user=root --password=12345 --port=3308 --force psbase < C:\1\123.sql' )
тоже не работает
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
E_gorka
даже такой вариант не работает
И не будет! Я же вам объяснил про знак "<". Консоль нужно запускать с параметром "/c"
Код:
@ComSpec
 
Автор
E

E_gorka

Новичок
Сообщения
7
Репутация
0
И не будет! Я же вам объяснил про знак "<". Консоль нужно запускать с параметром "/c"

Код:
RunWait(@ComSpec & ' /c ' & '"C:\Program Files\MariaDB 10.0\bin\mysql.exe" --user=root --password=12345 --port=3308 --force psbase < c:\1\123.sql ')
Сработал, сейчас переменную прикручу


Добавлено:
Сообщение автоматически объединено:

Код:
RunWait(@ComSpec & ' /c ' & '"C:\Program Files\MariaDB 10.0\bin\mysql.exe" --user=root --password=12345 --port=3308 --force psbase < ' & $dump1 )


Работает как надо. :ok:

Спасибо огромное!
 
Автор
E

E_gorka

Новичок
Сообщения
7
Репутация
0
Этот вариант я сразу проверил, но там похоже с кавычками что то не то, поэтому правильно не сработало.
 
A

Alofa

Гость
E_gorka
OffTopic:
CMD - запуск новой копии интерпретатора команд Windows
Если указаны ключи /C или /K, то остальная часть командной строки после
такого ключа обрабатывается как командная строка, а обработка символов
кавычек (") ведется по следующим правилам:

1. Если выполняются все перечисленные ниже условия, то символы
кавычек в командной строке сохраняются:

- ключ /S отсутствует
- есть ровно два символа кавычек
- между ними нет других специальных символов, как то: &<>()@^|
- между ними имеются один или несколько пробелов
- строка, заключенная в кавычки, является именем исполнимого
файла.

2. В противном случае, проверяется первый символ, и если он является
символом кавычек, то он удаляется, также удаляется последний
символ кавычек в командной строке, а весь текст после этого
последнего символа кавычек сохраняется.

А к примеру, так сработает?
Код:
RunWait(@ComSpec & ' /c ' & '"C:\Program Files\MariaDB 10.0\bin\mysql.exe" --user=root --password=12345 --port=3308 --force psbase < c:\Новая папка\1\123.sql')
 
Автор
E

E_gorka

Новичок
Сообщения
7
Репутация
0
Alofa сказал(а):
А к примеру, так сработает?
Код:
RunWait(@ComSpec & ' /c ' & '"C:\Program Files\MariaDB 10.0\bin\mysql.exe" --user=root --password=12345 --port=3308 --force psbase < c:\Новая папка\1\123.sql')

сработает.
 
Верх