Linux でアップロードされたファイルのスケジュールされたバックアップと増分バックアップを実装する方法

Linux でアップロードされたファイルのスケジュールされたバックアップと増分バックアップを実装する方法

導入

Alibaba Cloud のような OSS ストレージ サービスを使用している場合は、サービスが提供するスケジュールされたバックアップを使用できるため、サーバー上のファイルのバックアップについて心配する必要はありません。

実は、基本的なバックアップの実装は非常に簡単です。通常は、tar や unzip などのコマンドを使用してファイルをパッケージ化し、これに基づいてシェル スクリプトを作成し、Linux の crontab 機能を使用してスケジュール実行プログラムを追加することで、ファイルのバックアップを簡単に実装できます。しかし、ファイル サイズが大きくなり続けても、このアプローチは機能するのでしょうか?答えは間違いなく「いいえ」です。ファイル サイズが大きくなり続けると、占有されるストレージ領域も増加します。この単純なバックアップ方法では、圧縮に時間がかかり、ストレージスペースを大量に占有します。では、この問題をどう解決すればよいのでしょうか?増分バックアップを使用すると、毎回すべてのファイルをバックアップして圧縮することによって発生する時間とスペースの問題を回避できます。

以下に実装方法を説明します(Linuxシステム環境)

スクリプトを書く前に、サーバーに crontab 機能があるかどうかを確認する必要があります。

注: このcrontab関数をここで賞賛したいと思います。本当に実用的です

rpm -qa|grep crontab コマンドを使用して、crontab がインストールされているかどうかを確認します。

ここに画像の説明を挿入

上の写真はインストールされた状態を示しています。

インストールされていない場合は、yumコマンドを使用してインストールします。

yum -y vixie-cron をインストールします
yum -y crontabsをインストール

vixie-cron はメインの cron プログラムです。
crontabs は、cron デーモンを駆動するために使用されるテーブルをインストール、アンインストール、または一覧表示するために使用されるプログラムです。

イントラネット環境の場合、オフラインでインストールする必要がある場合は、オフライン インストール パッケージを見つけることができます。

1. 開始: systemctl start crond.service

ここに画像の説明を挿入

2. ステータスを確認します: systemctl status crond.service

ここに画像の説明を挿入

上の図に示すように、crontabはすでに実行されています

以下はよく使われるコマンドです

systemctl start crond.service // コマンドを開始systemctl status crond.service // ステータスを確認systemctl stop crond.service // コマンドをシャットダウンsystemctl restart crond.service // 再起動systemctl enable crond.service // 起動して実行

systemctlコマンドを使用しない人もいるので、一般的なサービスコマンドを次に示します。

service crond start //サービスを開始します service crond stop //サービスを終了します service crond restart //サービスを再起動 service crond reload //設定を再読み込みします service crond status //crontabサービスのステータスを確認します

スクリプトファイルを作成する

vim バックアップ.sh

スクリプトコマンドを記述します (注: このスクリプトはインターネット上で見つかったもので、元のソースは見つかりませんでした)

#!/bin/bash
#良い習慣#プロジェクトに応じてスクリプトの名前を変更する#たとえば amountebak.sh または pandawillsbak.sh
#このスクリプトは、$bakpp で定義された絶対パス部分に配置するのが最適です。#対応するバックアップ ファイルは $bakpp の下にあります。#たとえば、/usr/backup/amountebak.sh または /usr/backup/pandawillsbak.sh


########## 初期化パス ########
# 以下のパラメータで定義する必要があるパラメータは、$bakpp、$project、$projectpp です。
TAR = /bin/tar
# バックアップファイルを保存する場所。プロジェクト名で区別されます bakpp=/data/file_backup/"$project"
# バックアップするフォルダ、フォルダパス project=file
プロジェクトpp=/データ/
# 変数のパラメータ
ym=`日付 +%Y%m`
ymd=`日付 +%Y%m%d`
# バックアップファイルを保存するサブディレクトリは月ごとに分割されています。親ディレクトリは monthbakpp=$bakpp/$ym で、$bakpp で定義されます。
gidpp=$monthbakpp
gidshot=gid$プロジェクト$ym
# 完全バックアップファイル名 fullname=$ym
#増分バックアップファイル名 incrementalname=$ymd
# ログの場所を記録する
ログ=$bakpp/$project.log

############# chk_full #######################
# フルバックアップが存在するかどうかを確認し、存在しない場合は作成します # この関数はフルバックアップ ファイルが存在するかどうかを確認し、存在しない場合はすぐにフルバックアップを作成します

chk_full()
{
if [ -e "$monthbakpp"/"$project"_"$ym"_full.tar.gz ];then
echo ""$project"_"$ym"_full.tar.gz ファイルが存在します!! ====`date +%Y-%m-%d-%T` " >>$log
それ以外
tar_full
フィ
}
######### chk_incremental ########
# 増分バックアップが存在するかどうかを確認する chk_incremental()
{
[ -e "$monthbakpp"/"$project"_"$incrementalname"_incremental.tar.gz ] を実行
する
incrementalname=`echo "$incrementalname + 0.1" | bc `
終わり
}
######## tar_incremental #######
# 増分バックアップを実行する tar_incremental()
{
cd $プロジェクトpp
echo "BEIGIN_TIME=====`date +%Y-%m-%d-%T` ==== "$project"_"$incrementalname"_incremental.tar.gz" を作成します >> $log
睡眠3
$TAR -g $gidpp/$gidshot -zcf $monthbakpp/"$project"_"$incrementalname"_incremental.tar.gz $project
echo "END_TIME========`date +%Y-%m-%d-%T` ==== "$project"_"$incrementalname"_incremental.tar.gz" を作成します >> $log
}

######## tar_full ###########
tar_full()
{
$gidpp/$gidshot をタッチする
cd $プロジェクトpp
echo "BEIGIN_TIME=====`date +%Y-%m-%d-%T` ==== "$project"_"$fullname"_full.tar.gz" を作成します >> $log
$TAR -g $gidpp/$gidshot -zcf $monthbakpp/"$project"_"$fullname"_full.tar.gz $project
echo "END_TIME========`date +%Y-%m-%d-%T` ==== "$project"_"$fullname"_full.tar.gz" を作成します >> $log
}

########### バックアップ ###############################
# バックアップの全体的な呼び出し。この時点で、バックアップの前提条件が完全に準備されていることを確認するための適切なチェックが行われます。backup()
{
[ -d $monthbakpp ]の場合;
 チェック_フル
 chk_増分
 tar_増分
それ以外
mkdir -p $bakpp/$ym
tar_full
フィ
}

########### 始めましょう #############
# まず$bakppが存在するかどうかを確認し、存在しない場合は作成してバックアップします。if [ -d $bakpp ]; then
バックアップ
それ以外
mkdir -p $bakpp
バックアップ
フィ
#アドバイス バックアップファイルを置くためのファイルを作成できます。例: /usr/cctcc
#crontab
#mini 時間 日 月 週 コマンド
# */5 * * * * /home/mmroot/zbb/aaa.sh
# 0 1 */1 * * /home/mmroot/zbb/aaa.sh
# tar -ztf test.tar.gz バックアップファイル内のファイルを表示する

wq!コマンドを使用してファイルを保存します

このスクリプト ファイルに関して注意すべき点が 3 つあります。

#バックアップファイルが保存される場所。プロジェクト名で区別されます
bakpp=/data/file_backup/"$project"

#バックアップするフォルダ、フォルダのパス
プロジェクト=ファイル
プロジェクトpp=/データ/

上記の3つのパスは、特定の状況に応じて変更する必要があります。

スケジュールされたタスクを追加する: コマンドを入力します

crontab -e

タスクの例

05 03 * * * cd /data/file_backup/;sh file_backup.sh

次に、crontab -l を使用して表示します。
バックアップが完了したら、コマンドを使用してバックアップ ファイル内のファイルを表示できます。

tar -ztf file.tar.gz //バックアップファイルを表示

スケジュールされたバックアップと増分バックアップについては以上です。

注意: より安全な方法は、ファイル バックアップ ストレージ サーバーとして別のサーバーを見つけることです。ローカル マシンでスケジュールされたバックアップと増分バックアップが完了すると、ファイルはファイル バックアップ ストレージ サーバーにプッシュされます。これにより、ディスクが損傷した場合でもバックアップ機能が確保されます。

Linux でアップロードされたファイルのスケジュールされたバックアップと増分バックアップを実装する方法に関するこの記事はこれで終わりです。Linux のアップロードされたファイルのバックアップに関する関連コンテンツの詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後も 123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • XshellはWindowsからLinuxホストにファイルをアップロードする方法を実装します
  • Linux ftp コマンドラインでファイルをダウンロードするための get コマンドとファイルをアップロードするための put コマンドの詳細な適用
  • Windows デスクトップで FTP を使用して Linux サーバーにファイルをアップロードする方法
  • Windows で winscp とバッチ処理を使用して、SSH ポート経由で Linux サーバーにファイルをアップロードする
  • LinuxはMySQLデータベースの自動バックアップとスケジュールバックアップを毎日実装しています
  • MySQL データベースの毎日のスケジュールされたバックアップを実行する Linux シェル
  • Linux での crontab スケジュール バックアップの例を使用した MySQL スケジュール バックアップ
  • Linux VPS バックアップ チュートリアル データベース/Web サイト ファイルの自動スケジュール バックアップ

<<:  Windows での mysql-5.7.28 のダウンロード、インストール、および構成に関する詳細なグラフィックとテキストのチュートリアル

>>:  Vueは商品詳細ページの虫眼鏡機能を実装します

推薦する

Vue のフィルターウィジェットの詳細な使用方法

この記事では、参考までにVue More Filter Itemウィジェットの実装方法を例として紹介...

CSS は、小さな鋭角のチャット ダイアログ ボックスで鋭角の吹き出し効果を実現します。

1. CSS を使用して、小さな尖った角のチャット ダイアログ ボックスと尖った角の吹き出しを描画...

React+Antdはテーブルの追加、削除、変更の例を実装します

目次テーブル/index.jsテーブル/モデル/index.jsテーブル/モデル/モジュール/bas...

jQueryをベースにカルーセル効果を実現する

この記事では、カルーセルマップの効果を実現するためのjQueryの具体的なコードを参考までに共有しま...

vuex で履歴を実装するためのサンプルコード

私は最近、ユーザー操作を元に戻す、またはやり直す機能を備えたビジュアル操作プラットフォームを開発して...

Nginx 設定場所のマッチング優先順位の簡単な分析

序文Nginx 構成のサーバー ブロック内の場所は、リクエスト URI を一致させるために使用され、...

Centos8 で Docker を使用して Django プロジェクトをデプロイする詳細なチュートリアル

導入この記事では、django + uwsgi + nginx デプロイメントを使用して、Docke...

グリッドはページのレイアウトプランです

<br /> 英語原文: http://desktoppub.about.com/od/...

nginx で HSTS を有効にしてブラウザを HTTPS アクセスにリダイレクトする方法の詳細な説明

前回の記事では、https を使用したローカルノードサービスアクセスを実装しました。前回の記事の効果...

CocosCreator システムイベントがどのように生成され、トリガーされるかについての詳細な説明

目次環境まとめモジュール機能関連文書ソースコード分析CCGame.js CCInputManager...

mysql と oracle のデフォルトのトランザクション分離レベルの説明

1. トランザクション特性(ACID) (1)原子性トランザクションに関係するプログラムによって実行...

ReactHooks バッチ更新状態とルートパラメータの取得例の分析

目次1. 一括更新の方法コンソール出力2. フックがルーティングパラメータを取得する方法実行効果1....

30 種類の無料の高品質英語リボンフォント

30 種類の高品質な英語リボン フォントを無料でダウンロードできます。デザイナーは常に、25 種類の...

Vue のディスパッチとブロードキャストの自己実装の詳細説明 (ディスパッチとブロードキャスト)

解決すべき問題主にコンポーネント間のクロスレベル通信用なぜディスパッチとブロードキャストを自分で実装...

ubuntu20.04 LTSにdockerをインストールする方法

ゼロ: 古いバージョンをアンインストールするDocker の古いバージョンは、docker、dock...