J'utilise le script Database Backup de David Walsh (http://davidwalsh.name/backup-mysql-database-php) pour sauvegarder ma base de données MYSQL en tant que fichier .sql sur mon serveur.Pourquoi mon script de sauvegarde de base de données ne fonctionne-t-il pas en PHP?
J'ai créé un utilisateur nommé backup et lui ai donné tous les privilèges (juste pour être sûr). Ensuite, j'ai mis le code dans un fichier php et configurer un travail cron pour exécuter le fichier php.
Voici le code:
/* backup the db OR just a table */
function backup_tables($host,$user,$pass,$name,$tables = '*')
{
$link = mysql_connect($host,$user,$pass);
mysql_select_db($name,$link);
//get all of the tables
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);
}
//cycle through
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";
}
//save file
$handle = fopen('../backup/db-backup-'.time().'-'.(md5(implode(',',$tables))).'.sql','w+');
fwrite($handle,$return);
fclose($handle);
}
backup_tables('localhost','alupto_backup','pass','*');
Lorsque la tâche cron exécute, la sauvegarde ne fonctionne pas et je reçois un e-mail avec l'erreur qui apparaît:
Avertissement: mysql_fetch_row(): argument fourni n'est pas une ressource de résultat MySQL valide dans /home5/ideapale/public_html/amator ders_basic/admin/backup.php en ligne
Sur la ligne 18 est ce code:
while($row = mysql_fetch_row($result))
Quand je lance le SQL (SHOW TABLES) dans phpMyAdmin, cela fonctionne très bien et me montre une liste de toutes les tables. Mais pour une raison quelconque, je reçois une erreur lorsque le fichier php essaie d'exécuter le SQL.
Pourquoi mon script de sauvegarde de base de données ne fonctionne-t-il pas?
Et il utilise le 'ereg_replace()' déprécié juste pour ajouter à la liste. –
shellexec? Pourquoi même utiliser PHP pour exécuter un programme via cron? –
Ok, je n'ai jamais réalisé ça. Connaissez-vous un bon tutoriel qui montre comment utiliser shellexec() pour lancer mysqldump? – zeckdude