スポンサードリンク

CakePHP
CakePHP

前回、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とかで自動バックアップ取ったりした方がいいかもしれないですが、

とりあえず、この方法を取ってみました。

(参考)
CakePHP DboSourceをPHP5らしく使う

スポンサードリンク