[ОТВЕТИТЬ]
13.06.2013 11:38
Aleks_Str
 
Надо "переключать" СГО с порта на порт раз в Х минут.
Видится следующее: раз в Х минут (шедулер) запускаем батник следующего вида:
1. Стоп УКМ
2. Читать порт
3. Если порт=YYY, то присвоить порт ZZZ, в противном случае - присвоить YYY.
4. Старт УКМ.

Вопрос: как в BAT-файл получить значение из запроса
select НОМЕР_ПОРТА from НАСТРОЙКИ_СГО
и потом записать
update НАСТРОЙКИ_СГО set НОМЕР_ПОРТА=YYY (ZZZ)
13.06.2013 14:10
whitewizard
 
паранойя - это здорово :) но не проще ли порт ставить, например 50000+текущая минута или типа того
13.06.2013 14:39
Little
 
Вот только не пойму, в чем сокральный смысл сего действия ?!
13.06.2013 14:41
Aleks_Str
 
Не, дело не в паранойе.
При нашем количестве магазинов (более 80) СГО только и делает, что принимает от них (от магазинов) информацию (в логах только импорт-экспорт с/на магазины).
А в БД для обмена с внешней системой чеки выгружаются (стандарный экспорт 4) весьма редко. Задержка в появлении чеков в БД для обмена доходит до 4-5 часов, а это уже критично.
Вот и хочу первую половину магазинов натравить на порт СГО YYY, а вторую - ZZZ.
А потом раз ХХХ минут переключать порт СГО на самом СГО. Расчитываю, что он (СГО) будет успевать не только "принимать" чеки от СМ-ов, но и выгружать их в БД для обмена с внешней системой.
13.06.2013 14:45
whitewizard
 
как то кривенько всё выходит.
ну и переключай порт каждый интервал времени.
13.06.2013 15:04
Aleks_Str
 
хочется автоматически это делать, не используя мускулы пальцев людев.
13.06.2013 15:41
whitewizard
 
вот это сохранит в файл порт сервера:
Код:
mysql -uroot -pCtHDbCGK.C --database=ukmserver -e"select value from local_server_param where id='server_port'" > port.txt
а если запрос поменять на update, то и менять данные сможешь.
только я так опнимаю, после смены порта надо будет службу "УКМ сервер" перегружать.
13.06.2013 15:47
whitewizard
 
либо создай заранее файлы со скриптом и запускай батник такого вида:
Код:
C:\MySQL\bin\MySQL.exe -uroot -pCtHDbCGK.C ukmserver < port.sql > log.log
а в port.sql будет
Код:
update local_server_param set value='порт' where id='server_port';
вроде так
13.06.2013 16:22
Aleks_Str
 
Ага.
Значит будем "курить" инет о анализе в батнике содержимого текстового файла.
Спасибо за толчок в нужном направлении...
Как сделаю - скину для примера....
13.06.2013 17:14
Павел Сосновских
 
а о "переменных" в mysql не слышал никто что ли?
set @port=0;
select value from local_server_param where id='server_port' into @port;

еще, я бы не полагался на виндовый шедуллер
погуглить лучше mysql'ные event'ы
13.06.2013 17:17
whitewizard
 
повторюсь, но вообще не вижу смысла проверять порт.
может разделишь магазины на два сетевых интерфейса, поднимешь версию мускула и добавишь ему памяти?
13.06.2013 17:57
Aligator
 
Может действительно нужно решать проблему а не лепить заплатки.
Были у одного клиента нашего проблемы тоже с обменом касс и подчиненных серверов с СГО...решилось переводом на х64 мускуля и выделением ему 12 ГБ оперативы-после этого вот уже пол года ни одного зависания и проблемы с обменами, выгрузками...как-то так.
13.06.2013 18:00
whitewizard
 
ага. 64бита и гигабайт 16 с сетевой интеловской думаю решит все проблемы
и веники не самые отстойные
14.06.2013 10:49
Onesoft
 
1. Обработка запросов mysql.exe простейшим одноклеточным батником:

Код:
@Echo Off
Set HOSTNAME=hOstnAmE
Set USERNAME=UsErnAmE
Set PASSWORD=pAsswOrd

For /F "Tokens=1,2 Delims=	" %%a In ('C:\MySQL\bin\mysql.exe -h%HOSTNAME% -u%USERNAME% -p%PASSWORD% --column-names^=false --table^=false -Dukmserver -e"select 'response',value FROM local_server_param WHERE id='server_port'"') Do If "%%~a"=="response" (
  Echo Server port is: %%~b
  Set PORT=%%~b
)
Set NEWPORT=
If "%PORT%"=="10000" Set NEWPORT=20000
If "%PORT%"=="20000" Set NEWPORT=10000
If Not "%NEWPORT%"=="" (
  C:\MySQL\bin\mysql.exe -h%HOSTNAME% -u%USERNAME% -p%PASSWORD% -Dukmserver -vvv -e"UPDATE local_server_param SET value=%NEWPORT% WHERE id='server_port'" >>%%~dp0log.log 2>&1
  REM restart ukmservice here
)
Pause

После слова "Delims=" стоит символ табуляции.


2.Замена порта в одно действие ("триггер"), например, попеременно 10000 и 20000:

UPDATE local_server_param SET value=ELT(value/10000,20000,10000) WHERE id='server_port';

Можно это делать в батнике, а можно и в events, который стал доступным начиная с версии 5.1 (кстати, мы уже вовсю 5.6.11 юзаем на СГО, в понедельник обновляем до 5.6.12).

Каждое выполнение запроса будет менять номер порта с 10000 на 20000 и 20000 на 10000. Останется перезапустить ukmservice.
Но рестарт ukmservice - это плохо..
Опции темы


Часовой пояс GMT +3, время: 23:48.

 

Форум сделан на основе vBulletin®
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd. Перевод: zCarot и OlegON
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.