se hai accesso al server (quindi non sei in hosting condiviso) puoi fare una cosa del genere:
in sostanza lanci il comando mysqldump come se fossi da shell.Codice PHP:
$cmd = 'mysqldump -u UTENTE -pPWD@ -R DB_NAME > backup.sql';
echo exec($cmd);
volendo puoi impostare CRON (o uno scheduler) per lanciare il file quando vuoi.
se non hai accesso al server, diventa più complicato.