シェルを使用してMySQLデータバックアップスクリプトを作成する

シェルを使用してMySQLデータバックアップスクリプトを作成する

アイデア

それは実はとても簡単です

シェル スクリプトを記述して、mysql の mysqldump を介してデータを対応する sql ファイルにエクスポートします。Linux の crontab を使用して、対応するスクリプトを定期的に実行し、sql ファイルを対応するディレクトリに保存します。データ量とバックアップ頻度の増加に伴い、バックアップ サーバーのハード ディスク リソースの使用率も急激に上昇することが考えられます。この問題を解決するには、バックアップ コンテンツを定期的にクリーンアップする必要があります。私は単にシェル スクリプトを使用して、crontab を介して定期的にクリーンアップします。注

ここで注意すべき問題がいくつかあります。

mysqldump を介して対応するライブラリ テーブルの SQL をエクスポートすると、mysql サーバーのリソース消費 (cup、memory、io など) が必然的に発生します。mysqldump のデフォルトの方法ではテーブル ロックが発生し、これはひどいことであり、オンライン サービスの中断を引き起こします。一時的なものかもしれませんが、致命的です。(構成によってトランザクション モードに変更でき、テーブルをロックする必要はありません) データ量が増えると、mysqldump が SQL をエクスポートするのにかかる時間も長くなります。

もちろん、データのバックアップでは、対応する期間を選択し、対応する業務状況に応じてバックアップ サイクルを定義することができます。または、MySQL サーバーに多数のデータベースがある場合は、さまざまな業務に応じて異なる期間にバックアップすることもできます。 。 。具体的なビジネス状況によって異なります。

開発とテストのみで使用しているため、データ量はそれほど大きくなく、影響は無視できます。全員が退社した後にバックアップすれば問題ありません(そのため、毎晩12時にバックアップし、1か月後に先月のデータをクリーンアップするように設定しています)

1.mysqldumpの権限

mysqldump に必要な権限の説明:

mysqldump には少なくともテーブルに対する選択権限が必要です。ビューの場合、mysqldump には show view 権限が必要です。トリガーの場合、mysqldump にはトリガー権限が必要です。一貫性のあるバックアップを作成するには、mysqldump に lock tables 権限が必要です。

以下はユーザー作成数の推定値です(わからない場合は別途 Google で検索してください。詳細は説明しません)。

ユーザー dumper@'127.0.0.1' を作成します。
tempdb.* に対する選択権限を dumper@'127.0.0.1' に付与します。
dumper@'127.0.0.1' に tempdb.* の show view 権限を付与します。
dumper@'127.0.0.1' に tempdb.* のテーブルロックを許可します。
tempdb.* のトリガーを dumper@'127.0.0.1' に付与します。

2. シェルスクリプト(データエクスポートSQL)

#!/bin/sh

# データベース情報
DB_USER="ダンパー"
DB_PASS="..."
DB_HOST="..."
# データベース配列
DB_NAME=("ホテル" "食品" "フードウェブ")
# その他の変数
BIN_DIR="/usr/bin" #mysql bin パス
BCK_DIR="/home/mysql-backups" #バックアップファイルのディレクトリ
DATE=`日付 +%F`
# ファイルを作成
mkdir $BCK_DIR/$DATE
# やるべきこと
# /usr/bin/mysqldump --opt -ubatsing -pbatsingpw -hlocalhost timepusher > /mnt/mysqlBackup/db_`date +%F`.sql
${DB_NAME[@]}内のvarの場合;
する
  $BIN_DIR/mysqldump --opt --single-transaction --master-data=2 -u$DB_USER -p$DB_PASS -h$DB_HOST $DB_NAME > $BCK_DIR/$DATE/db_$var.sql
終わり

パラメータの説明:

--マスターデータ[=#]

バイナリ binlog ファイルの場所と名前をバックアップ エクスポート ファイルに追加します。値が 1 の場合、CHANGE MASTER ステートメントが追加されます。値が 2 の場合、CHANGE MASTER ステートメントの前にコメントが追加されます (機能しません~)
このパラメータは、--single-transactionを指定しない限り、テーブル--lock-all-tablesをロックします。
この場合、テーブル ロックはダンプの開始時に短時間のみ持続します。理論的には、ダンプ中のすべてのアクションは binlog ファイルに影響します。ダンプが完了すると、オプションによってテーブル ロック機能が自動的にオフになります。

--単一トランザクション

トランザクションとして実行

3. シェル スクリプト (スケジュールに従って N 日前のスクリプトを一括でクリアする)

#!/bin/sh
/home/mysql-backups -mtime +30 -name "*.*" -exec rm -Rf {} \; を見つけます。

例:

/home/lifeccp/dicom/studies: クリーンアップするディレクトリを準備します-mtime: 標準ステートメントの記述 +10: 10 日前のファイルを検索します。数字は日数を表します。+30 は 30 日前のファイルを検索することを意味します" . ": 検索するデータのタイプ。" .jpg" は拡張子 jpg のすべてのファイルを検索することを意味します。" " はすべてのファイルを検索することを意味します-exec: 固定の記述 rm -rf: ディレクトリを含むファイルを強制的に削除します{};: 検索の結果を it4.crontab スケジュールされた開始スクリプトに格納します

crontab -e
0 0 * * * /home/sh/mysql-backups/dump.sh
0 0 1 * * /home/sh/mysql-backups/del.sh
以下もご興味があるかもしれません:
  • HBASE でよく使用されるシェル コマンド、追加、削除、変更、クエリ メソッド
  • MySQL のスケジュールされたバックアップ、削除、および回復機能を実装するシェル スクリプト
  • MySQLクエリ結果をシェルで簡単に処理する方法
  • シェルでパスワードなしでMySQLデータベースに素早くログインする方法
  • シェルスクリプトを使用したMySQLデータベースの自動バックアップ
  • シェルスクリプトを使用して、mysql を追加、削除、変更、チェックし、my.cnf を構成します。

<<:  Win10 DVWA のダウンロード、インストール、構成のグラフィック チュートリアルの詳細な説明 (初心者向け学習侵入)

>>:  現在のブラウザが JavaScript でヘッドレス ブラウザであるかどうかを検出する方法

推薦する

スパンの最小高さを定義するソリューションは効果がありません

span タグは HTML ウェブページを作成するときによく使用されますが、このタグの使い方がよくわ...

強くお勧めします! Vue 3.2 でシンタックスシュガーを設定する

目次前の1. セットアップ構文シュガーとは何か2. セットアップコンポーネントを使用して自動的に登録...

MySQLの結合の基本原理についての簡単な説明

目次結合アルゴリズム駆動テーブルと非駆動テーブルの違い1. 単純なネストループ結合、単純なネスト、イ...

MySQL で explain ステートメントを使用する基本的なチュートリアル

目次1. 概要1. 説明文テスト2. 結果の各列の説明2. ID列の説明1. 環境整備2. expl...

コーディングスキルを向上させるためのJavaScriptのヒント

目次1. 一意の値をフィルタリングする2. 短絡評価2.1 シナリオ例3. ブール変換4. 文字列を...

JavaScriptスコープについての簡単な説明

目次1. 範囲1. グローバルな範囲2. ローカルスコープ2. 変数のスコープ1. グローバル変数2...

uni-app で scss を使用するサンプル コード

遭遇した落とし穴私は午後中ずっと、uni-app で scss を使用する際の落とし穴を解決すること...

シャトルボックス機能を実装するためのVueの詳細なコード

Vue - シャトルボックス機能を実装します。効果図は次のようになります。 CS 。移行{ ディスプ...

MySQL バックアップ スクリプトの書き方

序文:データベースのバックアップの重要性は、特にデータの損失が深刻な結果を招く可能性がある実稼働環境...

CentOs システムで Python と yum をアンインストールするソリューション

事故の背景: 数日前、プロジェクトの必要性により、サーバーに python-mysql モジュールを...

CSSのさまざまな背景、使用シナリオ、テクニックの詳細な分析

この記事はGitHub https://github.com/qq449245884/xiaozhi...

CSS の画像パスの問題に関する議論 (同じパッケージ/異なるパッケージ)

CSS ファイルでは、背景を使用する、つまり背景画像を追加する必要がある場合があります。これは通常、...

MySQL ジョイントインデックス(複合インデックス)の実装

共同インデックスこの記事におけるジョイントインデックスの定義は次のとおりです (MySQL): AL...

Vueルーティングナビゲーションガードの簡単な理解

目次1. グローバルガード1. グローバル前線警備2. グローバル解像度ガード3. グローバルポスト...

mysql5.6 以前のデータベースで json をクエリする方法

MySQLにデータを保存するとき、乱雑であまり使用されないデータがJSONフィールドに投げ込まれるこ...