什么是最好的方式来备份数据库使用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来触发它,你可以尝试从php调用mysqldump。