Шпаргалка: Master-slave репликация MySQL 5.7

Введение

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

SET GLOBAL read_only = ON;  # вкл только чтение
SET GLOBAL read_only = OFF; # выкл только чтение

так и эти:

FLUSH TABLES WITH READ LOCK; # вкл только чтение
UNLOCK TABLES; # выкл только чтение

Либо импортирование БД из дампа на слейве можно выполнить и так:

$ mysql -u root -p
> USE mydb;
> SOURCE ~/mydb.sql

и эдак:

$ mysql -u root -p mydb < mydb.sql

Я считаю так. Чтобы выполнить задачу по сабжу, особо можешь не заморачиваться — главное понимать что происходит в целом. Но фундаментальное понимание сути этих команд будет только в плюс.

Здесь же я собрал универсальный рецепт как поднять и восстановить репликацию. Поехали.

DavFS2. Куда утекает свободное место? Got error 28 from storage engine

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

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

Однажды утром, после свежего бекапа, MySQL стал падать с ошибкой:

Got error 28 from storage engine

Эта ошибка возникает во время выборки записей из БД. Поскольку выборка хранится в кеше на диске и в этот момент возникает ошибка, значит что-то с ним не так. Самое банальное — закончилось место. По факту так и оказалось. MySQL-у просто негде было хранить файлы кеша.

Но как? На сервере свежий бекап только один, и его размер несоизмеримо меньше, чем сейчас должно быть свободного места.
Начал поиски обжоры.

Резервное копирование базы данных на Cron с выгрузкой в облако на примере Яндекс.Диск. Версия 1.

Привет.

Тут я расскажу о самом простом способе создания бекапов БД на сервере, о выгрузке их в Яндекс.Диск. Я написал скрипт, который всё это выполняет.

Он приведён поэтапно, можешь скопировать пункты 4.1-4.5, убрав оттуда заголовки, и получишь готовый скрипт. Или можешь скачать, ссылка будет в конце. А лучше прочитать пост и вникнуть в суть происходящего.

ОС на сервере — CentOS 6.7
Версия СУБД — MySQL 5.5 (да, знаю, старая)