Credo che se vuoi farlo meramente con PHP potrai farlo solo con DB di piccole dimensioni (dato il timeout delay piccolo di PHP). Comunque ho trovato su internet:
Solo con PHP
Codice PHP:
<?php
include 'config.php';
include 'opendb.php';
$tableName = 'mypet';
$backupFile = 'mypet.sql';
$query = "LOAD DATA INFILE 'backupFile' INTO TABLE $tableName";
$result = mysql_query($query);
include 'closedb.php'; ?>
Con PHP eseguendo la funzione preconfezionata di MySQL e il commando system di PHP (non sono sicuro tu possa usarla su tutti i server hosting)
Codice PHP:
<?php
include 'config.php';
include 'opendb.php';
$backupFile = $dbname . date("Y-m-d-H-i-s") . '.gz';
$command = "mysqldump --opt -h $dbhost -u $dbuser -p $dbpass $dbname | gzip > $backupFile";
system($command);
include 'closedb.php';
?>