Как создать резервную копию сценария базы данных в php и заархивировать его

Каков наилучший способ сделать резервную копию базы данных, используя php и резервные копии данных из mysql, я пытался искать учебники в Интернете, но я, кажется, не очень хорошо понимаю, я написал это, хотя это не работает хорошо, я получаю эти ошибки и предупреждения

Warning: gzopen(backups/adminpanel/adminpanel_aggrement_1367616442.sql.gz): failed to open stream: No such file or directory in C:\xampp\htdocs\how are things\admin panel\backup.php on line 17

Notice: Undefined variable: time in C:\xampp\htdocs\how are things\admin panel\backup.php on line 30
The file--backups/adminpanel/aggrement_.sql.gz--could not be opened for writing.

код в строках 17 и 30 это

if ($fp = gzopen ("$dir/{$db_name}_{$table}_{$bu_time}.sql.gz", 'w9')) {



  echo "<p>The file--$dir/{$table}_{$time}.sql.gz--could not be opened for writing.</p>\n";

это мой код

<?php 
$db_name = 'adminpanel';
$dir = "backups/$db_name";
if (!file_exists('path/to/directory')) {
    @mkdir('path/to/directory');
}
$bu_time = time();
$dbc = @mysqli_connect (localhost, root, nokiae71, adminpanel);
$q = 'SHOW TABLES';
$r = mysqli_query($dbc, $q);
if (mysqli_num_rows($r) > 0) {
    echo "<p>Backing up database '$db_name'.</p>\n";
    while (list($table) = mysqli_fetch_array($r, MYSQLI_NUM)) {
        $q2 = "SELECT * FROM $table";
        $r2 = mysqli_query($dbc, $q2);
        if (mysqli_num_rows($r2) > 0) {
            if ($fp = gzopen ("$dir/{$db_name}_{$table}_{$bu_time}.sql.gz", 'w9')) {
                                while ($row = mysqli_fetch_array($r2, MYSQLI_NUM)) {
                    foreach ($row as $value) { 

                        gzwrite ($fp, "'$value', ");
                    }
                    gzwrite ($fp, "\n"); 

                }               
                // Close the file:
                gzclose ($fp); 

            } else { // Could not create the file!
                echo "<p>The file--$dir/{$table}_{$time}.sql.gz--could not be opened for writing.</p>\n";
                break; 
            }   
        }
    } 
} else {
    echo "<p>The submitted database--$db_name--contains no tables.</p>\n";
}

?>

Как я могу сделать эту работу или есть какой-нибудь лучший сценарий, который я могу использовать там...

1 ответ

Решение

Сейчас в этом решении используется cron, но я нахожу его очень простым, поэтому подумал, что стоит упомянуть. Возможно, Cron уже установлен на сервере, который вы используете.

Это команда, которую я планирую запускать cron раз в ночь:

mysqldump -h URL_TO_YOUR_DATABASE.com -u YOUR_MYSQL_USERNAME -pYOUR_MYSQL_PASSWORD --single-transaction YOUR_DATABASE_NAME | gzip > ~/PATH_WHERE_YOU_WANT_TO_PLACE_BACKUPS/db_backup_$(date +%Y-%m-%d).sql.gz

Вот и все.

Это говорит mysqldump выгрузить всю вашу базу данных как sql. Затем GZIP сжимает его. И затем он сохраняется в месте на вашем сервере с датой, добавленной в конец имени файла.

Если вы действительно хотите запустить его с помощью php вместо cron, вы можете попробовать вызвать mysqldump из php.

Другие вопросы по тегам