
前回、mysqldumpを使って
データーベースのバックアップを作成したのですが、
それをCakePHPで使ってみました。
PHP MySQLのデータを保存するmysqldumpのやり方
バックアップを作成する流れ
バックアップの作成は
ビューでボタンを押したら
SQLファイルがダウンロードできる
という流れです。
ビューにボタンを作成
(例)View/Post/index.ctp
<?php echo $this->Form->postLink('バックアップを作成',array('action' => 'backup'), array('confirm' => 'データのバックアップを作成しますか?'); ?>
どのビューでもいいですが、
postLinkでボタンを用意します。
モデルにDBへの接続させる関数を準備
(例)Model/Post.php
public function getDbo() {
return ConnectionManager::getDataSource($this->useDbConfig);
}
これで、コントローラーから関数を呼び出せば
データーベースへの情報が利用できます。
コントローラーでバックアップをする
(例)Controller/PostsController.php
public function back_up() {
if ($this->request->is('get')) {
throw new MethodNotAllowedException();
}
//ビューを使わない
$this->autoRender = false;
//モデルからDB接続のユーザー関数を記述
$db = $this->Post->getDbo();
$dbHost = $db->config['host'];
$dbUser = $db->config['login'];
$dbPass = $db->config['password'];
$dbName = $db->config['database'];;
$filePath = "保存する場所の絶対パス";
$fileName = date('ymd').'_'.date('His').'.sql';
$command = "mysqldump ".$dbName." --host=".$dbHost." --user=".$dbUser." --password=".$dbPass." > ".$filePath.$fileName;
system($command);
/*ファイルダウンロード*/
$dlFile = $filePath . $fileName; //ファイルパス
header('Content-Type: application/octet-stream'); //ダウンロードの指示
header('Content-Disposition: attachment; filename="' . $fileName . '"'); //ダウンロードするファイル名
header('Content-Length: '.filesize($dlFile)); //ファイルサイズを指定することでプログレスバーが表示される。
readfile($dlFile);
}
これでボタンをクリックすれば
サーバーにもバックアップを保存して
更に、バックアップがダウンロードされます。
本当はShell化して
cronとかで自動バックアップ取ったりした方がいいかもしれないですが、
とりあえず、この方法を取ってみました。
