CentOS7 で MySQL のスケジュールされた自動バックアップを実装する方法

CentOS7 で MySQL のスケジュールされた自動バックアップを実装する方法

実稼働環境で起こる最も嬉しいことは、シナリオによっては、更新または削除時にパラメータを無視せざるを得ない状況が発生することです。もう終わりです。データを壊してしまいました。どうすればいいですか? オペレーションに行ってバックアップを見つけないと!オペレーションはこう言いました: 馬鹿げている、私たちのシステムはバックアップされていない。あなたはこう言いました: では、ログをください。オペレーションはこう言いました: 馬鹿げている、毎日何 GB ものログがある、まだ開いてもいないのに。あなたはこう言いました: どうすればいいですか、データベースがクラッシュしました。運営側は「それはあなたの仕事であり、私には関係ありません...これはある会社の描写なので、今日はこの状況に終止符を打つつもりです」と言った。

今日は、MySQL 5.7 を使用して顧客向けのシステムを導入する予定ですが、顧客側の開発者の能力を保証することはできません。何か問題が発生した場合に備えて、起動ファイルやデータベースなどの重要なファイルをすべて自動的にバックアップすることしかできません。たった 1 行のコマンドでこれを達成できます。これは責任あるアプローチです。はじめる:

次の機能を実装する必要があります。

1つ目: データベースのバックアップ

2番目: バックアップによるデータベースの回復

3番目: データベースバックアップの自動化

4番目: 期限切れのバックアップファイルをクリーンアップする

1つ目: 自動データベースバックアップ

1. バックアップディレクトリを作成する

ここでは、バックアップ ファイルを /data/backup/mysql の下に置き、スクリプトを /data/backup の下に置くことを選択しました。

[root@izwz99z5o9dc90keftqhlrz /]# mkdir -p /data/backup/mysql
[root@izwz99z5o9dc90keftqhlrz /]# cd /data/backup

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

mysql_backup.sh を作成する

[root@izwz99z5o9dc90keftqhlrz バックアップ]# vi mysql_backup.sh
 
#!/bin/bash
# db_name は自分で変更してください db_name = 'baizhan'
バックアップディレクトリ='/data/backup/mysql/'
現在の時刻=$(日付 +'%Y-%m-%d_%H%M%S')
ファイルパス=$backup_dir$current_time'.sql.gz'
#$db_password $db_user はここでは使用されません。これは構成ファイルに書き込まれています echo 'データベースのエクスポートを開始します...'
mysqldump --defaults-extra-file=/data/backup/my_mysql.cnf $db_name | gzip > $filepath
echo 'エクスポート成功、ファイル名: '$filepath

3. 新しい設定ファイルを作成する

現在のディレクトリ、つまり/data/backup

[root@izwz99z5o9dc90keftqhlrz バックアップ]# vi my_mysql.cnf
 
[mysqlダンプ]
最大許容パケット = 400M
ホスト=127.0.0.1
ユーザー=root
パスワード='SgDGfsrfEi3#@%#%ugslp%z!dAP'
[mysql]
ホスト=127.0.0.1
ユーザー=root
パスワード='SgDGfsrfEi3#@%#%ugslp%z!dAP'

読者の皆様、上記のパラメータをご自身のパラメータに変更してください。この手順を省略しないでください。

mysqldump の下のパラメータはエクスポート コマンドに使用され、mysql の下のパラメータはインポート時に使用されます。

4. ファイルの権限を与える

この時点で、エクスポートされたシェルスクリプトが書き込まれました。このスクリプトに実行権限を追加しましょう。

[root@izwz99z5o9dc90keftqhlrz バックアップ]# chmod +x ./mysql_backup.sh

5. コマンドを実行する

[root@izwz99z5o9dc90keftqhlrz バックアップ]# sh ./mysql_backup.sh
# 結果を確認する [root@izwz99z5o9dc90keftqhlrz バックアップ]# ll ./mysql 

6. 長期使用

正常にエクスポートされたファイルを解凍し、元のファイル サイズと圧縮されたファイル サイズを比較してみましょう。

[root@izwz99z5o9dc90keftqhlrz バックアップ]# gzip -dc ./mysql/2019-12-22_180359.sql.gz > ./mysql/2019-12-22_180359.sql
 
[root@izwz99z5o9dc90keftqhlrz バックアップ]# ll -sh ./mysql
合計 44K
 36K -rw-r--r-- 1 ルート ルート 36K 12月22日 18:06 2019-12-22_180359.sql
8.0K -rw-r--r-- 1 ルート ルート 5.9K 12月22日 18:03 2019-12-22_180359.sql.gz
 36Kb と 8Kb の比較。データベースが大きい場合は、より多くのスペースを節約できます。

ここまででエクスポートスクリプトは完了しました。次のステップはスクリプトをインポートすることです。

2番目: バックアップによるデータベースの回復

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

最初の手順を実行すると、/data/backup ディレクトリに移動するはずです。続行

[root@izwz99z5o9dc90keftqhlrz バックアップ]# vi mysql_restore.sh
#!/bin/bash
[ -z $1 ] || [ ! -f $1 ] の場合
それから
 echo "SQL 圧縮ファイル (*.sql.gz) を入力してください"
 出口1
フィ
#独自のデータベース名を入力してください db_name='jx_guides'
ベースディレクトリ='/data/backup/mysql/'
gz_sql_file=`ベース名 $1`
file_ext=${gz_sql_file##*.}
[ $file_ext != 'gz' ] の場合
それから
 echo 'ファイル形式が正しくありません。.sql.gz ファイルを入力してください'
 出口1
フィ
sql_file=${gz_sql_file%.*}
echo '解凍されたファイル内...'
gzip -dc $base_dir$gz_sql_file > $base_dir$sql_file
echo '解凍が完了しました。'
echo 'データベースのインポートを開始します...'
mysql --defaults-extra-file=/data/backup/my_mysql.cnf $db_name < $base_dir$sql_file
[ -f $base_dir$sql_file ]の場合
それから
 echo '一時ファイルを削除します。'
 rm -f $ベースディレクトリ$sqlファイル
フィ
echo 'インポートが完了しました。'

上記のコード内の構成ファイルは、最初の手順で作成した構成ファイルであり、ここでも同じように使用されます。

2. ファイルの実行権限を増やす

[root@izwz99z5o9dc90keftqhlrz バックアップ]# chmod +x ./mysql_restore.sh

3. バックアップファイルを使ってデータベースを復元しましょう

[root@izwz99z5o9dc90keftqhlrz バックアップ]# sh ./mysql_restore.sh ./mysql/2019-12-22_180359.sql.gz

ファイルを解凍します...
減圧が完了しました。
データベースのインポートを開始しています...
一時ファイルを削除します。
インポートが完了しました。

ここで、最初のパラメータはディレクトリを記述せずにバックアップファイルの名前を直接記述できますが、ディレクトリを追加した後はテーブルを使用して自動補完できるため、非常に便利です。その他の実行方法:実際には、理解している人は、それらはすべて同じであることを知っています

実際、どのフォルダでも復元でき、どの場所でも実行できます。

[root@izwz99z5o9dc90keftqhlrz バックアップ]# sh /data/backup/mysql_restore.sh /data/backup/mysql/2019-12-22_180359.sql.gz
 [root@izwz99z5o9dc90keftqhlrz mysql]# pwd を実行することもできます。
/データ/バックアップ/mysql
[root@izwz99z5o9dc90keftqhlrz mysql]# sh /data/backup/mysql_restore.sh 2019-12-22_180359.sql.gz

3番目: データベースバックアップの自動化

1. スケジュールされたタスクを追加する

[root@izwz99z5o9dc90keftqhlrz mysql]# crontab -e
 
# 次の内容を貼り付けます。自動データベース バックアップ 0 1,12 * * * /data/backup/mysql_backup.sh # 毎日 1 回、午前 1 時と午後 12 時にデータをバックアップします。

4番目: 期限切れのバックアップファイルをクリーンアップする

1. ファイルを削除するスクリプトを作成する

[root@izwz99z5o9dc90keftqhlrz mysql]# vi remove_backup.sh
#/bin/bash 
# 15日前のバックアップを削除する find /data/backup/mysql -type f -mtime +15 | xargs rm -f

ここでは最新の 15 日間のバックアップ データのみを保存することを選択しました。必要に応じて変更できます。

2. 実行権限を追加する

[root@izwz99z5o9dc90keftqhlrz mysql]# chmod +x ./remove_backup.sh
#15日前のバックアップを手動で削除します [root@izwz99z5o9dc90keftqhlrz mysql]# ./remove_backup.sh

3. 自動クリーンアップ

[root@izwz99z5o9dc90keftqhlrz mysql]# crontab -e
 
# 以下はスクリプトの内容です。この文を追加してください 0 1 * * * /data/backup/remove_backup.sh # 毎日午前1時に、15日前のバックアップを自動的に削除します [15はremove_backup.shで設定されています]

5番目: スケジュールされたタスク構成を投稿する

# 次の内容を貼り付けます。データベースの自動バックアップ 0 1,12 * * * /data/backup/mysql_backup.sh # 毎日午前 1 時と正午に 1 回データをバックアップします # 以下はスクリプトの内容です。この文を追加します 0 1 * * * /data/backup/remove_backup.sh # 毎日午前 1 時に、15 日前のバックアップを自動的に削除します [15 は remove_backup.sh で設定されています]

要約する

上記は、編集者が紹介した CentOS7 での MySQL のスケジュール自動バックアップの実装方法です。皆様のお役に立てれば幸いです。ご質問がある場合は、メッセージを残してください。編集者がすぐに返信します。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。
この記事が役に立ったと思われた方は、ぜひ転載していただき、出典を明記してください。ありがとうございます!

以下もご興味があるかもしれません:
  • LinuxはMySQLデータベースの自動バックアップとスケジュールバックアップを毎日実装しています
  • MySQLデータベースを定期的に自動バックアップする方法

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

>>:  Vue3は画像拡大鏡効果を実現します

推薦する

LINUX ポートが占有されているかどうかを確認します

ポートが占有されているかどうかは、これまで一度もわかりませんでした。多くの人に尋ねて、ようやくわかり...

Javascript 共通高階関数の詳細

目次1. 一般的な高階関数1.1、フィルター1.2、地図1.3、減らすHigher Order fu...

JavaScript の for/of、for/in の詳細な紹介

目次JavaScriptでは、 forループを記述する一般的な方法がいくつかあります。最初の、そして...

Vueを使い始める際に習得する必要がある知識について簡単に説明します

最も人気のあるフロントエンド フレームワークの 1 つとして、Vue は多くのフロントエンド開発エン...

MySQL 5.1 のパスワードを変更し、MySQL データベースにリモートでログインする方法

mysql ユーザーを作成し、承認します。形式: 「ユーザー パスワード」で識別されるユーザー@ログ...

MySQL の簡単な分析 - MVCC

バージョンチェーンInnoDB エンジン テーブルでは、クラスター化インデックス レコードに 2 つ...

Nodejs エラー処理プロセス記録

この記事では、接続エラー ECONNREFUSED を例に、Node.js がエラーを処理するプロセ...

Docker データ ストレージ tmpfs マウントの詳細な説明

この記事を読む前に、ボリュームとバインドマウントの基本を理解しておいてください。詳細については、次の...

MySQLストアドプロシージャにおけるカーソル(DECLARE)の原理と使い方の詳細な説明

この記事では、例を使用して、MySQL ストアド プロシージャにおけるカーソル (DECLARE) ...

MACOS で MySQL ルートパスワードを忘れた場合の解決策

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

CSS により、子コンテナが親要素を超えます (子コンテナは親コンテナ内で浮動します)

序文場合によっては、次の図のような浮動効果の要件が必要になります。 成し遂げる標準的な通常の状況では...

独自の Docker イメージを作成して Dockerhub にアップロードする方法

1. まず、自分のdockerhubアカウントを登録します。登録アドレス: https://hub....

HTML リスト ボックス、テキスト フィールド、ファイル フィールドのサンプル コード

ドロップダウンボックス、テキストフィールド、ファイルフィールド 上半分はデモンストレーション効果、下...

Ubuntu環境でのPHP関連のパスと変更方法

Ubuntu環境におけるPHP関連パスPHP パス /usr/bin/php phpize5 /us...