PHPでSQLiteを簡単にバックアップする方法を考えてみました。 | 在宅ネットでコツコツお金を稼ぐ

レンタルサーバーなどで使うデータベースのSQLiteがすごく使いやすくて 気に入っています。 私のサイトは当サイトの他にいくつかあるのですが、 MySQLを使っていたものもSQLiteにプログラムを書き換えて 運用しています。

今回はそのSQLiteのデータファイルの バックアップについて考えてみました。

MySQLのバックアップの場合は

データベースとしてはおそらく一番知名度がある MySQL。性能面ではトップクラスのものがあると思います。 大量のアクセスがあっても堅牢ということも言われていますね。

MySQLで何かデータベースを作って、そのデータを保存して バックアップしたい場合はちょっと手間がかかるような感じでした。 レンタルサーバーによっては、phpMyAdminというような サーバーの管理ツールを使うことができて、 そちらでエクスポートやインポートができようです。

私の場合はPHPを使っていますが、 MySQLのデータをエクスポートしたい場合は、 PHPからファイルに書き出して、 インポートしたい場合は、 MySQLのデータベースを一旦削除して、 新たにデータベースやテーブルを作成して、 そこにインポートする、 という方法でエクスポートとインポートをしていました。

SQLiteの場合は

一方、SQLiteでデータファイルをバックアップしたい場合は、 そのデータベースファイル、

.sqlite3

.sqlite

.db

などの拡張子だと思いますが、 このデータベースファイルをレンタルサーバーからコピーというか、ダウンロードするだけで バックアップが完了するので、 すごく簡単で便利ですね。

自分のローカルPCで「.sqlite3」などのデータファイルを修正して、 そのファイルをレンタルサーバーにアップロードして 置き換える、というのも簡単にできます。

この便利さもSQLiteの大きな魅力だと思います。

SQLiteのデータベースファイルをバックアップする手間を省きたい

レンタルサーバーの「.sqlite3」などのファイルを ダウンロードすればバックアップは完了ですが、 少し手間を省略したい、と考えました。

やりたいこととしては、

一日一回データベースファイルを自動的に保存する、

いうものです。 レンタルサーバーのフォルダに自動的に データベースファイルをコピーしておいて、 思い出した時に、ローカルにダウンロードする、という使い方です。 データベースファイルはコピーしておけば、 レンタルサーバー上、ということになりますが、 頻繁にダウンロードしなくても安心感があるのではないかと思います。

プログラムとしては

・日付を判定するファイル(day.txt)

・本体のプログラム(main.php)

ということにしました。

PHPではファイルをコピーするcopy()関数というものがありました。 テストしてみると、 データベースファイルもコピーできたので、 こちらを使うことにします。

PHPでの実際のプログラム

私はまだるっこしい書き方しかできないので、 まだるっこしい感じでプログラムを書いてみました。

main.php


/*

データベースファイルを自動で保存する

*/

$newfileday=date('j');//今日の日付を取得。3月1日なら「1」が取得できます。

$dbbackup_file="day.txt";//日付を保存しておくテキストファイル

$dbbackup = @fopen($dbbackup_file, "r");

/*

テキストファイルを読み込んで日付が変わっていたら、
データベースファイルをcopy()関数でコピーします。
ファイル名は、
Folder/database_backup年月日.sqliteとしました。

*/

if(isset($dbbackup)){
$line = @fgets($dbbackup);
if($line != $newfileday){

//以下Folderフォルダにあるtest.sqliteをコピーする。

$newfileday_DB=date('Y-n-j H:i:s');
$log_newfile_DB="Folder/database_backup".$newfileday_DB.".sqlite";
@copy('Folder/test.sqlite' ,$log_newfile_DB);
}//if
}//if

/*

以下でテキストファイルに保存した日を書き込み。

*/


$savefile=@fopen($dbbackup_file,"w");
@flock($savefile, LOCK_EX);//ファイルロック
@fwrite($savefile,"$newfileday");
@flock($savefile, LOCK_UN);//ファイルロック解除
fclose($savefile);


バックアップしたファイルは手動で削除しなければならないものの・・・

以上で、SQLiteのデータベースファイルが自動的にコピーされて 保存されます。ただ、この方法だと 無限にファイルが保存されるので、 一か月に一回とか一週間に一回など手動で 不要なデータベースファイルは削除するということになります。

そのため、削除する手間はありますが、 頻繁にバックアップする手間は省けると思うので、 私の場合は実際に使うことにしました。

私が書いたプログラムはまだるっこしいのと、 バックアップファイルを削除しないので、 その点、改善が必要だと思います。 実際に使う場合は、修正してお使い下さい。

(2019/04/13)

トップページ

その他のコラム

コンテンツ

トップページ