Детали моего сервера:
OS: Windows Server 2003
IIS6
Plesk 8.xx installed (currently using Plesk to set the cronjob)
Мне нужен твой совет. У меня есть 2 метода:
Способ 1:
Используя php + mysqldump, создайте файлы резервных копий баз данных в gzip, а затем отправьте электронное письмо с вложением (каждая база данных имеет около 25 МБ)
Способ 2:
Используя пакетную + mysqldump, создайте файлы резервных копий баз данных в gzip, а затем отправьте электронное письмо с вложением (то же самое, каждая база данных имеет около 25 МБ)
Мои вопросы:
В чем разница использования файла php и пакетного файла для cronjob?
Какой метод лучше с точки зрения скорости резервного копирования и отправки электронной почтыи (возможно) безопасность (например, меньшее повреждение файлов)?
Если я настрою cronjob ежечасно, это повлияет на мою работу в Интернете? Я имею в виду, допустим, у моего веб-сайта сейчас 100 ++ пользователей онлайн, и каждый пользователь, совершающий транзакцию в MySQL, когда я выполняю резервное копирование в часы пиковой загрузки Интернета, не снизит ли это производительность, например скорость загрузки, подверженность ошибкам и т.д.
(Извините за мой плохой английский)
P.S: Если вам нужен мой код php и пакетный файл, пожалуйста, попросите меня опубликовать его здесь. Я не публиковал его сейчас, потому что это очень простой и стандартный код.
Если вы просто делаете дамп, сжатие, а затем отправляете электронную почту, разницы нет. НО, если вы делаете более сложные вещи, использование PHP будет иметь преимущество, например, возможно, вы захотите установить временные метки или проанализировать вывод перед отправкой. Затем вы можете использовать обширные библиотеки и методы PHP для такого рода вещей, которые пакет не может предоставить (по крайней мере, легко).
Это вам придется проверить на себе.
Вы можете настроить инкрементное резервное копирование или сохранить только транзакции (а не всю базу данных).
Хотя для такого рода работы вы можете использовать любой язык, который вам нравится, некоторые из них явно лучше других. У пакетных файлов есть ограничение, заключающееся в том, что они требуют внешних программ почти для всего для такого рода работы. Обычно PHP не является первым выбором большинства людей в качестве программы командной строки, хотя, если это то, что вам удобнее всего, сделайте это. Просто имейте в виду, что PHP и Windows не всегда лучшие друзья, и то, что хорошо работает на других платформах, может не работать так же хорошо под Windows, часто из-за других внешних программ или их отсутствия.
Кодируйте его на любом языке, который у вас наиболее опытен. Для такой простой задачи разница в скорости языков не будет заметна.
Поскольку ваши базы данных довольно малы, это, вероятно, не слишком сильно повлияет на производительность. Но mysqldump имеет тенденцию блокировать таблицы во время их сброса, предотвращая запись в них чего-либо еще.
Для резервного копирования базы данных вы можете выбрать любой язык PHP, bash, python, он в любом случае не сильно изменится.
Нет лучшего метода, это зависит только от вашего скрипта и инструментов, которые вы используете.
Да, mysqldump имеет некоторое влияние на производительность, вы можете настроить подчиненный сервер с использованием репликации и фактически сделать там резервную копию, если вы хотите так часто сохранять свою базу данных.
Используя php / batch + mysqldump, создайте файлы резервных копий баз данных в gzip, а затем отправьте электронное письмо с вложением (каждая база данных имеет около 25 МБ)
Независимо от того, используете ли вы PHP или командный файл, он действительно используется только в течение миллисекунд. Вся тяжелая обработка происходит в MySQL и Gzip, и все это происходит вне ваших скриптов.
По сути, это похоже на заботу о цвете машины, в которой вы едете на космический шаттл.
Какой метод лучше с точки зрения скорости резервного копирования и отправки электронной почты, а также (возможно) безопасности (например, меньшее повреждение файлов)?
Время выполнения такого небольшого скрипта в bash или PHP будет незначительным. Вас беспокоит скорость выполнения MySQL, которая одинакова независимо от того, на каком языке вызывается команда MySQL. После того, как bash / PHP выполнит команду для MySQL, вся тяжелая работа будет выполняться в базе данных.
Проверьте свои таблицы, чтобы узнать, используете ли вы MyISAM или InnoDb. Mysqldump заблокирует таблицы MyISAM, но таблицы InnoDB могут быть скопированы, пока приложение продолжает обращаться к таблице. Это связано с блокировкой на уровне строк.