Форум OlegON > Программы и оборудование для автоматизации торговли > Кассовые программы > Artix

Восстановление БД справочников на кассе

25.09.2020 10:25


29.03.2018 11:26
Vintiknef
 
В Артиксе на кассе есть две основные БД: спровчники (dictionaries) и документы (documents). Инодга при выключении кассы по питанию либо сбоев в жестком диске падает БД справочников, но касса все равно загружается и продолжает работу, только не видит либо товары либо кассиров (наиболее распространенные). При этом в логе кассы есть ошибки про невозможность выполенения select-а из базы.
Есть 2 варианта восстанвления работоспособности:
1. Пересоздание БД
2. Ремонт таблиц.

Пересоздание БД целесообразно, если нет больших справочников товаров, которые необходимо загружать в кассу. Под большими справочниками панимается более 1 млн записей например карт или товаров. Для среднего магазина количество товаров обычно до 50тыс записей и процесс загрузки произойдет достаточно быстро.
Что сделать на кассе:
1. Остановить mysql
service mysql stop
2. Остановить сервисы обмена
service nes stop
service sync-core2 stop
3. Удалить БД
rm -R /linuxcash/cash/data/mysql/dictionaries
4. запустить mysql
service mysql start
5. Запустить скрипт на создание/обновление БД
/linuxcash/cash/data/db/update_db
6. Запустить сервисы обмена
service nes start
service sync-core2 start
7. Сделать полную выгрузку на кассу всех справочников через КС через веб. Проще стать на кассу, поставить галочку "Сезонна касса" и снять ее, согласиться с полной выгрузкой. При необходимости вручную подтолкнуть выгрузку на кассу.


Ремонт таблиц целесообразно делать если плохие каналы связи или большие справочники (например 3 млн дисконтных карт)
Отступление: в БД справочников есть по две таблицы с цифрами в конце названия 1 или 2. В каждой хранится информация, а ротация таблиц происходит только после полного обовления данных в ней. Для простоты просмотра есть вьюхи, например: таблицы tmc1 и tmc2 а вьюха tmc, которая покажет данные из текущей таблицы.
Для восстановления таблиц необходимо :
1. Выяснить какая таблица умерла. Для этого можно смотреть логи mysql /var/log/mysql и логи NES /linuxcash/logs/current/nes*.log
Там будет информация о битых файлах. Чаще всего падают *.frm
2. Остановить сервисы обмена и загрузки в БД
service nes stop
service sync-core2 stop
3. Войти в mysql и удалить таблицу
mysql
use dictionaries;
DROP TABLE roleuser2;
4. Получить структуру таблицы с индексом отличным от упавшей:
show create table roleuser1;
5. Скопировать в блокнот создание таблицы:
CREATE TABLE `roleuser1` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`usercode` varchar(30) NOT NULL,
`rolecode` int(11) NOT NULL,
`rule` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=78 DEFAULT CHARSET=utf8
6. Заменить название таблицы на другой индекс, добавить в конце ";" выполнить:
CREATE TABLE `roleuser2` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`usercode` varchar(30) NOT NULL,
`rolecode` int(11) NOT NULL,
`rule` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=78 DEFAULT CHARSET=utf8;

7. Стартануть сервисы обмена
service nes start
service sync-core2 start
8. Перевыгрузить с кассового сервера необходимые справочники.


P.S. Сам чаще использую первый вариант, т.к. реально проще и быстрее)))
22.08.2018 11:13
Сергей Жидков
 
Поделюсь, как я делаю.
Проверку на битые таблицы делаю командой find /linuxcash/cash/data/mysql/dictionaries -iname '*.myi' -empty -o -iname '*.frm' -empty , она показывает имена таблиц с нулевым размером файлов. Записано в файл скрипта.
Далее, таблицы валятся не как попало, а делятся на три группы - товары, клиенты и скидки, видимо, в зависимости от того, какая операция производилась в момент выключения компа.
Есть у меня скрипт, который я запускаю при каждом обновлении кассы, который дампит структуры таблиц в три файла. Таблицы записывал только те, которые хоть раз умирали.
mysqldump --no-data -u netroot -pnetroot dictionaries barcodes barcodes1 barcodes2 catalog catalog1 catalog2 prices prices1 prices2 tmc tmc1 tmc2 tmccatalog tmccatalog1 tmccatalog2 tmcgroups tmcgroups1 tmcgroups2 tmcsalerestrict tmcsalerestrict1 tmcsalerestrict2 tprices tprices1 tprices2 units units1 units2 > /files/repare/repare-tmc.sql
mysqldump --no-data -u netroot -pnetroot dictionaries card card1 card2 shop shop1 shop2 shoptoshoplabels shoptoshoplabels1 shoptoshoplabels2 discountsystem discountsystem1 discountsystem2 > /files/repare/repare-discount.sql
mysqldump --no-data -u netroot -pnetroot dictionaries mol mol1 mol2 roleuser roleuser1 roleuser2 > /files/repare/repare-role.sql
И скрипты восстановления где удаляются все файлы таблиц из группы и запускается восстановление
rm -f /linuxcash/cash/data/mysql/dictionaries/mol.*
rm -f /linuxcash/cash/data/mysql/dictionaries/mol1.*
rm -f /linuxcash/cash/data/mysql/dictionaries/mol2.*
rm -f /linuxcash/cash/data/mysql/dictionaries/roleuser.*
rm -f /linuxcash/cash/data/mysql/dictionaries/roleuser1.*
rm -f /linuxcash/cash/data/mysql/dictionaries/roleuser2.*
mysql dictionaries < ./repare-role.sql
(остальные две аналогично)
Вся процедура заключается в определении группы таблиц по именам битых файлов и запуске соответствующего скрипта восстановления. Потом перезагрузить кассу и выгрузить с сервера справочники.

У меня прикольный момент был. На одной кассе, с хорошим новым железом постоянно падали товары. Оказалось виноват неисправный монитор. Как!? Не сразу зажигалась подсветка монитора, надо было несколько раз его включить и выключить. Кассиры жестко вырубали бесперебойник.

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