Скрипт бэкапа mysql php
Автоматическое резервное копирование на PHP
А ведь какие задачи у резервного копирования? Просто сохранять в архив все файлы и папки сайта, а также делать дамп базы данных, которые так же добавить в архив. Для создания такой функциональности 1000 кнопок не потребуется, поэтому я решил написать свой скрипт автоматического резервного копирования на PHP. Полный код данного скрипта приведён ниже:
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
Комментарии ( 19 ):
Нехилый скрипт. Молодец, Михаил!
класс ZipArchive входит в состав языка PHP
Михаил, Большое спасибо за скрипт. Очень пригодился. А можно как нибудь исключить архивирование одной папки? У меня есть папка images, которая весит несколько гигов, и которую бекапить нет необходимости. Заранее спасибо за ответ.
Переписал ваш скрипт в класс. Так гораздо удобнее мне кажется. Код здесь: http://pastebin.com/K0S3UzFB И добавил возможность указывать файлы и папки, которые не нужно включать в архив.
Попробовал ваш скрипт, в отличии от того что на сайте- ругнулся только на «PHP Fatal error: Class ‘ZipArchive’ not found in», подскажите, как сделать что бы не зип, а tar.gz, вроде с этим работает
У вас расширение для работы с архивами не установлено на сервере.
Да я не спорю, но я то там не установлю сам, а хостер не особо хороший, а можно сделать как то, что бы бэкап складывался в папку, но не архивировался, а я потом буду забирать с компьютера и уже на компе будет архивировать? Хотя вот в панеле управления в файловом менеджере я могу запаковать и в зип и в тар
Можно. Попозже помогу
Спасибо большое, даже, если облегчит- мне нужно забирать только базы данных с сервера, файлы я и так забираю кобианом по расписанию, а вот базы данных никак не выходит
Вообщем то с зипом я разобрался, оказывается его можно было включить в панель управления, ошибка с ним ушла, но вышла ошибки, которые сыпали и оригинальный скрипт, и куда копать ума совсем не приложу: PHP Warning: fopen(/backups/USER_444.sql): failed to open stream: No such file or directory in /home/USER/domains/DOMEN.RU/public_html/cron.php on line 107 PHP Warning: fclose() expects parameter 1 to be resource, boolean given in /home/USER/domains/DOMEN.RU/public_html/cron.php on line 135 PHP Notice: ZipArchive::addFile(): Empty string as filename in /home/USER/domains/DOMEN.RU/public_html/cron.php on line 61 PHP Warning: unlink(/backups/USER_444.sql): No such file or directory in /home/USER/domains/DOMEN.RU/public_html/cron.php on line 68
Ну а файл такой есть? /backups/USER_444.sql И что за крон у вас странный?
Нет, такого файла нет. А чем, простите, странен крон? Это он мне на почту присылает в таком виде отчёт. Вообще непонятно, то ли скрипт не может достучаться до sql базы, то ли не может её скопировать в папку backups. Как вот этот момент проверить
привет глянул код. а куда вписывать исключения что бы не бэкапил?
Серьезно? Сколько лет прошло уже ))) Я РНР как страшный сон забыл и на Node.js переехал ))
Михаил, для новичка обьясните, как поставить скрипт в cron. никогда с cron не работал.
Михаил, подскажите, пожалуйста, можно ли изменять степень сжатия архива? Просто мне попался скрипт и я попробовал создать архив сайта им и в итоге архив получился на 30 Мб меньше по размеру, по сравнению с тем архивом, который был создан с использованием вашего скрипта. Хотя мне ваш скрипт нравится больше. Он меньше и по содержанию и по размеру, да и работает шустрее. Спасибо.
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.
Copyright © 2010-2021 Русаков Михаил Юрьевич. Все права защищены.
How to backup MySQL database in PHP?
I don’t have a basic understanding of how backup of a MySQL database through PHP would work. I have followed one tutorial but it didn’t help me understand.
Can someone explain how to create a MySQL backup from PHP?
11 Answers 11
While you can execute backup commands from PHP, they don’t really have anything to do with PHP. It’s all about MySQL.
I’d suggest using the mysqldump utility to back up your database. The documentation can be found here : http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html.
The basic usage of mysqldump is
You can then restore the backup with a command like
Do you have access to cron? I’d suggest making a PHP script that runs mysqldump as a cron job. That would be something like
If mysqldump is not available, the article describes another method, using the SELECT INTO OUTFILE and LOAD DATA INFILE commands. The only connection to PHP is that you’re using PHP to connect to the database and execute the SQL commands. You could also do this from the command line MySQL program, the MySQL monitor.
It’s pretty simple, you’re writing an SQL file with one command, and loading/executing it when it’s time to restore.
You can find the docs for select into outfile here (just search the page for outfile). LOAD DATA INFILE is essentially the reverse of this. See here for the docs.
Как автоматически создать резервную копию базы данных MySQL и Web-сервера в хранилище FTP
Эта статья содержит один из древнейших методов, предложенный NIX Craft в 2006 году. Статья, на мой взгляд, ценна тем, что содержит как бы базовое направление мысли, в котором может следовать начинающий или «случайный» (вынужденный заниматься администрированием баз данных в дополнение к другим задачам) сисадмин.
На мой взгляд, понимание базовых принципов, изложенных в этой статье, сродни пониманию принципов изготовления плова. Можно экспериментировать с пловом в достаточно широких пределах; главное — не разварить рис в клейкую кашу и не сунуть в плов вместо жирного мягкого мяса непонятно что. Точно так же и стратегия бэкапа баз данных MySQL может варьироваться в очень широких пределах, но основы — сочетание полного резервного копирования с инкрементальным, установление периодичности выполнения отдельных задач и контроль за их правильным выполнением — остаются неизменными вне зависимости от используемого инструментария.
Оригинал статьи взят здесь: http://www.cyberciti.biz/tips/how-to-backup-mysql-databases-web-server-files-to-a-ftp-server-automatically.html. Далее идёт сам текст перевода.
* * *
Здесь приводится простое решение для резервного копирования, предназначенное для тех администраторов, которые обслуживают собственные веб-серверы и системы управления базами данных (СУБД) MySQL на выделенных или VPS-серверах. Большинство специализированных хостинг-провайдеров предоставляют пользователю услуги резервного копирования в выделенное сетевое хранилище (NAS) или на сервер FTP. Эти провайдеры привязывают пользователя к своим избыточно функциональным массивам хранения данных через частную виртуальную сеть. Поскольку мне довелось управлять множеством серверных проектов, я готов предложить вместо этого собственное автоматизированное решение. If you just want a shell script, go here (you just need to provided appropriate input and it will generate FTP backup script for you on fly, you can also grab my php script generator code).
Инкрементальный бэкап с помощью утилиты tar
Создание резервных копий баз данных MySQL
Создание простой схемы резервного копирования для вашего проекта
Параметры нашей тестовой конфигурации
Автоматическое резервное копирование с использованием утилиты tar
В качестве небольшого послесловия от переводчика.
Так как задачи бэкапа данных принадлежат к числу наиболее часто беспокоящих системного администратора проблем, то применимость удачного скрипта в этой области, даже без переделок и изменений, может оказаться весьма высокой в течение 5, 10 или 20 лет. В частности, скрипт, похожий на описанный в статье, только сделанный изначально под Windows, работал несколько лет на одном из серверов нашего института, пока мы не заменили его более современной и совершенной программой с GUI.
Понятное дело, что серьёзные администраторы способны создавать такие скрипты самостоятельно, без особых усилий. Я же преследовал цель – показать логику, на которой мы, учёные, вынужденные в силу известных экономических причин работать ещё и с компьютерными базами данных, учились строить задачи взаимодействия с ОС и СУБД на уровне командного языка. Таким пользователям, только осваивающим скрипты и администрирование БД, подобные примеры могут оказаться в высшей степени полезными.
Это соображения, так сказать, идеологического порядка. Чужой скрипт можно довольно точно сравнить с шахматным этюдом, показательно решающим ту или иную задачу. Классические решения, наподобие приведённого, могут стать проверенным во времени полем для самостоятельных экспериментов, показать логику и направление мысли для тех, кто не удовлетворён функциональностью продуктов с GUI и хочет попробовать вызвать к жизни всю мощь пакетных команд. Поэтому для меня здесь важна не столько давность или, наоборот, эффективность предложенного решения, сколько его внутренняя логичность и объяснимость каждого из пунктов. Приняв его за базу, можно легко создать свой собственный «этюд» для другой СУБД или другого диапазона задач; общая логика мышления, заданная один раз, станет в будущем ценным дополнением к арсеналу администратора или разработчика.
Простота понимания, выполнение заявленных базовых условий (о которых говорилось в начале статьи) и небольшие размеры этого скрипта позволяют мне рекомендовать его как базу для различных экспериментов с резервным копированием данных MySQL. Ну, а если этот «этюд» устарел окончательно – что ж, возможно и такое. Будет интересно сравнить его с теми решениями, которые предлагают сейчас для той же задачи современные программисты и системные администраторы. Добро пожаловать в комментарии со своими собственными скриптами, способными заткнуть за пояс вышеописанное изделие.
Автоматическое копирование базы данных MySQL на PHP
Дата публикации: 2013-11-20
От автора: база данных является хранилищем важнейшей информации практически любого хорошего сайта, поэтому еще на этапе разработки сайта необходимо решить, как выполнять резервное копирование информации хранящейся в базе данных. Так как не выполняя данную операцию, однажды можно потерять весь контент сайта, и это может произойти совсем не по Вашей вине, а, к примеру, по техническим причинам на сервере. Поэтому в данном уроке мы с Вами рассмотрим создание небольшого скрипта, который будет выполнять автоматическое копирование содержимого Вашей базы данных.
Настройки для работы скрипта
Итак, у нас есть пустой файл index.php на локальном компьютере – и это будет основной файл будущего скрипта. Первым делом, давайте создадим файл config.php для хранения настроек, с вот таким содержимым:
Бесплатный курс по PHP программированию
Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC
В курсе 39 уроков | 15 часов видео | исходники для каждого урока
Настройками будут служить обычные константы PHP, и это четыре настройки для подключения к базе данных (путь к серверу, имя пользователя, пароль для пользователя, имя базы данных). Далее, создаем константу для хранения пути к папке, в которую будут сохраняться резервные копии. А также создадим еще одну вспомогательную настройку, в которой сохраним количество записей, которые одновременно будут записываться в текстовый файл. После этого давайте подключим данный файл в index.php:
Подключение к базе данных
В данном файле будут собраны все необходимые функции по созданию скрипта автоматического копирования содержимого базы данных. Поэтому создадим данный файл и добавим в него первую функцию:
Получение списка таблиц базы данных
Перед тем как начать писать логику работы скрипта, давайте посмотрим на фрагмент дампа базы данных, созданного скриптом phpMyAdmin. Напомню, для того, что бы создать резервную копию базы данных, при помощи phpMyAdmin, необходимо выбрать нужную базу данных, и нажать по вкладке Экспорт (Export):
Далее если выбрать быстрый способ экспорта – будет создан текстовый файл, с расширением sql, примерно вот такого содержания (посмотрим только фрагмент):
То есть, как Вы видите, данный фал содержит набор SQL запросов, для восстановления целостности информации базы данных. А именно: создание необходимых таблиц, наполнение их данными. Поэтому наш скрипт должен создавать аналогичный файл. Теперь, нам необходимо узнать какие таблицы содержатся в выбранной базе данных. Для этого создадим функцию get_tables() в файле functions.php:
Как Вы видите, мы с Вами получили массив всех таблиц, содержащихся в выбранной базе данных. Теперь для каждой из этих таблиц, необходимо создать SQL запросы, которые будут их создавать и заполнять содержимым.
Функция создания дампа базы данных
Итак, приступаем к непосредственному созданию дампа базы данных. Для этого создаем в файле functions.php функцию get_dump():
Обратите внимание – функция принимает два параметра – дискриптор открытого соединения с базой данных и массив таблиц, хранящихся в базе данных. Так как дамп базы данных это обычный текстовый файл, поэтому давайте создадим такой файл и откроем его для записи, используя функцию fopen() и запишем в него несколько строк:
Скрипт бэкапа mysql php
В этом разделе помещены уроки по PHP скриптам, которые Вы сможете использовать на своих ресурсах.
Фильтрация данных с помощью zend-filter
Когда речь идёт о безопасности веб-сайта, то фраза «фильтруйте всё, экранируйте всё» всегда будет актуальна. Сегодня поговорим о фильтрации данных.
Контекстное экранирование с помощью zend-escaper
Обеспечение безопасности веб-сайта — это не только защита от SQL инъекций, но и протекция от межсайтового скриптинга (XSS), межсайтовой подделки запросов (CSRF) и от других видов атак. В частности, вам нужно очень осторожно подходить к формированию HTML, CSS и JavaScript кода.
Подключение Zend модулей к Expressive
Expressive 2 поддерживает возможность подключения других ZF компонент по специальной схеме. Не всем нравится данное решение. В этой статье мы расскажем как улучшили процесс подключение нескольких модулей.
Совет: отправка информации в Google Analytics через API
Предположим, что вам необходимо отправить какую-то информацию в Google Analytics из серверного скрипта. Как это сделать. Ответ в этой заметке.
Подборка PHP песочниц
Подборка из нескольких видов PHP песочниц. На некоторых вы в режиме online сможете потестить свой код, но есть так же решения, которые можно внедрить на свой сайт.
Совет: активация отображения всех ошибок в PHP
При поднятии PHP проекта на новом рабочем окружении могут возникнуть ошибки отображение которых изначально скрыто базовыми настройками. Это можно исправить, прописав несколько команд.
Агент
PHP парсер юзер агента с поддержкой Laravel, работающий на базе библиотеки Mobile Detect.