質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

2677閲覧

PHPからPostgreSQLのデータベースをバックアップする方法

wakaranchin

総合スコア15

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2020/08/20 01:32

編集2020/08/20 04:45

初めまして。初めての投稿のため至らないところなどありましたらすみません。

前提・実現したいこと

現在PHPでデータベースの管理の勉強をしているのですが、
PHPからDBのバックアップをしたいと思っています。
いろいろと自分なりに調べてみたのですが、PHPからバックアップなどの操作をしている方が
あまりいらっしゃらなかったので質問させていただきます。

pg_dumpコマンドを使用してlinuxサーバーではバックアップを行えたのですがPHPからの操作が分かりません。

該当のソースコード

PHP

1 2<?PHP 3exec('su - postgres'); 4exec('パスワード'); 5exec('pg_dump testdb > backup.db'); 6?>

試したこと

exec?というコマンドを使ってみたのですがうまくいきません。
このコマンドはサーバーに直接この通りに入力をしてくれるということなのでしょうか?
おそらくへんてこなプログラムだとは思いますが一応試したことなのでソースコードに貼っておきます

補足情報(FW/ツールのバージョンなど)

linux:CentOS Linux release 8.2.2004 (Core)
php:PHP 7.2.24
psql (PostgreSQL) 10.14

###追記
バックアップが成功した際、リストアもPHPから行えるように設定したいのですが、
どのような方法があるのでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/08/20 02:07 編集

どういうタイミングでどういうかたちで取りたいのでしょうか? 定期自動実行でしたらPHPだけが手段ではないですしdumpコマンド前提でしたらむしろまわりくどくなります。
wakaranchin

2020/08/20 04:30 編集

webシステムを作成していましてホームページからバックアップをする という指示…?任意のタイミング?でバックアップを行おうと考えていました。 やはり定期自動バックアップのほうがシステム的には良いのでしょうか…
m.ts10806

2020/08/21 01:20

むしろまわりくどくなります。 手順が増えればそれだけバグも増えます。
guest

回答1

0

ベストアンサー

exec() は、実行単位でプロセスが生成されるので、質問記載のように対話形式のような形では使用できません。

手動でバックアップタイミングを指定したいのであれば、手軽に以下で運用耐えられませんか?

  1. 特定ファイルがあった場合にバックアップを行い終了後特定ファイルを削除するshellを作成する。
  2. rootユーザーのcronに上記shellを登録しておく(10分毎に実行など)。
  3. phpでバックアップの操作を行うと特定ファイルを出力する

投稿2020/08/20 05:01

編集2020/08/20 05:25
Y.H.

総合スコア7918

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

wakaranchin

2020/08/20 05:12 編集

ご回答ありがとうございます。 ご提案いただいた運用方法の10分毎にバックアップを取るというのはサーバーの負荷などは大きいのでしょうか。自分で「任意のタイミングでバックアップ」といいつつこの方法だと1日に1回バックアップをとっておき保存期間を決めて削除を行ったほうが効率的に見えますね…。 また別の質問になってしまうのですが、質問に追記したリストアする場合はどのような方法があるのか教えていただけるとありがたいです。
Y.H.

2020/08/20 05:25 編集

> 10分毎にバックアップを取るというのはサーバーの負荷などは大きいのでしょうか 10分ごとにバックアップは取らないです。10分ごとにバックアップする必要があるか判断して必要ならバックアップするという回答になってますので負荷は手動でしたときと変わりません。。 「必要なら」は「特定ファイルが存在するなら」という事になります。 >リストアする場合はどのような方法があるのか教えていただけるとありがたいです。 同じで良いんじゃないですかね? この回答の「バックアップ」を「リストア」に置き換えて読むだけです。 > 「任意のタイミングでバックアップ」といいつつ・・・ これに関してはバックアップの要件次第なので。
wakaranchin

2020/08/20 05:24

なるほど。質問が多くてすみません。ご回答ありがとうございました。
wakaranchin

2020/08/20 05:47

回答済にしてしまった後に質もしていいものなのか分かりませんが、もう一つだけ聞きたいことがありまして、バックアップファイルがいくつかあった場合、その中から一つを選びリストアしたいのですが、shellファイルでリストアをする場合にPHPから変数をshellファイルに渡して実行するということは可能なのでしょうか・・・?
Y.H.

2020/08/20 05:59

・特定ファイルを読み記載されているバックアップファイルPATHをリストアをするshellを作成する。 ・phpで特定ファイルを作成する際、リストアしたいバックアップファイルPATHを書き込んむ。 ようにしておけばいいんじゃないでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問