Общая информация

В этой статье описано, как обновить старую версию EMS (до версии 3.35, в которой использовались базы данных MySQL) до актуальной версии (используется MariaDB) с конвертацией баз данных.

Обновление выполняется на двух серверах:

  • старый сервер — сервер со старой версией EMS, с которого создаётся дамп баз данных;
  • новый сервер — сервер, на который установлена актуальная версия EMS (см. статью «Установка пакета Eltex.EMS актуальной версии»).

Порядок обновления:

  1. создание backup баз данных на старом сервере (шаг 1);
  2. загрузка backup на новом сервере — происходит конвертация баз данных (шаг 2);
  3. устранение типовых ошибок при необходимости (шаг 3).

Примеры в статье приведены для обновления до версии 3.35-13244. Для более новых версий EMS процедура та же.

Шаг 1. Создание backup баз данных

Шаг выполняется на сервере со старой версией EMS.

Перейдите в папку /var/ems-backup и выполните скрипт main-dump-rotate.sh:

cd /var/ems-backup
sudo ./main-dump-rotate.sh 127.0.0.1 3306 javauser javapassword 10
ПараметрПримерОписание
Хост127.0.0.1IP-адрес сервера, где хранятся базы данных; по умолчанию 127.0.0.1
Порт3306порт взаимодействия с MySQL; по умолчанию 3306
Пользовательjavauserлогин для доступа к MySQL
Парольjavapasswordпароль для доступа к MySQL
Срок хранения10количество дней, больше которых предыдущие файлы будут удалены

Скрипт нужно выполнять, указав пользователя javauser. Иначе могут возникнуть ошибки при выгрузке таблиц из баз данных.

Файл будет создан в папке /var/ems-backup/main с именем вида eltex-ems-backup.[дата и время создания].gz. В дамп будут записаны все базы данных EMS и ACS.

Альтернативный метод: mysqldump

В качестве альтернативного метода backup баз EMS можно воспользоваться утилитой mysqldump. Команда для формирования backup EMS-таблиц:

sudo mysqldump -uroot -proot --databases Syslog eltex_alert eltex_ems eltex_ont wireless --lock-tables=false > dump1.sql

Если требуется сделать backup баз ACS, добавьте к перечисленным в команде базам ещё acscmds, acsinf, acscache, acsmain.

В результате выполнения будет сформирован файл dump1.sql, хранящий backup баз данных EMS.

Шаг 2. Загрузка backup и конвертация баз данных

Шаг выполняется на сервере с новой версией EMS.

До версии 3.35 в EMS использовались базы данных MySQL, далее используется MariaDB. Команды для этих баз данных идентичны, но есть проблемы при конвертации для определённых версий — см. шаг 3.

Переместите файл backup с старого сервера на новый сервер, например, в домашнюю папку.

Конвертация происходит путём загрузки backup в актуальную версию баз данных при помощи скрипта ems-restore.sh, находящегося в папке /var/ems-backup/main. Переместите файл backup в папку со скриптом и выполните его:

mv [имя backup] /var/ems-backup/main
cd /var/ems-backup/main
sudo ./ems-restore.sh [имя backup]

Если backup был создан с помощью mysqldump (файл dump1.sql), загрузите таблицы из файла и перезапустите службы:

sudo mysql -uroot -proot < dump1.sql
sudo service mysql restart
sudo service eltex-ems restart

Если после этих действий служба eltex-ems запускается с ошибкой и имеет статус, отличный от running, выполните действия из шага 3 (раздел «Несовпадение версий схем баз данных»).

Шаг 3. Устранение типовых ошибок

После загрузки backup могут возникнуть несколько известных проблем. Для каждой из них ниже приведено решение.

Несовпадение версий схем баз данных

После загрузки backup может возникнуть ошибка расхождения схем заполнения таблиц баз данных. Об этом свидетельствует то, что при попытке запустить апплет служба eltex-ems переходит в статус inactive, а в файле /var/log/eltex-ems/black_box.txt появляется сообщение подобного содержания:

[main] ERROR Kernel Server$1.print(line:371). [ EltexException (EltexException.SERVER) : codeError = 1; msg = 'Invalid version '46' of 'eltex_ems' schema. Should be '55'. Please, update eltex-ems-db packet.'; infoObject = 'null' ]

Ошибка исправляется переустановкой пакета eltex-ems-db.

Для того чтобы понять, какой версии установлены пакеты eltex-ems, используйте команду:

sudo apt list eltex-ems

Вывод:

Listing... Done
eltex-ems/now 3.35-13244 all [installed,local]

В приведённом примере используется версия 3.35-13244.

После определения версии установленного пакета перейдите на сайт eltex-ems-db и найдите необходимую версию. После загрузки пакета на сервер или виртуальную машину установите его:

sudo dpkg -i eltex-ems-db_3.35-13244_all.deb
sudo dpkg -i eltex-ems_3.35-13244_all.deb

Дерево не отображается у пользователей с ролью, отличной от Superuser

При обновлении со старых версий EMS может возникнуть проблема некорректного отображения или полного отсутствия дерева у пользователей с ролью, отличной от Superuser.

Для устранения проблемы на сервере нужно выполнить команды:

sudo mysql -uroot -proot -e "INSERT INTO eltex_ems.DOMAINS VALUES (1,0,'root',NULL,'63a9f0ea7bb98050796b649e85481845','root');"
sudo service eltex-ems restart

После этого в настройках роли в графическом интерфейсе назначьте домен для роли, у которой наблюдается проблема:

Не отображаются alarms (MESSAGE_PARAM4)

Может появиться ошибка, связанная с отсутствием параметра 4, из-за чего не отображаются alarms. Она выглядит в логах следующим образом:

2025-11-19T04:10:48,656 [AlertStoreHandler] ERROR DB EventDB.storeNewAlerts(line:246). SQL error. alerts = [[ AlertEltex : ID=-1; alertType=Trap; code=alert; subcode=SNMP_TRAP; message='Slot 1 PLC8: optical channel 0 has active ONTs'; createDate='19.11.2025 04:10:48'; status=FINISHED; priority=INFO ] [ SimpleSystemAlert : storeToDB=true; alarmFlag=0 ] [ OidAlert : sourceIp=192.168.128.75; sourceName='satt-srb-subotica-olt-3'; sourceId=51; sourceType=MA4000; additionalTrapRuleProcess=false; messageOID=1.3.6.1.4.1.35265.1.22.100.4.14; meanParamText=false; paramText='null'; finishedMode='AUTO'; finishedSource='AUTO'; finishedDate=19.11.2025 04:10:48'; normOids=[1.3.6.1.4.1.35265.1.22.100.3.14]; messageDescription=PLC, slot 1: Channel0 has ONTs now.; birthdayDate=Wed Nov 19 2025 04:10:48 CET ]][ SnmpAlert : requestId=19263418783'; messageId='0'; MessageParam1=0*; MessageParam2=0*; MessageParam3=true; MessageParam4=false; MessageExStatus=''; ProcessDate=''; ProcessUser=''; ProcessMaxDelay=''; FinishedNote=''; AlwaysClosedFlag=0; TransmitToGUI=N'; DeliverToTl1=N ]]
java.sql.BatchUpdateException: Unknown column 'MESSAGE_PARAM4' in 'field list'
    at jdk.internal.reflect.GeneratedConstructorConstructor59.newInstance(Unknown Source) ~[?:?]
    at jdk.internal.reflect.DelegatingConstructorConstructorInvoke59.newInstance(Unknown Source) ~[?:?]
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
    at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:490)
    at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:456)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
    at com.mysql.jdbc.Util.getInstance(Util.java:157)
    at com.mysql.jdbc.SQLError.createBatchUpdateException(SQLError.java:237)
    at com.mysql.jdbc.Statement.executeBatchInternal(Statement.java:2625)
    at com.mysql.jdbc.Statement.executeBatch(Statement.java:2559)
    at com.zaxxer.hikari.pool.ProxyStatement.executeBatch(ProxyStatement.java:813)
    at com.zaxxer.hikari.pool.HikariPreparedStatement.executeBatch(HikariPreparedStatement.java:616)
    at org.eltex.ems.web.server.db.EventDB.storeNewAlerts(EventDB.java:228)
    at org.eltex.ems.web.server.alert.AlertStoreHandler.handle(AlertStoreHandler.java:142)
    at org.eltex.ems.web.common.pool.ObjectHandler.run(ObjectHandler.java:30)
    at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'MESSAGE_PARAM4' in 'field list'
    at jdk.internal.reflect.GeneratedConstructorConstructor60.newInstance(Unknown Source) ~[?:?]
    at jdk.internal.reflect.DelegatingConstructorConstructorInvoke60.newInstance(Unknown Source) ~[?:?]
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
    at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:490)
    at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:456)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
    at com.mysql.jdbc.Util.getInstance(Util.java:157)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)
    at com.mysql.jdbc.MysqlIO.sendErrorPacket(MysqlIO.java:493)
    at com.mysql.jdbc.MysqlIO.access$1400(MysqlIO.java:52)
    at com.mysql.jdbc.MysqlIO$11.run(MysqlIO.java:3100)
    at com.mysql.jdbc.MysqlIO$11.run(MysqlIO.java:3033)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at com.mysql.jdbc.MysqlIO.recvErrorPacket(MysqlIO.java:3038)
    at com.mysql.jdbc.MysqlIO.access$1200(MysqlIO.java:52)
    at com.mysql.jdbc.MysqlIO.changeUser(MysqlIO.java:3094)
    at com.mysql.jdbc.MysqlIO.handshake(MysqlIO.java:1209)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2620)
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:719)
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
    ... 18 more

Устранить такую проблему можно выполнением команды в mysql:

sudo mysql -e "alter table eltex_alert.ALERT_TABLE add column MESSAGE_PARAM4 int(10);"

После этого необходимо перезагрузить сервис eltex-ems.

Проверка работы

В качестве результата ожидается корректный старт службы eltex-ems со статусом running. Проверьте работу EMS в графическом интерфейсе: дерево устройств загружается и отображается.

См. также

  • Нет меток