序文:
開発環境
サーバー: centos 7 (Tencent クラウド軽量サーバー)
データベース: mysql 5.7
1. クロンとは何ですか?
crond は、Linux で特定のタスクを定期的に実行したり、特定のイベントが処理されるのを待機したりするために使用されるデーモン プロセスです。Windows でのスケジュールされたタスクに似ています。オペレーティング システムがインストールされると、このサービス ツールはデフォルトでインストールされ、自動的に起動します。 crondプロセスは、1分ごとに定期的に実行すべきタスクの有無を確認し、実行すべきタスクがあれば自動的にタスクを実行します。
2. ステップを使用する
1. crond よく使うコマンド
- crond サービスがシステムにインストールされているかどうかを検出します
- crond サービスコマンドの説明
- service crond start //サービスを開始する
- service crond stop //サービスを閉じる
- service crond restart //サービスを再起動します
- service crond reload //設定をリロードする
- service crond status //crontab サービスのステータスを表示する
- crontab -e #crontab タイミング タスクの編集
- crontab -l #crontab タスクのクエリ
- crontab -r #現在のユーザーのすべての crontab タスクを削除します
- systemctl status crond.service #crond システム サービスのステータスを表示します
1.1 サービスを開始する
サービス開始
1.2 タスクの追加
crontab -e
1.3 タスクが正常に追加されたか確認する
crontab -l
2. crondスケジュールタスク形式
ユーザーが作成した crontab ファイルは、各行がタスク、各行の各フィールドが設定を表しており、その形式は 6 つのフィールドに分かれており、最初の 5 つのセクションは時間設定セクション、6 番目のセクションはコマンドセグメントです実行する場合の形式は次のとおりです。
00 | 02 | * | * | * | /back.sh |
分 | 時間 | 日 | 月 | 週 | 指図 |
#定时脚本 下面的意思就是 每天的凌晨2点执行一次脚本 (根据自己的需求执行脚本)
00 02 * * * /usr/local/mysql/mysqlzip/back.sh
の:
- minutes: 分を示します。0 ~ 59 の任意の整数を指定できます。
- 時間: 時間を示します。0 から 23 までの任意の整数を指定できます。
- day: 日付を示します。1 ~ 31 の任意の整数を指定できます。
- month: 月を示します。1 ~ 12 の任意の整数を指定できます。
- week: 曜日を示します。0 ~ 7 の任意の整数を指定できます。0 または 7 は日曜日を表します。
- command: 実行するコマンド。システム コマンドまたは自分で作成したスクリプト ファイルです。
注: スクリプトのパスはスクリプトのフル パスである必要があります (フル パス: pwd コマンドで取得したパス)。
3. スクリプトを書く
- 変更 1: データベースのユーザー名
- 変更 2: データベースのパスワード
- 変更 3: データベース名
- 変更4: バックアップファイルの保存場所
- 変更 5: mysqldump のファイル アドレス (mysqldump の場所をクエリするには whereis mysqldump を使用できます)
- 変更 6: 7 つを超えるファイルがある場合は、最も古いバックアップ ファイルが削除され、実際のニーズに応じて変更されます。追加の目的は、バックアップが多すぎてストレージが占有されすぎないようにすることです。
#!/bin/bash
echo '##########################################'
echo '###### The database is automatically backed up at 01:00 am every day ######'
echo '##########################################'
# Setting environment variables
DATE=$(date +%Y_%m_%d_%H_%M_%S)
# $(date +%Y%m%d)
# 数据库用户名
USERNAME=修改1
# 密码
PASSWORD=修改2
# 要备份的数据库
DB=修改3
# Docker容器ID
#DOCKERID=********
# ubuntu 系统非 root 用户,要将备份产生的文件放到 xxx 用户所在的目录下,否则必须使用 sudo 输入管理员密码执行此脚本。
# Linux服务器上备份文件目录 修改4
DIR=/usr/local/mysql/mysqlzip
echo 'Get system date: ' $DATE
if [ ! -d "$DIR" ]; then
mkdir $DIR
fi
cd $DIR
echo 'backup started...' $(date "+%Y-%m-%d %H:%M:%S")
# 使用docker进入mysql容器,执行mysqldump备份数据库文件
# docker exec -it 容器名称 mysqldump -u用户名 -p密码 要备份的数据库名称 | gzip > 要打包到的文件名称
#docker exec $DOCKERID /usr/bin/mysqldump -u $USERNAME --password=$PASSWORD $DB | gzip > $DIR/$DB_$DATE.sql.gz
# 备份 直接安装在 linux 系统中的数据库 修改5
/usr/local/mysql/bin/mysqldump -u$USERNAME -p$PASSWORD $DB | gzip > $DIR/$DB_$DATE.sql.gz
# just backup the latest 7 days
#保留最近文件数7,删除其它多余的文件 修改6 (也可以去掉 主要为了防止备份太多占用太多存储)
ReservedNum=7
date=$(date "+%Y%m%d-%H%M%S")
FileNum=$(ls -l $DIR|grep ^- |wc -l)
while(( $FileNum > $ReservedNum))
do
OldFile=$(ls -rt $DIR| head -1)
echo $date "Delete File:"$OldFile
rm -rf $DIR/$OldFile
let "FileNum--"
done
echo 'backup completed!' $(date "+%Y-%m-%d %H:%M:%S")
3.1 作成したばかりの sh スクリプトを検出して実行する
権限を与える、実行する
chmod 777 back.sh
次に、sh スクリプトをテスト実行します
./back.sh
要約する
crontab を使用すると、データベースのバックアップを忘れる心配はありません。