Контроллер, который создает дамп и отдает его в браузер для скачивания.
На хостинге не должно быть ограничения на использование функции exec()
<?php
namespace app\controllers;
use Yii;
use yii\web\Controller;
class BackupController extends Controller {
public function actionBase() {
$mysql_file = Yii::getAlias('@app/mysqldump.sql');
preg_match('#mysql:host=([^;]+);dbname=(.*)#', Yii::$app->components['db']['dsn'], $dbmatch);
$db = [
'host' => $dbmatch[1],
'user' => Yii::$app->components['db']['username'],
'pass' => Yii::$app->components['db']['password'],
'base' => $dbmatch[2]
];
exec("mysqldump --user={$db['user']} --password={$db['pass']} --host={$db['host']} {$db['base']} --result-file={$mysql_file} 2>&1", $output);
Yii::$app->response->format = \yii\web\Response::FORMAT_RAW;
header('Content-Type: application/sql');
header('Content-Disposition: attachment; filename=dump-'.$dbmatch[2].'_'.date('YmdHis').'.sql');
header('Last-Modified: '.gmdate('D, d M Y H:i:s', filemtime($mysql_file)).' GMT', true, 200);
header('Content-Length: '.filesize($mysql_file));
readfile($mysql_file);
}
}
?>