Резервное копирование MySQL через SSH

()

Хостер автора этих строк разрешает обращаться к MySQL-серверу только с localhost (что в принципе правильно). Однако не смотря на то что в списке предоставляемых услуг присутствует ежедневный бэкап, автору этих строк хотелось бы иметь бэкап базы данных и у себя на компьютере.

Серьёзную помощь в решении этой задачи оказывает предоставляемый хостером доступ к серверу по SSH. Значит первым шагом нужно настроить авторизацию на сервере без пароля. Решение этой задачи уже описывалось здесь.

Далее нужно написать скрипт, который на удалённом сервере сделает дамп базы (командой mysqldump) и потом его скачает на локальную машину. Скрипт для решения этой задачи будет выглядеть примерно так:

#1/bin/sh

BACKUPFILE=backup-`date +%Y-%m-%d`.sql.gz

ssh user@somehost.com "mysqldump -u my_user -pMyp4ssw0rd db_name | gzip > ~/${BACKUPFILE} "
scp user@somehost.com:"~/${BACKUPFILE}" ~/backups/

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

#1/bin/sh

BACKUPFILE=~/backups/backup-`date +%Y-%m-%d`.sql.gz

ssh user@somehost.com 'mysqldump -u my_user -pMyp4ssw0rd db_name | gzip' > ~/${BACKUPFILE}

Работает скрипт следующим образом: команда mysqldump отдаёт дамп базы на стандартный вывод, который перенаправляется команде gzip, которая в свою очередь отдаёт уже сжатый дамп так же на стандартный вывод. Этот вывод уже передаётся по сети и сохраняется в файл на локальной машине.

Команду gzip рекомендуется выполнять именно на стороне сервера, так как в этом случае трафика расходуется меньше а скорость получения бэкапа возрастает.

Скрипт можно сохранить под именем ~/scripts/backup_mysql.sh, затем открыть пользовательский файл crontab на редактирование командой:

crontab -e

Добавить в конец строчку:

55	23	*	*	*	~/scripts/backup_mysql.sh

Сохранить файл и выйти из редактора.

Теперь каждый день в 23.55 в директории ~/backups будет появляться новый бэкап базы данных.

Приятной работы!

Ключевые слова: mysql, backup, ssh, crontab.

Подписаться на обновления: RSS-лента Канал в TamTam Telegram канал Канал в ICQ

Комментарии:

Anonymous 2015-04-14 15:18:00 (#)

Не подскажите как сделать одновременный бэкап нескольких БД? причем у каждой базы свой пользователь.
В этом случае нужно чтоб файлы именовались так: имя_базы(дата_время)

MooSE 2015-04-15 04:41:38 (#)

Не подскажите как сделать одновременный бэкап нескольких БД? причем у каждой базы свой пользователь.
В этом случае нужно чтоб файлы именовались так: имя_базы(дата_время)


Немножечко доработав скрипт:)
Новый комментарий

Жирный текстКурсивный текстПодчёркнутый текстЗачёркнутый текстПрограммный кодСсылкаИзображение




© 2006-2024 Вадим Калинников aka MooSE
Политика конфиденциальности