ECS. Ошибка переноса ECSSync: MySQLSyntaxErrorException: Неизвестный столбец «source_md5» в «списке полей»
Summary: Миграция ECSSync завершается мгновенно без переноса каких-либо клипов Centera.
Symptoms
Проблема возникала во время переноса ECSSync из Centera в ECS.
Миграция ECSSync завершается мгновенно, без необходимости переноса каких-либо зажимов Centera.
В файле /var/log/ecssync/ecs-sync.log появляется следующая ошибка:
2020-05-04 03:08:38 WARN [sync-pool-1-t-15] SyncTask: O--! object DNVBT3VHL1NE1e2NMV9CJDMQV5FG41BCFNF5EM0AC0A4KU05821DC failed
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'source_md5' in 'field list'
at sun.reflect.GeneratedConstructorAccessor29.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
... <output truncated> ..
Cause
Ошибка возникает из-за того, что используется таблица базы данных, созданная предыдущей версией ECSSync.
Ниже приведен пример таблицы, созданной в соответствии с последней процедурой. В эту таблицу не входит столбец source_md5:
MariaDB [ecs_sync]> describe <table_name>; +-------------------+---------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------------------+---------------+------+-----+---------+-------+ | source_id | varchar(54) | NO | PRI | NULL | | | target_id | varchar(54) | YES | | NULL | | | is_directory | int(11) | NO | | NULL | | | size | bigint(20) | YES | | NULL | | | mtime | datetime | YES | | NULL | | | status | varchar(32) | NO | MUL | NULL | | | transfer_start | datetime | YES | | NULL | | | transfer_complete | datetime | YES | | NULL | | | verify_start | datetime | YES | | NULL | | | verify_complete | datetime | YES | | NULL | | | retry_count | int(11) | YES | | NULL | | | error_message | varchar(2048) | YES | | NULL | | | is_source_deleted | int(11) | YES | | NULL | | +-------------------+---------------+------+-----+---------+-------+ 13 rows in set (0.00 sec)
В ECSSync версии 3.2.9 в таблицу базы данных добавлен столбец для отслеживания контрольной суммы исходного MD5 (он упоминается в примечаниях к выпуску).
Resolution
После обновления до этой версии необходимо либо создать новую таблицу базы данных, либо добавить соответствующий столбец. Выполните следующие действия в оболочке MySQL:
alter table <table_name> add column source_md5 VARCHAR(32);
Таблица должна выглядеть, как в следующем примере, с дополнительным столбцом:
MariaDB [ecs_sync]> describe <table_name>; +-------------------+---------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------------------+---------------+------+-----+---------+-------+ | source_id | varchar(54) | NO | PRI | NULL | | | target_id | varchar(54) | YES | | NULL | | | is_directory | int(11) | NO | | NULL | | | size | bigint(20) | YES | | NULL | | | mtime | datetime | YES | | NULL | | | status | varchar(32) | NO | MUL | NULL | | | transfer_start | datetime | YES | | NULL | | | transfer_complete | datetime | YES | | NULL | | | verify_start | datetime | YES | | NULL | | | verify_complete | datetime | YES | | NULL | | | retry_count | int(11) | YES | | NULL | | | error_message | varchar(2048) | YES | | NULL | | | is_source_deleted | int(11) | YES | | NULL | | | source_md5 | varchar(32) | YES | | NULL | | +-------------------+---------------+------+-----+---------+-------+ 14 rows in set (0.00 sec) MariaDB [ecs_sync]>
(где <table_name> — имя существующей таблицы).