У меня также были проблемы с блокировкой MySQL 5.6, даже когда используется ALGORITHM=INPLACE, LOCK=NONE;
.Сначала я бы проверил следующее:
Проверить ограничения для таблицы
Предложение ALTER TABLE LOCK = NONE не разрешено, если есть ON ... CASCADEили ON ... SET NULL ограничения для таблицы.
Источник: https://dev.mysql.com/doc/refman/5.6/en/innodb-online-ddl-limitations.html
Имеет ли таблица отношение внешнего ключа?
Операция оперативного DDL для таблицы в отношении внешнего ключа не ожидает транзакции, выполняющейся для другой таблицы в отношении внешнего ключа, для подтверждения или отката.Транзакция содержит исключительную блокировку метаданных для таблицы, которую она обновляет, и разделяемую блокировку метаданных для таблицы, связанной с внешним ключом (требуется для проверки внешнего ключа).Совместно используемая блокировка метаданных разрешает выполнение оперативной операции DDL, но блокирует ее на заключительном этапе, когда для обновления определения таблицы требуется исключительная блокировка метаданных.Этот сценарий может привести к взаимоблокировкам, так как другие транзакции ожидают завершения операции DDL в режиме онлайн.
Источник: https://dev.mysql.com/doc/refman/5.6/en/innodb-online-ddl-limitations.html
И прочтите о блокировке метаданных здесь: https://dev.mysql.com/doc/refman/5.6/en/metadata-locking.html
Сначала измените таблицы из старого формата времени
Если вы создали таблицы до MySQL 5.6 с полями DATETIME или TIMESTAMP, их необходимо обновить до версии MySQL 5.6 newformat.
Таблицы InnoDB, созданные до MySQL 5.6, не поддерживают ALTER TABLE ... ALGORITHM = INPLACE для таблиц, которые содержат временные столбцы (DATE, DATETIME или TIMESTAMP) и не были перестроены с использованием ALTER TABLE... АЛГОРИТМ = КОПИЯ.В этом случае операция ALTER TABLE ... ALGORITHM = INPLACE возвращает следующую ошибку:
ОШИБКА 1846 (0A000): ALGORITHM = INPLACE не поддерживается.Причина: невозможно изменить тип столбца INPLACE.Попробуйте ALGORITHM = COPY.
Источник: https://dev.mysql.com/doc/refman/5.6/en/innodb-online-ddl-limitations.html
Проверьте, имеет ли таблица Разделение
Разделение изменяет, как изменитьприменяются правила столаПроверьте статус разделения таблицы
show table status;
Ищите «Двигатель», не равный InnoDB
Источники: https://dev.mysql.com/doc/refman/5.6/en/innodb-online-ddl-operations.html#online-ddl-partitioning
Наконец, какРик Джеймс в своем ответе упомянул, что обновление с 5.6 до 8.0 может быть вариантом, поскольку оно обеспечивает другие улучшения.