Как перенести большую базу на другой сервер без простоев?

Нужно перенести сайт на другой сервер, но проблема в том, если делать mysqldump на изначальном сервере, потом передавать его на новый сервер, потом на новом сервере этот sql файл загружать в базу, то это может занять минимум пару часов, в течении которых сайт будет недоступен. Как это можно сделать быстрее? sql файл бекапа весит больше 12ГБ
Рабочий ли вариант если просто через rsync передать всю папку /var/lib/mysql?
Еще вариант с репликацией, но насколько я понял всё равно базу нужно блокировать на момент дампа, а это тоже какое-то время
  • Вопрос задан
  • 1825 просмотров
Решения вопроса 3
ky0
@ky0
Миллиардер, филантроп, патологический лгун
С минимальным простоем - да, репликация. Выключаете на старом месте, включаете на новом. Блокировать ничего не нужно.
Ответ написан
@Akina
Сетевой и системный админ, SQL-программист.
Рабочий ли вариант если просто через rsync передать всю папку /var/lib/mysql?

Просто перенос файлов рабочей БД окончится тем, что файлы есть, а базы нет, потому что неоткуда взяться метаданным в системной базе данных. Вернее, всё ещё забавнее - базы вроде бы и нет (USE приводит к ошибке "БД не существует"), но её нельзя создать, потому что она есть. И то же самое с таблицами (SELECT/DROP/прочее нельзя, потому что таблицы нет, CREATE нельзя, потому что она есть).

Метод сработает, если переносить все БД сразу, включая служебные. Но требуется точное соответствие исходной и конечной конфигураций - начиная с версии и сборки MySQL и кончая именами каталогов и именами/паролями учётных записей в операционной системе. Плюс перегенерация и переподключение сертификатов.

Еще вариант с репликацией, но насколько я понял всё равно базу нужно блокировать на момент дампа, а это тоже какое-то время

Решений без блокирования практически не существует. Нет, можно наколхозить реальное решение, которое обойдётся вообще без остановки, я даже представляю как именно (FEDERATED ENGINE + triggers), но подробно рассказывать не буду - для её реализации нужны достаточная квалификация и опыт, на одних советах шанс на удачу невелик, скорее всё поломается.

Есть вполне себе документированные способы: Copying MySQL Databases to Another Machine. Особенно последний из описанных. Он предполагает минимальное время простоя при использовании штатных средств.
Ответ написан
Комментировать
alexey-m-ukolov
@alexey-m-ukolov Куратор тега MySQL
Рабочий ли вариант если просто через rsync передать всю папку /var/lib/mysql?
Если другая система аналогична первой и совпадают версии MySQL (вплоть до патча), то есть вероятность, что заведётся. На первом сервере всё равно при этом надо будет остановить MySQL.

Я так делал, когда нужно было внезапно перенести БД размером больше терабайта, но у меня были докеры, содержимое которых куда проще воспроизвестию
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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