MySQL backup: автоматический бэкап MySQL на PHP

mysql backups - бэкап базы данных

Организовываем автоматические бэкапы базы данных MySQL.

 

Каждая база данных должна быть подстрахована резервным копированием или бэкапом (backup). Если вы все еще делаете это вручную, то можете радоваться, потому что есть простое решение автоматического бэкапа на PHP. С помощью данного скрипта вы можете передавать конкретные таблицы для резервного копирования или сделать резервное копирование всей базы данных.

 

Как реализовать mysql backups?

Лучше всего скопировать код предоставленного скрипта и поместить его в папку «database_backups», как показано на скриншоте ниже. Затем при вызове файла backup.php, он будет создавать резервную копию базы данных на вашем сервере. Я бы рекомендовал периодически копировать все файлы бэкапов себе на компьютер или другое хранилище, что бы перестраховаться на случай потери хостинга.

Пример реализации резервного копирования БД

Автоматизация mysql backups с помощью CRON

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

wget -O /dev/null http://your-site.com/database_backup/backup.php

PHP код файла

<?php
backup_database_tables('HOST','USERNAME','PASSWORD','DATABASE', '*');

// backup the db function
function backup_database_tables($host,$user,$pass,$name,$tables)
{

        $link = mysql_connect($host,$user,$pass);
        mysql_select_db($name,$link);

        //get all of the tables
        if($tables == '*')
        {
                $tables = array();
                $result = mysql_query('SHOW TABLES');
                while($row = mysql_fetch_row($result))
                {
                        $tables[] = $row[0];
                }
        }
        else
        {
                $tables = is_array($tables) ? $tables : explode(',',$tables);
        }

        //cycle through each table and format the data
        foreach($tables as $table)
        {
                $result = mysql_query('SELECT * FROM '.$table);
                $num_fields = mysql_num_fields($result);

                $return.= 'DROP TABLE '.$table.';';
                $row2 = mysql_fetch_row(mysql_query('SHOW CREATE TABLE '.$table));
                $return.= "\n\n".$row2[1].";\n\n";

                for ($i = 0; $i < $num_fields; $i++)
                {
                        while($row = mysql_fetch_row($result))
                        {
                                $return.= 'INSERT INTO '.$table.' VALUES(';
                                for($j=0; $j<$num_fields; $j++)
                                {
                                        $row[$j] = addslashes($row[$j]);
                                        $row[$j] = ereg_replace("\n","\\n",$row[$j]);
                                        if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
                                        if ($j<($num_fields-1)) { $return.= ','; }
                                }
                                $return.= ");\n";
                        }
                }
                $return.="\n\n\n";
        }

        //save the file
        $handle = fopen('db-backup-'.time().'-'.(md5(implode(',',$tables))).'.sql','w+');
        fwrite($handle,$return);
        fclose($handle);
}
?>

Мы рассмотрели простой пример реализации автоматического бэкапа базы данных mysql. Да, способ дубовый, но он приемлем для маленьких сайтов. Если у вас большой проект, то использование php очень медленное в сравнении с использованием mysqldump. Убедительная просьба к тем, кто знает как организовать резервное копирование лучше, напишите в комментариях. 


Источник материала ...

Дальше: MySQLdump: скачать, работа с mysqldump, примеры


Дискуссия по теме    15 Комментариев
Добавить комментарий
Максим 01.02.2015 в 14:44
Здравствуйте! Данный скрипт создает бэкап БД со всеми таблицами ?
Тарас 02.02.2015 в 01:07
Да. В таком виде как подан на сайте, будет делать бэкап всех таблиц. Или можно передать определенные таблицы скрипту в виде массива (смотрите последний аргумент функции).
Илья 27.06.2013 в 18:31
Спасибо, конечно сделал пару доработок, и теперь каждый день создает новую папку и кидает все дампы моих баз в эту папку сжатыми gzip
Tim 16.03.2013 в 07:28
Начал изучать тему. Мне кажется с этого скрипта бд не удасться восстановить. 1. нет опции NO_AUTO_VALUE_ON_ZERO, что приведет к ошибке восстановления, если использовались записи со значением 0 в AUTO_INCREMENT 2. CREATE TABLE IF NOT EXISTS - иначе скрипт не выполняется на рабочей БД. 3. И главное, все constraint внешних ключей должны быть вынесены из определения таблиц и перенесены после всех INSERT в виде ALTER TABLE TBLNAME ADD CONSTRAINT, иначе не удасться сделать INSERT, где есть ссылки на другие таблицы, а там нет соответствующих значений. В итоге скрипт очень хороший, но результатом пользоваться почти невозможно (по крайней мере в автоматическом режиме).
Пётр 03.02.2013 в 21:12
Почему не указал ссылку на источник? http://papermashup.com/creating-automatic-mysql-database-backups/
Тарас 03.02.2013 в 22:34
Указана в ссылке "Источник материала" выше...
Евгений 22.01.2013 в 21:00
ТАРАС, огромное Вам спасибо, работает, те таблицы которые нужно копирует)))) спасибо!!!
Евгений 21.01.2013 в 21:24
А если только определенные таблицы нужно скопировать, что нужно ввести здесь //get all of the tables if($tables == 'SC_categories') так не работает.
Тарас 22.01.2013 в 01:35
По идеи нужно просто поправить эту строку: backup_database_tables('HOST','USERNAME','PASSWORD','DATABASE', 'TABLE1, TABLE2, TABLE3');
Игорь 18.08.2012 в 23:59
Все гениальное просто) Благодарю!
Вася 14.07.2012 в 14:43
А как насчет этого - ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=... ? И еще надо так - DROP TABLE IF EXISTS а не просто DROP TABLE
Тарас 14.07.2012 в 15:27
Каждому свое... поправьте. Расширять скрипты можно до бесконечности )))
Вася 03.04.2012 в 19:47
Здравствуйте пробую этот вариант на localhost возникает проблема Warning: fopen(Z:\home\localhost\www\gp\database_backups\db-backup-2012-04-04 01:04:46-523cb449a0d9ba3fb0ebb912ccf9e027.sql) [function.fopen]: failed to open stream: Invalid argument in Z:\home\localhost\www\gp\database_backups\backup.php on line 62 из-за чего это может быть?
Валерий 11.01.2012 в 04:45
Запустил функцию, сообщило: Notice: Undefined variable: return in W:\html\monitor-base.tv\www\database_backups\backup.php on line 28. При этом дамп создала, кстати. Ну чтож. На всякий случай, в начале тела функции backup_database_tables добавил $return = ''; - ошибок больше не генерирует.
Сергей 07.12.2011 в 11:41
Пару функций addslashes/ereg_replace надо заменить на mysql_escape_string или лучше mysql_real_escape_string. А так скрипт хороший. ;)
Добавить комментарий
Просмотров: 26439
Страхование КАСКО
карта банка
ндфл
усн
Оформление доверенности
страхование ипотеки
esim
осаго
ВЗР страхование
кредитная карта
Cialis barato Viagra Contrareembolso Cialis 5 mg precio mejores farmacias para comprar Viagra reacciones adversas de Cialis Reduslim cómo tomar soluciones para la impotencia Sildenafil Comprare Cialis 5 mg Giornaliero online in Italia Effetti indesiderati del Cialis 5 mg Acquista Cialis 20mg Cialis originale in vendita In Svizzera si compra il Viagra senza ricetta Cialis 10mg online Acquista Viagra in farmacia Offerta Cialis 5mg Spedra Avanafil in vendita online Acquista Viagra in Svizzera senza prescrizione авиатор спрайб Consegna a domicilio di Cialis 5 mg Effetti collaterali di Cialis 5 mg Consegna a domicilio di Cialis 20mg Acquista Cialis originale generico in Svizzera Consegna a domicilio di Viagra senza ricetta in Svizzera Compra Cialis 10mg Consegna a domicilio di Viagra in farmacia online Sconto Cialis 5mg Comprar Reduslim por internet Comprare Spedra Avanafil senza ricetta online Dove comprare il Viagra in Svizzera Compra Cialis Comprar online Viagra Contrareembolso Dónde encontrar Cialis 5 mg al mejor precio Viagra sin receta Cialis 5 mg efectos secundarios graves Reduslim comprar en línea Disfuncion Erectil tadalafilo avanafil prezzo cialis 20 mg prezzo cialis effetti benefici cialis 10 mg Reduslim Kaufen pulse x coin price