Короткий пост о важном — как в проекте работать с деньгами, датами и перечислимыми типами.
Это уже давно не секрет для опытных разработчиков. Но и им иногда нужно об этом вспомнить, а новички до этих простых истин ещё могли не дойти в силу опыта.
Короткий пост о важном — как в проекте работать с деньгами, датами и перечислимыми типами.
Это уже давно не секрет для опытных разработчиков. Но и им иногда нужно об этом вспомнить, а новички до этих простых истин ещё могли не дойти в силу опыта.
Это мой рецепт, который я использую на проектах. В сети можно найти разные другие инструкции. Но они различаются только командами, которые по сути своей выполняют одно и то же. Например, чтобы заблокировать запись в БД, можно использовать как эти команды:
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
Я считаю так. Чтобы выполнить задачу по сабжу, особо можешь не заморачиваться — главное понимать что происходит в целом. Но фундаментальное понимание сути этих команд будет только в плюс.
Здесь же я собрал универсальный рецепт как поднять и восстановить репликацию. Поехали.
На сервере стало уменьшаться свободное место. Какое-то время не придавал этому значения, т.к. чётко знал, что у меня дважды в день работает скрипт автоматического бекапа базы данных с выгрузкой в облако.
Хранить бекапы в том же месте, что резервировалось — глупый риск. Поэтому я просто чистил устаревше архивы на сервере ручками раз в несколько дней, т.к. они уже есть в облаке.
Однажды утром, после свежего бекапа, MySQL стал падать с ошибкой:
Got error 28 from storage engine
Эта ошибка возникает во время выборки записей из БД. Поскольку выборка хранится в кеше на диске и в этот момент возникает ошибка, значит что-то с ним не так. Самое банальное — закончилось место. По факту так и оказалось. MySQL-у просто негде было хранить файлы кеша.
Но как? На сервере свежий бекап только один, и его размер несоизмеримо меньше, чем сейчас должно быть свободного места.
Начал поиски обжоры.
Привет.
Тут я расскажу о самом простом способе создания бекапов БД на сервере, о выгрузке их в Яндекс.Диск. Я написал скрипт, который всё это выполняет.
Он приведён поэтапно, можешь скопировать пункты 4.1-4.5, убрав оттуда заголовки, и получишь готовый скрипт. Или можешь скачать, ссылка будет в конце. А лучше прочитать пост и вникнуть в суть происходящего.
ОС на сервере — CentOS 6.7
Версия СУБД — MySQL 5.5 (да, знаю, старая)