@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
  • Вопрос задан
  • 144 просмотра
Пригласить эксперта
Ответы на вопрос 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
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы