Краткое описание

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

Первый шаг создание backup баз данных:

Этот шаг выполняется на сервере с устаревшей версией EMS

Для создания backup баз данных перейдите в папку /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.1 - ip адрес сервера где хранятся базы данных(по умолчанию 127.0.0.1)

3306 - порт взаимодействия с mysql

javauser/javapassword - login и пароль для доступа к mysql

10 - количество дней больше которых предыдущие файлы будут удалены

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

файл будет создан в папке /var/ems-backup/main с именем:

eltex-ems-backup.[дата и время создания].gz

В дамп будет записаны все базы данных EMS и ACS

Шаг второй загрузка и конвертация баз данных:

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

до версии 3.35 в EMS использовались базы данных mysql, далее используется mariadb. Команды для этих баз данных идентичны, но есть проблемы при конвертации для определенных версий.

Конвертация происходит путем загрузки 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 может возникнуть ошибка расхождения схем заполнения таблиц баз данных. об этом может соответствовать то, что при попытке запустить апплет сервис 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

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

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

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

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


Может появится ошибка связанная с отсутствием параметра 4 из-за чего не отображаются alarm:

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 04:10:48 CET 2025 ][ SnmpAlert : requestId=932715204; trapUpTime=2533418783'; messageId='0'; MessageParam1=0*; MessageParam2=0; MessageParam3=1; isMeanParam3=true; MessageParam4=0; isMeanParam4=false; MessageExState='0'; ProcessDate=''; ProcessUser='null'; ProcessMaxDelay='0'; FinishedNote='null'; AlwaysClosedFlag=false; TransmitToGUI=N'; DeliverToTl1=N ]]
java.sql.BatchUpdateException: Unknown column 'MESSAGE_PARAM4' in 'field list'
    at jdk.internal.reflect.GeneratedConstructorAccessor59.newInstance(Unknown Source) ~[?:?]
    at jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:?]
    at java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500) ~[?:?]
    at java.lang.reflect.Constructor.newInstance(Constructor.java:481) ~[?:?]
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:403) ~[mysql-connector-java-5.1.49.jar!/:5.1.49]
    at com.mysql.jdbc.Util.getInstance(Util.java:386) ~[mysql-connector-java-5.1.49.jar!/:5.1.49]
    at com.mysql.jdbc.SQLError.createBatchUpdateException(SQLError.java:1154) ~[mysql-connector-java-5.1.49.jar!/:5.1.49]
    at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:1835) ~[mysql-connector-java-5.1.49.jar!/:5.1.49]
    at com.mysql.jdbc.PreparedStatement.executeBatchInternal(PreparedStatement.java:1319) ~[mysql-connector-java-5.1.49.jar!/:5.1.49]
    at com.mysql.jdbc.StatementImpl.executeBatch(StatementImpl.java:954) ~[mysql-connector-java-5.1.49.jar!/:5.1.49]
    at com.zaxxer.hikari.pool.ProxyStatement.executeBatch(ProxyStatement.java:128) ~[HikariCP-3.4.5.jar!/:?]
    at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeBatch(HikariProxyPreparedStatement.java) ~[HikariCP-3.4.5.jar!/:?]
    at org.eltex.ems.web.server.db.EventDB.storeNewAlerts(EventDB.java:228) ~[classes!/:3.41-16939 (18.11.25 13:32:29)]
    at org.eltex.ems.web.server.alert.AlertStoreHandler.handle(AlertStoreHandler.java:142) ~[classes!/:3.41-16939 (18.11.25 13:32:29)]
    at org.eltex.ems.web.common.pool.ObjectHandler.run(ObjectHandler.java:371) ~[ems_common.jar!/:?]
    at java.lang.Thread.run(Thread.java:840) ~[?:?]
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'MESSAGE_PARAM4' in 'field list'
    at jdk.internal.reflect.GeneratedConstructorAccessor58.newInstance(Unknown Source) ~[?:?]
    at jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:?]
    at java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500) ~[?:?]
    at java.lang.reflect.Constructor.newInstance(Constructor.java:481) ~[?:?]
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:403) ~[mysql-connector-java-5.1.49.jar!/:5.1.49]
    at com.mysql.jdbc.Util.getInstance(Util.java:386) ~[mysql-connector-java-5.1.49.jar!/:5.1.49]
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:944) ~[mysql-connector-java-5.1.49.jar!/:5.1.49]
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3933) ~[mysql-connector-java-5.1.49.jar!/:5.1.49]
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3869) ~[mysql-connector-java-5.1.49.jar!/:5.1.49]
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2524) ~[mysql-connector-java-5.1.49.jar!/:5.1.49]
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2675) ~[mysql-connector-java-5.1.49.jar!/:5.1.49]
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2465) ~[mysql-connector-java-5.1.49.jar!/:5.1.49]
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1915) ~[mysql-connector-java-5.1.49.jar!/:5.1.49]
    at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2136) ~[mysql-connector-java-5.1.49.jar!/:5.1.49]
    at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:1813) ~[mysql-connector-java-5.1.49.jar!/:5.1.49]
    ... 8 more

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

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

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

Backup с помощью mysqldump

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

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

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

В результате его выполнения будет сформирован файл, хранящий бекап баз данных EMS dump1.sql. Его необходимо переместить в любую директорию на новом сервере. К примеру в домашнюю папку.
Затем на новом сервере нужно будет загрузить таблицы из файла dump1.sql и перезапустить службы eltex-ems и mysql :

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


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

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

В качестве резльтата ожидается корректный старт службы eltex-ems с последущющей проверкой с помощью аплета.
 

  • Нет меток