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
※リモートのサーバーへログインできる許可がないと実行できません

hetemlで鍵交換方式のssh接続をする

hetemlでは、ブラウザからのコントロールパネルでSSHのログインを有効にできます
パスワード認証なので鍵交換方式にしてみました

sshでログインできるようsshの設定をしておきます

sshでログインできるようにする

コントロールパネルでsshを有効にしておきます
パスワードはsFTPと同じのようです
heteml-ssh

.ssh/configを設定します
$ vi .ssh/config
Host heteml
HostName xxxxx.heteml.jp
User username
Port 50022
IdentitiesOnly yes
PreferredAuthentications password

HostNameとUserとPortはお持ちのものを使ってください
最後の2行がないと、怒られるみたいです

sshでログインしてみます
$ ssh heteml
(パスワード入力)

つながればうまくいってます

鍵交換方式の設定

ローカルのパソコンで鍵を用意しておきます

$ ssh-keygen -t rsa
で、指示をみてパスワードつけたり、鍵の名前をかえたりします

名前はかえなければ
id_rsa
id_rsa.pub
の2つができます

公開鍵(id_rsa.pub)をhetemlのサーバーへ渡します
$ scp id_rsa.pub heteml:~/

公開鍵をauthorized_keysに登録します
authorized_keysがない場合の操作です
$ ssh heteml
$ mkdir .ssh
$ cat id_rsa.pub >> authorized_keys
$ chmod 600 .ssh/authorized_keys

sshdをリスタートしたいから
hetemlにログインして、sshをいったんOFFにしてONにします

.ssh/configを修正します
$ vi .ssh/config
Host heteml
HostName xxxxx.heteml.jp
User username
Port 50022
IdentitiesOnly yes
# PreferredAuthentications password

$ ssh heteml
でパスワードが求められなければうまくいっています
今後、楽です