Novius OS でデータベースのバックアップをする方法です。
Novius OS は FuelPHP ベースで構築されています。なので、FuelPHP の oil コマンドを利用してバックアップを行う事にします。
コードは下記のようになります。local/tasks/に、backup.phpという名前で保存してください。
<?php
/**
* Backup Novius OS database
* Author: Fumito MIZUNO
* License: MIT
*/
namespace FuelTasks;
class Backup
{
protected $mysqlpath = '/usr/bin'; //@TODO: to be defined
protected $outputfile = '/home/fumito/backup'; //@TODO: to be defined
protected $outputfile_date_format = 'Ymd'; //@TODO: to be defined
public function run($env = 'production')
{
$file = $this->outputfile . '_' . date($this->outputfile_date_format) . '.sql';
$data = static::dbinfo($env);
$hostname = escapeshellarg($data['hostname']);
$database = escapeshellarg($data['database']);
$username = escapeshellarg($data['username']);
$password = escapeshellarg($data['password']);
system( "$this->mysqlpath/mysqldump --default-character-set=utf8 --host=$hostname --user=$username --password=$password $database > $file" );
}
protected static function dbinfo($env)
{
$envs = array('production','development','test','staging');
if (!in_array($env,$envs)) {
$env = 'production';
}
$db = Config::load('db', true);
$dbinfo = $db[$env];
$data = array(
'hostname' => $dbinfo['connection']['hostname'],
'database' => $dbinfo['connection']['database'],
'username' => $dbinfo['connection']['username'],
'password' => $dbinfo['connection']['password'],
);
return $data;
}
}
実行は、
oil refine backup [production/development/test/staging]
で行います。環境の部分は省略可で、省略した場合(および指定ミスの場合)productionになります。
コードの最初にある、$mysqlpath、$outputfile、$outputfile_date_format は適宜変更してください。(phpstorm を使っている場合用に、@TODO を記載しています。)
※シェルアクセスできること、シェルから mysqldump が実行できること、が前提となります。