• 18
  • апр
  • 2024
В новостях:
Веб-программирование

Создаем автоматический бэкап базы данных MySQL

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

Создаем автоматический бэкап базы данных MySQL
Поделиться в соцсетях:

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

Как использовать

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

Создаем автоматически бэкап базы данных MySQL

Использование CRON

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

Только измените ссылку, указывающую на файл backup.php на вашем сервере.

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

PHP-код

А это непосредственно сам код файла backup.php. Вам необходимо передать функции backup_database_tables пять обязательных параметров: HOST (чаще всего это localhost), USERNAME (имя пользователя базы данных), PASSWORD (пароль для этого пользователя), DATABASE (имя базы данных для которой необходимо сделать резервную копию), в пятом параметре перечисляете таблицы для которых нужен бэкап, если нужно сделать копию всех таблиц, то указываете '*'.

<?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);

    // Получаем таблицы
    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);
    }

    // Проходим в цикле по всем таблицам и форматируем данные
    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";
    }

    // Сохраняем файл
    $handle = fopen('db-backup-'.time().'-'.(md5(implode(',',$tables))).'.sql','w+');
    fwrite($handle,$return);
    fclose($handle);
}

Как видите всё довольно просто. Я надеюсь этот скрипт позволит уберечь ваши данные от потери.

Перевод с papermashup.com

Комментарии отсутствуют
Добавление комментариев доступно только зарегистрированным пользователям