Веб-сайт, с которым я помогал, размещен на веб-хосте (не мой выбор), который предоставляет только FTP для файлов (без доступа к оболочке), а доступ к базе данных можно получить только с самого хоста или phpMyAdmin.
Сайт работает на Apache с версией PHP 5.3.13.
Поскольку с веб-сайтами время от времени случаются неприятные и непредвиденные вещи, я хотел бы иметь резервную копию веб-сайта. У меня, конечно, уже есть большая часть инфраструктуры локально (схемы базы данных и исходные файлы веб-сайтов), но если веб-сайт будет взломан или произойдет что-то еще, у меня останется пустой веб-сайт. Поэтому мне, конечно, нужно сделать резервную копию всех загруженных пользователем носителей и всех данных в базе данных.
Проблема в том, что я действительно не знаю, как это сделать, когда все, что у меня есть, - это FTP-доступ, а не прямой доступ к базе данных. Есть какие-нибудь советы о том, как получить приличную автоматическую резервную копию этого сайта, которую можно периодически запускать без особых проблем?
Вы можете заставить его работать, немного взломав (если `не работает ниже, попробуйте exec
, system
, passthru
, все, что можно). Вы также можете отключить эти ограничения, если немного поработаете над этим, но я не думаю, что здесь их обсуждать.
Сценарий будет следующим:
<?php
`mysqldump -uUSERNAME -pPASSWORD DATABASE > dump.sql`;
`tar -cf backup.tar .`;
// Download backup.tar
unlink('backup.tar');
?>
Конечно, это базовая информация, но она просто для того, чтобы дать вам представление. Чтобы закрепить это, имейте backup/
каталог, защищенный паролем с .htaccess
таким образом, чтобы только вы могли загрузить их с паролем, и поместите туда backup.tar.
Если у вас есть такой уровень «доступа к оболочке», возможности безграничны.
Вы можете воспользоваться cron-сервисом (см. http://www.cronjobservices.com/ или ваш хост может предложить один) в сочетании с MySQLDumper (http://www.mysqldumper.net/), если у вас нет доступа к оболочке.
Если у вас есть доступ к оболочке (я так не думаю, исходя из вашего описания), я бы рекомендовал использовать mysqldump и cronjobs.
Для содержимого файлов вы можете создать php-скрипт, который заархивирует все, но вам все равно придется загружать эти файлы самостоятельно.
Вы можете вручную выгрузить db из phpMyAdmin в файл на сервере, чтобы избежать проблем с тайм-аутом http при экспорте. Я бы просто трижды проверил панель управления веб-хоста, чтобы найти возможность делать дамп базы данных на сервер по автоматическому расписанию. Очевидно, так было бы намного лучше! В любом случае, как только база данных будет выгружена на сервер, вы можете создать резервную копию дампа с другими данными файловой системы приложения.
Есть несколько программ, которые позволяют выполнять инкрементное резервное копирование в стиле rsync через ftp. В противном случае вам придется каждый раз делать полную резервную копию. Посмотри пожалуйста этот вопрос ServerFault. Мой опыт работы с curlftps, упомянутым внизу, заключается в том, что тайм-ауты / медленность могут затруднить резервное копирование файлов среднего размера (например, более 20 МБ) - у него проблемы с чтением конца файла. Но, YMMV. Удачи!
Учитывая вашу настройку, автоматическое резервное копирование будет затруднено. Есть ли у провайдера веб-хостинга какие-либо варианты резервного копирования? Возможность запускать cron / запланированные задания? Вы, наверное, уже знаете, но phpMyAdmin может выполнять mysqldump, а с FTP вы можете получать файлы, но это не происходит автоматически.
Теоретически вы мог программно FTP к вашей учетной записи веб-хоста и загрузка файлов, а также сценарий загрузки дампа данных MySQL, но это неэффективное использование времени и ресурсов и не является надлежащим резервным копированием, IMO.
Другой вариант, который вы можете рассмотреть, - это зеркальное отображение вашего сайта локально или в другое место по вашему выбору с помощью wget
, curl
и т.д. Это даст вам статическую версию вашего сайта со статическими файлами и поможет вам восстановить ваш сайт, если вам нужно. Это можно настроить с помощью cron в вашей локальной системе, но, конечно, данные для восстановления базы данных не включены в эту опцию.
Чтобы иметь возможность восстановить на определенный момент времени, вы просматриваете регулярно создаваемые резервные копии / моментальные снимки - что-то, что должен предоставить вам хост-провайдер.
Несколько напутственных мыслей:
HTH и удачи!
phpMyAdmin может экспортировать базу данных, хотя ограничения на размер и время ожидания могут сделать это нереалистичным.
Если у вас есть доступ к файлам данных MySQL через FTP, то остановка базы данных с последующим копированием файлов, вероятно, будет лучшим выбором.