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

推薦する

CenterOS7 インストールおよび構成環境 jdk1.8 チュートリアル

1. まずcenterosに付属のJDKをアンインストールします rpm-qa|grepopenjd...

JavaScript キャンバスはマウスの動きに合わせてボールを動かすことを実装します

この記事の例では、マウスに従ってボールを動かすjsの具体的なコードを参考までに共有しています。具体的...

HTMLはフォームタグを使用して登録ページのサンプルコードを実装します。

ケースの説明: - ページ効果を実現するためにテーブルを使用する- ハイパーリンクを機能させたくない...

JavaScript のフラット配列をツリー構造に変換する例

目次バックグラウンドで10,000個のデータが失われた再帰法非再帰的方法要約するバックグラウンドで1...

mysql 5.7.23 winx64 解凍バージョンのインストールチュートリアル

参考までに、mysql-5.7.23-winx64 解凍版の詳細なインストールチュートリアルです。具...

Vue 父子価値移転、兄弟価値移転、子父価値移転の詳細な説明

目次1. 親コンポーネントが子コンポーネントに値を渡す1. 親コンポーネント.vue 2. サブコン...

Xmeter APIインターフェーステストツールの使用状況の分析

XMeter API は、以下のサービスを含む、JMeter に基づくワンストップのオンライン イン...

CSSを使用して中央に固定された2つの列と適応型列を実現する方法

1. 絶対位置とマージンを使用するこの方法の原則は、左側と右側をドキュメントの流れから外れるように配...

CSSでフレックス配置を表示する(レイアウトツール)

display: flex レイアウトに関しては、深く理解している人もいますし、私も他の人の作業か...

CSS 表示テーブルの適応的な高さと幅の問題の解決策

定義と使用法display プロパティは、要素が生成するボックスのタイプを指定します。例示するこの属...

Python 仮想環境のインストールとアンインストールの方法と発生する問題

Ubuntu16.04 のインストールとアンインストール pip実験環境Ubuntu 16.04; ...

Vueのアイデアを使ってストレージをカプセル化する方法

目次背景関数目的アイデアの源成し遂げるセット得るプロパティの削除拡張機能を禁止するもっている要約する...

60件のページング事例と優れた実践例を推奨

<br />構造と階層により複雑さが軽減され、読みやすさが向上します。記事やサイトが整理...

Linux プラットフォームでの Zabbix エージェントのインストールと設定方法

ここでは、Linux プラットフォームでの Zabbix エージェントのインストールと構成について簡...

よく知られているブラウザのDOCTYPEモード選択メカニズム

ドキュメントの範囲この記事では、Firefox やその他の Gecko ベースのブラウザ、Safar...