ЗАКРЫТЬ
Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация


Наши новости:

11-апр
02-дек
17-апр
30-дек


Раскрутка Counter-Strike 1.6

MySQL Backup mailto

, Создание бекапов с автоматической отправкой на почту.
Статус пользователя oxoTHuk.
сообщение 18.1.2015, 16:56
Сообщение #1


Иконка группы

Стаж: 12 лет

Сообщений: 879
Благодарностей: 515
Полезность: 867

Статья только косвенно относится к hlds, но думаю пригодится многим.
Да слово "Статья" тут наверно не уместно, скорее небольшой скрипт и описание как пользоваться =).
Итак, поехали.
Задача: есть MySQL база данных, нужно сделать так, чтобы по расписанию раз в сутки делался backup и отправлялся на почту, дабы сохранить данные при потере сервера(был подобный случай, поэтому пришлось думать на эту тему).
Реализация: тут все просто, для отправки письма будем использовать mutt, для постановки задания по расписанию обычный crontab, ну и дамп мы будем делать с помощью mysqldump.
Как видите, ничего страшного, все стандартное.
Для начала обновимся:
Код
apt-get update
apt-get upgrade

Далее поставим mutt, если его нет:
Код
apt-get install mutt

Далее создадим файл mysql_dump_2email.sh, у меня он находится в /home/backups/.
Запишем в него следующее:
Код:
#! /bin/sh

set -e
MYSQL_REMOTE_HOST=rem.db.host #Удаленный хост, куда будем разворачивать на бекап
MYSQL_USER=root #Логин локального пользователя MySQL
MYSQL_USER_RES=root #Логин удаленного пользователя MySQL
MYSQL_PASS=yourpasswd #Пароль локального пользователя MySQL
MYSQL_PASS_RES=yourpasswd #Пароль удаленного пользователя MySQL
DATABASES="table_name" #Имя базы данных
TABLES="aes_stats amx_admins_servers amx_amxadmins amx_bans amx_bans_edit amx_serverinfo amx_webadmins pay" #Таблички, которые будем восстанавливать(jino.ru не позволяет восстанавливать дамп всей БД, нужно указывать нужные таблицы)
DEL_QUERY="DELETE FROM $DATABASES.aes_stats WHERE name LIKE '%Player%' OR name LIKE '%iMonster%' OR name LIKE '%Strikes%' OR name LIKE '%unnamed%' OR name LIKE '%[All-CS.Net.Ru] User%' OR name LIKE '%[HDmonitor.ru]^User%' OR name LIKE '%[16cs-client.ru] SkyNet 2014%' OR name LIKE '%[16cs-client.ru] Extended%' OR name LIKE '%[BM] Pro Gamer%' OR name LIKE '%[BM] Pro Gamer%' OR name REGEXP '^[0-9]+$' OR name REGEXP '^.{0,3}$';" #Запрос, к локальной БД, который будем выполнять перед созданием бекапа

MAIL_TO="test@example.ru,test@example1.ru,test1@example.ru" #Список почтовых адресов, куда будет выслана база данных

cd /tmp
(mysql -u$MYSQL_USER -p$MYSQL_PASS --execute="$DEL_QUERY";) && \
(mysqldump -u$MYSQL_USER -p$MYSQL_PASS $DATABASES $TABLES | gzip -9 - > dump.sql.gz) && \
(echo | mutt -s "[DB BACKUP]" $MAIL_TO -a dump.sql.gz) && \
(gunzip < dump.sql.gz | mysql -h$MYSQL_REMOTE_HOST -u$MYSQL_USER_RES -p$MYSQL_PASS_RES $DATABASES)
rm -f dump.sql.gz

Даем права на исполнение:
Код
chmod -x mysql_dump_2email.sh

Теперь, если все настроили, пробуем:
Код
./mysql_dump_2email.sh

Проверяем есть ли на почте дамп, если есть, зашиваем это дело в crontab:
Код
crontab -e

Туда дописываем:
Код
###MySQL Backups###
0 5  * * *   '/home/backups/mysql_dump_2email.sh' > /dev/null 2>&1
###End MySQL Backups###

Теперь ежедневно в 5 утра, по времени сервера, будет формироваться бекап базы и отправляться вам на почту без каких-либо манипуляций.
Все гениальное просто, никаких лишних приблуд и т.д.
В дальнейшем планирую дописать скрипт, чтобы по мимо отправки на почту, он заливался на удаленную БД, резервную, так сказать, и если что-то случается с этим VDS, можно было бы просто переключить на резервную БД.

Credits:
  • спасибо гуглу за то, что он есть
  • спасибо вам за конструктивную критику и предложения для дополнений
  • спасибо Fire, подсказал про то, что я забыл chmod


P.S.: проверял на Gmail, Yandex и Mail[dot]ru:
  • Gmail - в спаме
  • Yandex - нормально приходит
  • Mail[dot]ru - не приходит вообще


Версионностью не пахнет, тут просто буду дописывать то, что добавлял
Cangelog o0:
  • Предзапрос. Теперь перед созданием, можно избавиться от всякого мусора и таблицах.
  • Не помню было ли в прошлой версии, но теперь все сжимается gzip`ом
  • Восстановление сделанного дампа на другой MySQL сервер


P.S.: Админы, кто там был против обновления?! Я опять вам форум поломал =))) (9-11 строки в теге PAWN не то содержат совсем)
Вот строка: MAIL_TO="test@example.ru,test1@example.ru, test2@example.ru" #Адреса, куда будем высылать дампы
А все CDATA удалить бы.

Отредактировал: oxoTHuk., - 25.1.2015, 17:57
Прикрепленные файлы:
Прикрепленный файл  _________________________.txt ( 1,89 килобайт ) Кол-во скачиваний: 4
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 3 раз
   Цитировать сообщение
Статус пользователя Fire
сообщение 18.1.2015, 17:25
Сообщение #2


Иконка группы

Стаж: 12 лет

Сообщений: 2197
Благодарностей: 2222
Полезность: 962

1) Накой upgrade?
2) chmod +x забыл.


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя oxoTHuk.
сообщение 18.1.2015, 17:30
Сообщение #3


Иконка группы

Стаж: 12 лет

Сообщений: 879
Благодарностей: 515
Полезность: 867

Да, chmod забыл =)
а upgrade привычка, перед тем, как что-то ставить, всегда делаю апгрегйд\апдейт
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя The_Razer
сообщение 18.1.2015, 17:30
Сообщение #4
Стаж: 13 лет

Сообщений: 297
Благодарностей: 48
Полезность: 34

Я бы просто на какое-нибудь облако клал. Типо Яндекс.Диска. Там webdav насколько я помню.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя oxoTHuk.
сообщение 18.1.2015, 17:40
Сообщение #5


Иконка группы

Стаж: 12 лет

Сообщений: 879
Благодарностей: 515
Полезность: 867

upd: добавил chmod

The_Razer, по мойму проще напочту все слать, а еще если будет паралельно восстанавливать на резервный сервер, вообще красота будет

Отредактировал: oxoTHuk., - 18.1.2015, 17:43
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя oxoTHuk.
сообщение 18.1.2015, 19:11
Сообщение #6


Иконка группы

Стаж: 12 лет

Сообщений: 879
Благодарностей: 515
Полезность: 867

Решил не откладывать в долгий ящик и сделать восстановление на удаленный хост, но тут же столкнулся с проблемой
Код:
 root@burikovs:/tmp# mysql -P 3306 -h HOST -u USERNAME -p PASS
ERROR 1045 (28000): Access denied for user 'USERNAME '@'82.146.45.56' (using password: YES)

Причем как видно из ошибки, он даже не пытается уйти с локалхоста (82.146.45.56 - ip тачки, с которой выполняется запрос).
На удаленке, куда пытаюсь совершить коннект, доступ открыл.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Akinach
сообщение 18.1.2015, 19:16
Сообщение #7
Стаж: 6 лет 6 месяцев

Сообщений: 396
Благодарностей: 325
Полезность: < 0

Цитата(oxoTHuk. @ 18.1.2015, 20:11) *
Решил не откладывать в долгий ящик и сделать восстановление на удаленный хост, но тут же столкнулся с проблемой
Код:
 root@burikovs:/tmp# mysql -P 3306 -h HOST -u USERNAME -p PASS
ERROR 1045 (28000): Access denied for user 'USERNAME '@'82.146.45.56' (using password: YES)

Причем как видно из ошибки, он даже не пытается уйти с локалхоста (82.146.45.56 - ip тачки, с которой выполняется запрос).
На удаленке, куда пытаюсь совершить коннект, доступ открыл.

не?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя oxoTHuk.
сообщение 18.1.2015, 19:27
Сообщение #8


Иконка группы

Стаж: 12 лет

Сообщений: 879
Благодарностей: 515
Полезность: 867

Не, мне нужно с VDS подключить мускуль на другую удаленную машину.
А ты мне предлагаешь восстановить утерянный рут пароль =)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Fire
сообщение 18.1.2015, 19:50
Сообщение #9


Иконка группы

Стаж: 12 лет

Сообщений: 2197
Благодарностей: 2222
Полезность: 962

Цитата(oxoTHuk. @ 18.1.2015, 20:11) *
Решил не откладывать в долгий ящик и сделать восстановление на удаленный хост, но тут же столкнулся с проблемой
Код:
 root@burikovs:/tmp# mysql -P 3306 -h HOST -u USERNAME -p PASS
ERROR 1045 (28000): Access denied for user 'USERNAME '@'82.146.45.56' (using password: YES)

Причем как видно из ошибки, он даже не пытается уйти с локалхоста (82.146.45.56 - ip тачки, с которой выполняется запрос).
На удаленке, куда пытаюсь совершить коннект, доступ открыл.

what?
Оно очень даже уходит с тачки и стучится на сервер, другое дело, что сервер не дает доступ, мотивируя это тем, что для хоста 82.146.45.56 доступ закрыт.
У mysql юзера под которым ломишься, host должен быть % -- что означает любой.


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя oxoTHuk.
сообщение 18.1.2015, 20:08
Сообщение #10


Иконка группы

Стаж: 12 лет

Сообщений: 879
Благодарностей: 515
Полезность: 867

Да, тупанул, но как-бы любой не обязательно, главное чтобы на удаленке был доступ для хоста 82.146.45.56.
А он есть, но не пускает всеравно
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Fire
сообщение 18.1.2015, 20:11
Сообщение #11


Иконка группы

Стаж: 12 лет

Сообщений: 2197
Благодарностей: 2222
Полезность: 962

Цитата(oxoTHuk. @ 18.1.2015, 21:08) *
Да, тупанул, но как-бы любой не обязательно, главное чтобы на удаленке был доступ для хоста 82.146.45.56.
А он есть, но не пускает всеравно

Данные в лс, гляну.


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя oxoTHuk.
сообщение 25.1.2015, 17:45
Сообщение #12


Иконка группы

Стаж: 12 лет

Сообщений: 879
Благодарностей: 515
Полезность: 867

Fire, прошу прощения, затупил, забыл что менял пароль на той БД =)

2all заапдейтил скрипт, описание добавлю в первый пост.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: