start/stop MySQL

3 отговора 0 прегледа
#1

start/stop MySQL

Здравейте, всяка вечер правя архив на таблиците на един MySQL сървър с bat файл, който се стартира от shedule task на друг компютър. MySQL e на компютър в ЛМ до който имам достъп по IP адрес и/или мап-нато у-во. Преди да архивирам таблиците спирам MySQL сървъра с командата
sc \\XXX.XXX.X.XXX stop mysql , където XXX.XXX.X.XXX е IP адреса на сървъра
копирам таблиците от директорията DATA
и стартирам отново сървъра с командата
sc \\XXX.XXX.X.XXX start mysql

Проблемът е, че понякога MySQL сървъра не е стартиран сутрин и трябва да го стартирам ръчно. Връщат ли start/stop някакъв ERRORLEVEL, който да проверявам или някакъв друг съвет за архивиране?


... for a brief moment it seemed that rock 'n roll would inherit the earth.
Отговор
в отговор на Beco_ #2

Re: start/stop MySQL

sc.exe (service control) подава командата на SCM (Sevice Control Manager) и не чака резултат. Отделно можеш да изпълниш sc \\machine query service за да ти върне инфо в какво състояние е service-а.

Аз ползвам следната "функция" за bat файлове за service control:
@echo off

...
echo Stopping %service_mssql% on %srvmachine% (%time%)...
call :servicecontrol \\%srvmachine% stop %service_mssql% stopped
...
echo Starting %service_mssql% on %srvmachine% (%time%)...
call :servicecontrol \\%srvmachine% start %service_mssql% running
...
exit /b 0

:servicecontrol
start /wait /b sc %1 %2 %3 > nul
set count=0
:servicewaitstop
for /f "delims=|" %%i in ('sc %1 query %3 ^| findstr /i %4') do goto :eof
set /a count+=1
ping localhost -n 2 > nul
if %count% LEQ 30 goto :servicewaitstop
goto :eof

Реално това емулира net start/stop т.е. работи синхронно и има timeout към 30 сек. Можеш да го направиш да връща error level като вместо goto :eof ползваш exit /b 0 за success и exit /b 1 за грешка. После като го ползваш правиш call :servicecontrol \\XXX.XXX.X.XXX start mysql running && goto :timeout_on_startup

cheers,
</wqw>

[линк]
Отговор
в отговор на wqw #3

Re: start/stop MySQL

Благодаря за идеята. Порових се малко и се оказа, че ако използвам не bat файл(и двете машини - сървъра и там където се правят архивите са Виндовс) за архивирането, а WMI мога да проверя върнатия код при спиране/стартиране на сървис - [линк]
А тъй като мога да използвам и C/C++ или C# с WMI, работата ми се улеснява и няма да чета командите за разни скрипт езици.


... for a brief moment it seemed that rock 'n roll would inherit the earth.
Отговор
в отговор на Beco_ #4

Гледам администратора 1.2.17

Гледам администратора 1.2.17 и сякаш има в него възможност за програмиране на бекъп (без спиране на сървъра).
На моментния ми компютър е забранена, вероятно защото MySQL сървъра е стара версия.
Има и друга възможност, за да не спираш сървъра - може да се изпълни SQL за архивиране - в SQL сев указва папка, която се създава на компютъра на сървъра, след това я ZIP-ваш и я копираш където искаш по мрежата. (Това съм го ползвал, но по спомен, от трите файла на таблиците архивира двете, но третата лесно се възстановява.)
SQL, които ползвам (но може и по свободно :)) са:
LOCK TABLES
FLUSH TABLES
BACKUP TABLE
UNLOCK TABLES

Отговор