mysql - 如何在 php 中创建备份数据库脚本并将其压缩

标签 mysql 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";
}

?>

我怎样才能完成这项工作,或者有没有更好的脚本我可以使用......

最佳答案

现在,该解决方案使用 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 from php .

关于mysql - 如何在 php 中创建备份数据库脚本并将其压缩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16368081/

相关文章:

javascript - Codeigniter + $http.post() 的 Angular 问题。 Codeigniter收不到数据

php - 使用 Javascript 输出保存 Html

php - 以正确的方式处理高流量

php - mysql 类似带有逗号的值

php - 更快的 Composer 安装

php - 如何测试数组指针是否在foreach循环中的第一个元素

javascript - 为什么这两个参数获取相同的值?

MySQL UNION DISTINCT - 排除

mysql - 如何在另一个表中使用数据类型字符串作为外键创建无主键

php - 使用 PHP/MYSQL 填充 HTML 下拉列表