Задать вопрос
@sevnet
Системный аналитик, бизнес-консультант

Как восстановить базу sql из файлов /var/lib/mysql/* на другом сервере mysql?

Задача сделать копию битой БД mysql.
При попытки создать mysqldump база выдаёт ошибку:
Illegal mix of collations (utf8_unicode_ci,COERCIBLE) and (utf8_general_ci,COERCIBLE) for operation 'locate'

Для создания копии этой базы, был остановлен сервер mysql и база была выкачана просто в виде папки с файлами таблиц из директивы /var/lib/mysql/
Теперь вопрос, как из файлов "холодного резерва" создать sql-файл или как эту базу развернуть на другом сервере mysql?

выкачать битую
  • Вопрос задан
  • 557 просмотров
Подписаться 1 Средний 5 комментариев
Пригласить эксперта
Ответы на вопрос 4
@resmediaru
Full stack WEB Разработчик
Здравствуйте!

Вижу, что вопрос был давно, но я столкнулся с этим сейчас.

Нашел следующее решение через докер:

docker run --name dump_mysql \
  -v "./mysql:/var/lib/mysql" \ # Отправляем локальную папку с настройками в контейнер
  -e MYSQL_ALLOW_EMPTY_PASSWORD=yes \    # Отключаем пароль
  -p 3306:3306 \ # Настраиваем порт
  -d mysql:5.7 --skip-grant-tables  # Пропускаем основные таблицы

# Затем запускаем команду
docker exec -i dump_mysql mysqldump -uroot -p some_bd > some_bd.sql


`some_bd` - ваша база, котрая лежит в локальной папке `./mysql`
`mysql:5.7` - важно, чтобы версия `mysql` билась с той на которой работала папка на сервере
Ответ написан
Комментировать
@Drno
Нужно сделать нормальный дамп.
Либо как сказали в коментах придется вручную вначале создавать все таблицы
Ответ написан
Комментировать
kotomyava
@kotomyava
Системный администратор
Вам нужно установить mysql такой же или выше версии на другом сервере, перенести файлы, удостовериться, что права выставлены правильно и запустить mysql.
Но это вряд-ли поможет вам "починить" базу. И скопируется не только одна база, но и все базы и пользователи.
Ну и снять дамп, точно также, не получится, как на исходном сервере.

Вам на самом деле, надо посмотреть где беда с collations и исправить её.

upd: На всякий случай: я пишу о копировании всей /var/lib/mysql/, не отдельной папки с базой.
Ответ написан
Комментировать
@Akina
Сетевой и системный админ, SQL-программист.
При попытки создать mysqldump база выдаёт ошибку:
Illegal mix of collations (utf8_unicode_ci,COERCIBLE) and (utf8_general_ci,COERCIBLE) for operation 'locate'

Скорректируйте @@collation_connection.

Задача сделать копию битой БД mysql ... как из файлов "холодного резерва" создать sql-файл или как эту базу развернуть на другом сервере mysql?

А смысл? если подключить файлы данных в новом местоположении, ошибки никуда не денутся.

А так - создать таблицы в новом местоположении. Структура должна совпадать с точностью до запятых, и версия сервера тоже. Самое разумное - сделать бэкап чисто структуры, без данных, и развернуть. А потом DISCARD/IMPORT TABLESPACE, либо замена файлов при остановленном сервисе и последующий запуск с лечением и перезаписью метаданных и статистики.
Ответ написан
Ваш ответ на вопрос

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

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