hetemlでデータベースのバックアップを自動で取る

以前紹介した
bashスクリプトでデータベースをバックアップする
のコードをhetemlのサーバーにあげて、cronで回すとエラーが

調べてみると..
hetemlのよくあるお問い合わせに
http://heteml.jp/support/faq/2085.html

Q.cronで rm や wget 、find コマンドは使えますか?
A.cronでは rm や wget 、find コマンドはご利用いただけません。

rmが使えない..
困ったということでphpでバックアップを取ろうと、以前の記事
phpでデータベースのバックアップをとる
でやりました

そのままのコードだと
ログインルートにファイルが保存される、
hetemlのmysqlデータベースは別サーバー,
なので、ちょっと修正


#!/usr/bin/php
<?php

$date = new DateTime();
$today = $date->format("Y-m-d");

$date->sub(new DateInterval("P11D"));
$deleteDate = $date->format("Y-m-d");

$backupFolder = "backup/database/";
$backupFile = $today . ".dbbackup";
$deleteFile = $deleteDate . ".dbbackup";

system("mysqldump -u (user name) -h (database server address) --password=(password) (database name) > {$backupFolder}{$backupFile}");

if (file_exists($backupFolder.$deleteFile)) {
    unlink($backupFolder.$deleteFile);
}

backup.phpなどとファイルに保存、sftpかsshを有効にしてscpでサーバーにあげます
権限は700になるようにしました

sftpかsshでログインして、
backup/database
というディレクトリをサーバーへ作っておきます

あとはcron設定をして、バックアップが取れてれば成功です
cronのエラーはメールアドレスをcron設定の画面で登録すると、飛んできます
参考) heteml cron設定マニュアル

いまのところWEBサーバーにバックアップを保存してます
今後、違うサーバーへ保存しようと思います



phpでデータベースのバックアップをとる

以前、
bashスクリプトでデータベースをバックアップする
でbashスクリプトでのバックアップを取りました

phpでどうとるかやってみます

phpスクリプトはこんな感じです


#!/usr/bin/php
<?php
$date = new DateTime();
$today = $date->format("Y-m-d");

$date->sub(new DateInterval("P11D"));
$deleteDate = $date->format("Y-m-d");

$backupFile = $today . ".dbbackup";
$deleteFile = $deleteDate . ".dbbackup";

system("mysqldump -u (user name) --password=(password) (database name) > {$backupFile}");

if (file_exists($deleteFile)) {
    unlink($deleteFile);
}

sysytemでmysqldumpを実行して、11日前のバックアップをunlinkで消しています

これをbackup.phpとかに保存して実行権限をつけます
$ chmod u+x backup.php
とかです

実行してバックアップがとれてれば成功です
$ ./backup.php

cronに登録すれば自動バックアップの完成です

bashスクリプトでデータベースをバックアップする

bashスクリプトでmysqlのバックアップをとるようにして
cronで回せば、自動でバックアップを取れるようにしました

Ubuntu 12.04で試しています

参考)mysqlのバックアップのとり方を整理

できあがりはこんな感じ
丸括弧()内は環境に合わせます


#!/bin/sh

TODAY=`date '+%F'`
mysqldump -u (user name) --password=(password) (database name) > ./$TODAY.dbbackup

TENDAYSAGO=`date -d '11 days ago' '+%F'`
rm ./$TENDAYSAGO.dbbackup

2014-11-09.backup
といったバックアップができ、10日前(今日を含めず)のファイルを消します

これをbackup.shとかに保存し、実行権限をつけます

$ chomod u+x backup.sh
といった感じで

実行して試します
$ ./backup.sh

保存されてるか確認しましょう
cronに登録すれば、自動バックアップの完成です
(同じサーバーに保存してしまってますが)

mysqlのバックアップのとり方を整理

mysqlのバックアップのとり方を整理しました
mysqldumpコマンドを使います

丸括弧()内は、お手持ちの環境のものに変えてください

バックアップをとるなら
$ mysqldump -u (user name) -p (database name) > dump.backup
(パスワード入力)

パスワード入力を外すには
$ mysqldump -u (user name) –password=(password) (database name) > dump.backup

別のサーバー上のバックアップを取るなら
$ mysqldump -u (user name) -h (remote server address) -P (port number) (database name) > dump.backup
※リモートのサーバーへログインできる許可がないと実行できません