Как перенести базу MySQL на новый сервер без даунтайма — Linux admin blog

Как перенести базу MySQL на новый сервер без даунтайма - Linux admin blog Хостинг

Почему?

😪Мы тщательно прорабатываем каждый фидбек и отвечаем по итогам анализа. Напишите, пожалуйста, как мы сможем улучшить эту статью.

Импорт базы данных с компьютера на сервер.

Перед тем, как приступить к этому шагу, рекомендую ознакомиться со списком наиболее частых ошибок, которые возникают при загрузке баз данных на новый сервер.

Выключение старого сервера

После того как получилась конструкция мастер-мастер, можно перенацелить приложение, изменив его настройки или изменить A запись в DNS.

Когда к старому серверу кончатся обращения (посмотреть — mysql> show full processlist;, можно остановить слейв на новом сервере:

Всё. MySQL теперь работает на новом сервере, приложение ходит в него. Старый можно выключать.

Импорт базы данных mysql через консоль (замена существующей)

Для начала необходимо авторизоваться в командной строке MySQL:

Импорт и создание базы данных mysql через консоль

Выше был описан способ импорта, при котором осуществляется замена таблиц в существующей базе данных. Но такой вариант не подойдёт, если БД изначально не существует. В таком случае потребуется сначала создать новую базу данных, а уже потом импортировать в неё таблицы из резервной копии.

Для начала необходимо авторизоваться в консоли MySQL:

Импорт файла дампа mysql на новый сервер

После того как файл дампа был перенесен, нужно выполнить следующую команду для импорта всех баз данных в MySQL.

Настройка репликации master-master

Когда слейв догнал мастера, идем на старый инстанс и добавляем параметры для репликации, чтобы репликация была master master. Здесь уже не надо указывать MASTER_LOG_POS и MASTER_LOG_FILENAME:

Теперь сервера работают как мастер-мастер. В таком режиме лучше всегда писать только в одну голову. Если писать в обеи — может возникнуть неконсистентность. Мастер-мастер у MySQL работает не всегда хорошо.

Настройка репликации master-slave

Для того чтобы работала репликация в конфиге mysql надо добавить опцию записи binlog-ов. В них будут записываться изменения которые происходят в базе в бинарном формате. После этого эти изменения разъезжаются по репликам и тем самым поддерживается консистентное состояние данных.

Включаем binlog в my.cnf:

  • log-bin — имя файла или путь до файлов с бинлогами. Если версия 5.6 или ниже — нужно указывать имя файла (как выше в примере), бинлоги будут хранится в data-директории. MySQL 5.7 и выше может принимать значения с путем, например /tmp/mysql-binlog
  • expire-logs-days — длина логов в днях. За это время надо поднять и запустить слейв.
  • max-binlog-size — максимальный размер логов. Если достигнут максимум, то логи будут ротироваться, не смотря на expire-logs-days
  • server-id — id-сервера в реплике. должен быть разным на разных серверах

Создадим пользователя, под которым будет происходить репликация и дадим права на репликацию:

Теперь сделаем бэкап базы с помощью innobackupex (это утилита от Percona которая делает бэкап с указанием позиции в bin-логе) в директорию /tmp/mysqlbackup. Здесь инструкция по инсталяции innobackupex.

Можно запускать в докер-контейнере:

В конце вывода будет что-то типа:

Нам нужны filename и position. Запоминаем их, они пригодятся во время развертывания этого бэкапа на новом сервере. Эти значения также есть в файле xtrabackup_binlog_info в папке с бэкапом.

Копируем папку с бэкапом на новый сервер. Например rsync-ом (предварительно надо сделать доступ на новый сервер со старого по ssh):

Перенос баз данных и пользователей mysql на новый сервер

Если нужно переместить все свои БД MySQL, пользователей, разрешения и структуру данных старого сервера на новый, то нужно использовать команду rsync. С ее помощью скопируется весь контент из каталога данных mysql или mariadb на новый сервер.

Перенос дампа mysql на новый сервер

Теперь используйте команду scp, чтобы перенести файл дампа на новый сервер. После подключения база будет перенесена на новый сервер.

Подготовка

Первым делом нужно убедиться, что и на старом, и на новом сервере установлена одинаковая версия MySQL с одинаковым дистрибутивом. Для этого в командной строке выполните:

mysql -V

После этого нужно убедиться, что на новом сервере хватает места для файла дампа старой базы и импортированной базы данных (например, используя команду df).

Проверка импорта

После завершения импорта вы можете проверить базы данных на обоих серверах:

Экспорт базы данных mysql через консоль

Экспорт базы данных выполняется с помощью утилиты MySQLdump:

Экспортируем базу данных mysql в файл дампа

Внимание! Не переносите каталог data на новый сервер и не меняйте внутреннюю структуру БД.

Сначала на старом сервере остановите службу mysql или mariadb, используя команду systemctl:

# systemctl stop mariadb
ИЛИ
# systemctl stop mysql

Затем сделайте дамп ваших баз MySQL с помощью команды mysqldump:

Оцените статью
Хостинги