バックアップ スクリプトを作成するのに完璧に機能するシェル/bash がありますが、問題は、スクリプトの実行に問題を引き起こす大きなファイルがあることです。スクリプトには qtar.gz
形式のファイルを圧縮する機能があり、それを実行しますが、6 GB 以上になると、またはスクリプトはファイルの圧縮を続行しますが、次の行に進み、バックアップが失敗します。サーバーには、set_time_limit;
私が使用して非常にうまく機能するシェル/bash を呼び出す php ファイルが php に等しい必要がありますset_time_limit (0);
。シェル/bash にも何かありますか?
スクリプト:
MYSQLDUMP="$(which mysqldump)"
$MYSQLDUMP -u $DBUSER -h $DBHOST -p$DBPASS $DBNAME | gzip > $TIMESTAMP.sql.gz
ssh $USER_SSH@$HOST_SSH "tar -zcf - $HOME" > $TIMESTAMP.backup.tar.gz
tar -zcf $TIMESTAMP.tar.gz $TIMESTAMP.backup.tar.gz $TIMESTAMP.sql.gz
SUCCESS=$?
rm $TIMESTAMP.sql.gz
rm $TIMESTAMP.backup.tar.gz
変数は必要ないと思ったので投稿しませんでした
tarが完了する前に、最後の行で2つのファイルが削除されます...ファイルが約6GBまたは7GB未満の場合は、これは発生しません。
答え1
まず、PHP スクリプトをどのように呼び出すかを知っておくと便利です。次に、PHP スクリプトで MySQL ダンプを実行する代わりに、bash/シェル スクリプトで実行し、PHP スクリプトで実行するのはそれを呼び出すことだけです。
これで、php スクリプトが mysql に接続できたので、現在のスクリプトを最小限に変更するだけで何ができるでしょうか。php スクリプトが bash スクリプトを待機するのではなく、php に bash スクリプトを呼び出して、それを忘れるようにすれば、かかる時間を心配する必要がなくなります。
bash スクリプトで、圧縮が完了したら、mysql の行を更新して成功か失敗かを示すようにし、bash スクリプトでダンプを実行すれば、PHP スクリプトでダンプを実行するよりも安全です (つまり、DB の資格情報は Web 経由でアクセスできなくなります)。また、PHP の ssh 用に秘密キーを生成することもお勧めします。その後、別のスクリプトを使用して php でチェックし、DB で結果をチェックして、視覚的に成功したことを報告するなどの他の操作を実行できます。
これを解決するには、いくつかの異なるスクリプトで PHP を使用する方法、より多くのことを実行する bash を使用する方法、さらには JavaScript などの他の言語を組み込んで結果のページを動的に更新し、更新する必要がないようにする方法など、さまざまな方法があります。