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は商品詳細ページの虫眼鏡機能を実装します

推薦する

CentOS 7 で rpm パッケージを使用して MySQL 5.7.18 をインストールする

最近、MySQL を使っています。Linux での mysql-installation という記事...

Dockerリンクはコンテナの相互接続を実現します

目次1.1. IP経由のコンテナ間のネットワークアクセス1.2. コンテナ名またはコンテナIDによる...

jQueryで劇場の座席選択と予約の効果を実現

jQueryは劇場の座席選択と予約の効果を実現します。参考までに、具体的な内容は次のとおりです。効果...

CentOS サーバーに FFmpeg をインストールするための完全な手順

序文サーバーシステム環境は、CentOS 6.5 (最終) です。 FFmpeg をサーバーに正常に...

MySQLトリガーの簡単な使用例

この記事では、例を使用して MySQL トリガーの簡単な使用方法を説明します。ご参考までに、詳細は以...

CSSのclip-pathプロパティを使用して不規則なグラフィックを表示する

clip-path CSS プロパティはクリッピングを使用して要素の表示可能領域を作成します。領域内...

nginx を使用して特定のインターフェース (URL) をブロックする方法

1. はじめに場合によっては、Web プラットフォームがオンラインになった後、サービス インターフェ...

CSS の Flex レイアウトを使用してシンプルな縦棒グラフを作成する方法

以下は、Flex レイアウトを使用した棒グラフです。 HTML: <div class=&qu...

自動行折り返し機能付き CSS Flex レイアウトのサンプル コード

フレックス コンテナーを作成するには、要素に display: flex プロパティを追加するだけで...

MySQL 接続例外とエラー 10061 の解決方法

MySQL は、スウェーデンの会社 MySQL AB によって開発されたリレーショナル データベース...

Windows での MySQL 8.0.18 インストール チュートリアル (図解)

ダウンロードダウンロードアドレス: https://dev.mysql.com/downloads/...

Linuxの読み取りコマンドの使用

1. コマンドの紹介read コマンドは、シェルの組み込みコマンドで、標準入力または -u オプショ...

入力のid属性とname属性の違いの例

長い間ウェブサイトを作ってきましたが、入力時のnameとidの違いがまだわかりません。最近jQuer...

MySQLでスケジュールされたタスクを設定する方法の分析

この記事では、例を使用して、MySQL でスケジュールされたタスクを設定する方法について説明します。...

Vue でシンプルな無限ループスクロールアニメーションを実装する例

この記事では主に、Vue でシンプルな無限ループスクロールアニメーションを実装し、みんなで共有する例...