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は画像拡大鏡効果を実現します

推薦する

フロントエンドセキュリティの詳細な説明: JavaScript の http ハイジャック対策と XSS

目次HTTP ハイジャック、DNS ハイジャック、XSS HTTPハイジャックDNSハイジャックXS...

Docker の MySQL コンテナのタイムゾーン問題の修正

序文Ahhang が Springboot プロジェクトを開発していたとき、フロントエンドから検証コ...

ウェブサイトのハイパーリンクを開く方法に関する議論

新しいウィンドウが開きます。 利点: ユーザーがリンクをクリックしても、現在閲覧しているコンテンツは...

DockerにTomcatコンテナを追加したときにホームページにアクセスできない問題の解決方法

質問docker run コマンドを使用して、tomcat コンテナが正常に追加されました。ポートも...

DockerはホストのMysql操作に接続します

今日、会社のプロジェクトでは docker を設定する必要があります。Windows に正常にインス...

CSS が初期読み込み時の白い画面の時間に与える影響

外部 CSS ファイルを使用したレンダリング パイプライン上図では、HTML データの要求から DO...

MySql のサブクエリ内のクエリ例の詳細な説明

北西を見ると私の故郷はどこにあるでしょうか。南東の満月を何度見たことがあるでしょうか。月が再びゆっく...

Tomcat セキュリティ仕様 (Tomcat セキュリティ強化と仕様)

tomcat はオープンソースの Web サーバーです。Tomcat ベースの Web は実行効率...

Node.jsサービスDockerコンテナアプリケーション実践のまとめ

この記事では、Docker コマンドの使用とインストールについては説明しません。Docker を基礎...

MySQL countの詳細な説明と関数のサンプルコード

mysql countの詳細な説明count関数はテーブルや配列内のレコードを数えるために使われます...

弾幕効果を実現するためのjQuery

この記事では、弾幕効果を実現するためのjQueryの具体的なコードを参考までに共有します。具体的な内...

Tomcatが親の委任メカニズムを破壊する方法についての簡単な説明

目次JVM クラスローダーTomcat クラスローダークラスを検索ロードクラスクラスをロードしようと...

MySql8.0.19 インストールピットレコードを共有する

前回の記事ではMySql8.0.19のインストール手順を紹介しました。必要な方はクリックしてご覧くだ...

yum インストールエラーの問題を解決する 保護されたマルチライブラリバージョン

現在、クラウドサーバーに nginx をインストールする際、最初に zlib などの依存ライブラリを...

Windows サービス 2012 Alibaba Cloud サーバーで MySQL をビルドするときに msvcr100.dll ファイルが見つからないという問題を解決します

解決策1: msvcr100.dll ファイルをダウンロードし (インターネットからソース ファイル...