下面的代码列出了所有存在的数据库并将它们提取到一个数组中,对于列出的每个数据库的表都是一样的。然后它创建新的数据库和表,包含旧数据库和表的每个值,但是th extension _backup-(某个特定日期)。
$sql="SHOW DATABASES";
$query=mysql_query($sql,$connect);
while ($row = mysql_fetch_assoc($query)) {
$sql2="SHOW TABLES FROM ".$row['Database'];
$query2=mysql_query($sql2, $connect);
$sql3 = "CREATE DATABASE `".$row['Database']."_backup-".$d."`";
$query3=mysql_query($sql3,$connect);
while( $row2 = mysql_fetch_assoc($query2) ) {
foreach($row2 as $rand2) {
$sql4 = "CREATE TABLE `".$row['Database']."_backup-".$d."`.`".$rand2."` SELECT * FROM `".$row['Database']."`.`".$rand2."`";
$query4=mysql_query($sql4,$connect);
}
}
}
此代码作为备份工作,但我唯一不知道的是如何删除旧数据库。让我们说今天触发这个脚本(10.9.2014),这段代码将创建一个备份db1_backup-10.0 .2014对于名为db1的原始数据库,如果我们今天再次触发它,它将备份以前的备份,这是一件令人讨厌的事情,所以我需要删除之前的备份,在创建新备份之后,并保留原来的数据库。我真的可以帮助你了。谢谢。
答案 0 :(得分:1)
您可以在代码
之前添加DROP DATABASE
$sql="SHOW DATABASES";
$query=mysql_query($sql,$connect);
while ($row = mysql_fetch_assoc($query)) {
//Blacklist these to not make backup
if(! in_array($row['Database'], array('mysql', 'information_schema', 'performance_schema')) && strpos($row['Database'], "_backup-".$d) === false) {
$sql2="SHOW TABLES FROM `".$row['Database']."`;";
$query2=mysql_query($sql2, $connect) or die(mysql_error());
$dropDb = "DROP DATABASE IF EXISTS `".$row['Database']."_backup-".$d."`";
mysql_query($dropDb, $connect);
$sql3 = "CREATE DATABASE `".$row['Database']."_backup-".$d."`";
$query3=mysql_query($sql3,$connect) or die(mysql_error());
while( $row2 = mysql_fetch_assoc($query2) ) {
foreach($row2 as $rand2) {
$sql4 = "CREATE TABLE `".$row['Database']."_backup-".$d."`.`".$rand2."` SELECT * FROM `".$row['Database']."`.`".$rand2."`";
$query4=mysql_query($sql4,$connect);
}
}
}
}
这样,同一日期只有一份备份副本
更新:你得到的是mysql_fetch_assoc() expects parameter 1 to be resource
,因为在$ sql2&表格名称中缺少了回拨号``保持数据库名称长度低于 16个字符
经过测试和工作