@html_student
Молодой и глупый.

Проблема миграции базы данных с mysql 8 на mariaDB 10?

В общем беда такая, есть старый сервер где стоит mysql 8
Там сайт на modx (естественно база раздута до 3 ГБ)

через mysqldump стянул базу, rsync перекинул на другой сервер и тут началось веселье.
Сначала ругался на
ERROR 1273 (HY000) at line 25: Unknown collation: 'utf8mb4_0900_ai_ci'

Решил данный вопрос с помощью
sed -i 's/utf8mb4_0900_ai_ci/utf8mb4_unicode_ci/g'  db.sql


Дальше начинает импортировать и где то в середине говорит
ERROR 1180 (HY000) at line 3141: Got error 1 "Operation not permitted" during COMMIT

место на сервере есть
max_allowed_packet=256M увеличил до 256М (было 16)
Всё равно та вторая ошибка преследует и не дает базу залить в mariadb
  • Вопрос задан
  • 219 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Akina
Сетевой и системный админ, SQL-программист.
Проблема миграции базы данных с mysql 8 на mariaDB 10?

Проблемы ОБЯЗАНЫ БЫТЬ. MySQL и MariaDB расфоркнулись достаточно давно, изменения и дополнения в синтаксисе они не синхронизируют, так что неудивительно, что чем дальше, тем меньше они совместимы. И соответственно всё меньше шансов. что дамп одной СУБД беспроблемно натянется на другую.

Такой перенос надо делать руками.

  1. Выгружаем дамп структуры (без данных) из MySQL.
  2. Экспортируем данные из MySQL-таблиц в CSV.
  3. Правим дамп структуры руками, приводим к требованиям синтаксиса MariaDB.
  4. Загружаем структуру в MariaDB, убеждаемся, что работает. Дропаем.
  5. Делим дамп на 2 части - в одной только таблицы (и другие критично необходимые для создания таблиц объекты), в другой всё остальное (индексы, представления, триггеры-функции и прочая тряхомудия).
  6. Грузим первую часть дампа структуры.
  7. Импортируем данные из CSV в таблицы MariaDB.
  8. Грузим вторую часть дампа структуры.
Ответ написан
ThunderCat
@ThunderCat Куратор тега MySQL
{PHP, MySql, HTML, JS, CSS} developer
Как уже написал Akina, полной совместимости между этими версиями нет, но основной синтаксис без каких-то хитропопых движух по типу хранимок и кастомных/новомодных типов полей вполне совместим.
Что можно попробовать:
1) Добавить в начале дампа игнор внешних ключей, судя по всему у вас в транзакции происходит фигня, но что конкретно ее вызывает не видно, возможно таблица требует ссылки на внешний ключ, который еще отсутствует. В конце стоит снова включить контроль ключей. DISABLE KEYS и SET FOREIGN_KEY_CHECKS=0; в начале, и соответственно включить в конце дампа.
2) Если база большая, а инсерты в дампе не разбиты по строкам на адекватные блоки, можно попробовать убрать транзакции и посмотреть что конкретно не нравится системе. Возможно надо разбить инсерты на более мелкие блоки вставки, а возможно есть действительно несовместимый синтаксис.
3) Если такие танцы не помогают - костыли с методом описанным Akina, через csv и потом ручками связи/ключи/индексы/хранимки.

UPD: Народ говорит что может помочь принудительное указание типа движка таблиц и предварительная конвертация:
The tables must be InnoDB. After converting the tables to InnoDB, the database could be migrated
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы