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'
?>