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

推薦する

Jenkins の docker-compose デプロイメントと構成に関する詳細なチュートリアル

Docker-compose デプロイメント構成 Jenkins 1. Docker-compose...

FirefoxのWeb開発者を使用してWebページのスタイルを無効にする方法

前提条件: Web開発者プラグインがインストールされている操作手順: [ツール] -> [We...

MySQL における悲観的ロックと楽観的ロック

リレーショナル データベースでは、悲観的ロックと楽観的ロックがリソース同時実行シナリオのソリューショ...

VueのTodoListケースの詳しい説明

<テンプレート> <div id="ルート"> <...

MySQL の binlog ログと、binlog ログを使用してデータを回復する方法を説明します。

ご存知のとおり、binlog ログは MySQL データベースにとって非常に重要です。万が一、データ...

MySQL チュートリアル データ定義言語 DDL の例 詳細な説明

目次1. SQL言語の基本機能の紹介2. データ定義言語の目的3. データベースの作成と破棄4. デ...

シェルスクリプトは、Docker の半自動コンパイル、パッケージ化、およびリリースアプリケーション操作を構築します。

Docker 公開方法は、DevOps (送信、コンパイル、パッケージ化、リリースなどの一連のイベ...

MySQL セキュリティ管理の詳細

目次1. 順番に紹介する2. ユーザーを作成する3. ユーザーアカウントを削除する4. アクセス権5...

JS を使って CSS3 で丸い角を実装する方法

IE で CSS3 を使用して角を丸くする方法を探していたときに、例を見つけました。まだテストして...

CentOS7 は yum を使用して mysql 8.0.12 をインストールします

この記事では、centos7にyumを使用してMySQL 8.0.12をインストールする詳細な手順を...

MySQL の結合インデックスと左端一致原則の詳細な説明

序文これまでインターネットでMySQLジョイントインデックスの最左接頭辞マッチングに関する記事をたく...

少なくとも7日間連続して注文を行ったユーザーに対するSQLクエリ

テーブルを作成するテーブル order(id varchar(10),date datetime,o...

CSS3 アニメーション – ステップ機能の説明

最近、CSS3 アニメーションのソース コードの実装をいくつか見ていたところ、CSS コード アニメ...

Selenium+testng を使用して Docker で Web 自動化を実現する方法

序文長い間さまざまな資料を読んで、ついに selenium+testng のパラメータ化の問題を解決...

vue.jsは画像のURLに従って画像をダウンロードします

最近、フロントエンドの vue.js ドッキング機能モジュールに取り組んでいたとき、画像をダウンロー...