MySQLデータベーステーブルの定期バックアップの実装の詳細な説明

MySQLデータベーステーブルの定期バックアップの実装の詳細な説明

Mysqlデータベーステーブルの定期的なバックアップの実装

0. 背景

実際の開発環境では、フロントエンドプログラムは、指定された時間内にMySQLで指定されたデータベーステーブルにデータを更新/挿入する必要があります。データ量が増加し、基本的なデータベース テーブルのベースが大きくなると、更新ごとに約 5 秒の遅延が発生します。

改善計画 1:バッチ更新、10 件または 100 件のレコードを蓄積して更新操作を実行します。

改善計画 2:現在の日付の 1 か月前のデータをバックアップし、現在のデータベース テーブル内の 1 か月前のデータを削除します。この方法により、アクセス効率がある程度向上することが確認されています。根本原因: ベース テーブルのカーディナリティが小さいため、クエリの効率が比較的向上します。

1. データベーステーブルのスケジュールされたバックアップの概要

ステップ 1: MySQL で指定されたデータベース テーブルをバックアップします。

mysqldump を使用して、期間を 30 日に設定します。

手順 2: 60 日以上経過したバックアップ ファイルと圧縮パッケージを削除します。

ステップ 3: 現在の日付から 30 日前のデータベース テーブルのデータを削除します。 (手順 1 でバックアップが作成されています)。

ステップ4: タイマーを設定します。

crontab 設定。

[root@mysql_bak]# cat mysql_bak.sh
#!/bin/sh
#データベース情報
DB_NAME="ppdb"
DB_USER="ルート"
DB_PASS="パスワード"
DISPOSE_TABLE="テーブルを破棄"
RST_TABLE="マッチ_rst"
DB_IP=100.55.1.129

BIN_DIR="/usr/bin"
BAK_DIR="/home/mysql_bak/data"
日付=`日付 +%Y%m%d_%H%M%S`

#mkdir -p $BAK_DIR
# 圧縮パッケージを形成するためのバックアップ パッケージ $BIN_DIR/mysqldump $DB_NAME $DISPOSE_TABLE > $BAK_DIR/$DISPOSE_TABLE.dump_$DATE.sql
$BIN_DIR/mysqldump $DB_NAME $DISPOSE_TABLE | gzip > $BAK_DIR/$DISPOSE_TABLE.dump_$DATE.sql.gz

$BIN_DIR/mysqldump $DB_NAME $RST_TABLE > $BAK_DIR/$RST_TABLE.dump_$DATE.sql
$BIN_DIR/mysqldump $DB_NAME $RST_TABLE | gzip > $BAK_DIR/$RST_TABLE.dump_$DATE.sql.gz

#60日間のバックアップパッケージを定期的に削除する find $BAK_DIR -name "name_*.sql.gz" -type f -mtime +60 -exec rm {} \; > /dev/null 2>&1

# 指定されたデータベース テーブル データを 30 日前 (現在の時刻から 30 日前) に削除します。
delete_date=`date --date='30日前' +%Y-%m-%d`
エコー「delete_date=$delete_date」

# rst テーブル情報を削除します rst_sql="delete from $RST_TABLE where update_time <= $delete_date order by update_time;";

エコー "rst_sql=$rst_sql"
#ret=$(mysql -u $DB_USER -h ${DB_IP} -p${DB_PASS} $DB_NAME -e "$sql");
ret=$(mysql -h${DB_IP} $DB_NAME -e "$rst_sql");
$retをエコーする

# 破棄テーブル情報を削除します。dispose_sql="delete from $DISPOSE_TABLE where judge_time <= $delete_date order by judge_time;";
「dispose_sql=$dispose_sql」をエコーし​​ます
ret=$(mysql -h${DB_IP} $DB_NAME -e "$dispose_sql");
$retをエコーする

2. スケジュール設定:30日ごとに1:00にバックアップします。

[root@mysql_bak]# cat /etc/crontab
シェル=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=ルート
ホーム=/

# 詳細については man 4 crontabs を参照してください

# ジョブ定義の例:
# .---------------- 分 (0 - 59)
# | .------------- 時間 (0 - 23)
# | | .---------- 月日 (1 - 31)
# | | | .------- 月 (1 - 12) または jan、feb、mar、apr ...
# | | | | .---- 曜日 (0 - 6) (日曜日 = 0 または 7) または sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * ユーザー名 実行するコマンド
0 1 */30 * * /home/mysql_bak/mysql_bak.sh > /dev/null 2>&1

[root@mysql_bak]# crontab -e
0 1 */30 * * /home/mysql_bak/mysql_bak.sh > /dev/null 2>&1

crontabサービスを再起動する

サービスcrondの再起動

読んでいただきありがとうございます。お役に立てれば幸いです。このサイトをサポートしていただきありがとうございます。

以下もご興味があるかもしれません:
  • 非常に包括的なMysqlデータベース、データベーステーブル、データの基本操作メモ(コードを含む)
  • PHP+mysqli メソッドを使用してデータベース テーブル プレフィックスを一括で置換する
  • MySQL データベース テーブル修復 MyISAM
  • シェルを使用してMySQLデータベーステーブルをチェックおよび修復するスクリプト
  • MySQLデータベーステーブルをチェックおよび修復する具体的な方法
  • MySQLでデータベースとデータベーステーブルコードを作成する
  • MySQL データベース テーブルからランダム データを抽出するコード

<<:  ES6 ループと反復可能オブジェクトの例

>>:  Linux でシステム ディスクを初期化した後にデータ ディスクを再マウントする方法

推薦する

JavaScript のショートカットのヒント

目次1. 配列を結合する2. 配列をマージする(最初に) 3. 配列の複製4. 構造化分解割り当て5...

XAML でボタンを円として再描画する方法

XAML レイアウトを使用する場合、インターフェイスを Metro 風にするために、一部のボタンでは...

純粋な CSS を使用して脈動するローダー効果のソースコードを作成する

効果プレビュー右側の「クリックしてプレビュー」ボタンを押すと現在のページでプレビューが表示され、リン...

Docker ケース分析: MySQL データベース サービスの構築

目次1 設定ディレクトリとデータディレクトリを作成する3 イメージからホストに構成ファイルをコピーす...

Vueカスタム命令とその使用方法の詳細な説明

目次1. 指令とは何ですか? Vue でよく使われる組み込みの v ディレクティブv-if と v-...

Nginx プロキシ使用時にヘッダーに「_」が含まれることで情報が失われる問題の解決方法

序文ゲートウェイプロジェクトを開発する場合、署名 sign_key 情報はリクエスト時にリクエスト ...

ファイルの種類を検出するJavaScriptメソッド

目次1. 画像のバイナリデータを表示する方法2. 絵の種類の見分け方3. 画像の種類を検出する方法3...

MySQL における一般的なランキングの問題をいくつかまとめます

序文:一部のアプリケーション シナリオでは、成績や年齢によるランキングなど、ランキングの問題が発生す...

CSS で中空マスク レイヤーを実装するサンプル コード

この記事の内容: ページ中空マスクレイヤー、ページ中空マスクガイドレイヤー、画像中空マスク通常のマス...

Node.js における非同期プログラミングの知識ポイントの詳細な説明

導入JavaScript はデフォルトでシングルスレッドであるため、コードは並列実行するための新しい...

mysql 5.7.18 winx64 無料インストール設定方法

1. ダウンロード2. 減圧3. パス環境変数を追加し、mysqlが配置されているbinディレクトリ...

jsはFileReaderを使用してローカルファイルまたはBLOBを読み取ります

目次FileReaderはローカルファイルまたはBLOBを読み取ります1. FileReaderの使...

Vue.jsのレンダリング関数の使い方の詳しい説明

Vue では、ほとんどの場合、テンプレートを使用して HTML を作成することを推奨しています。ただ...

VueのTodoListケースの詳しい説明

<テンプレート> <div id="ルート"> <...

Docker クロスサーバー通信オーバーレイソリューション (パート 1) Consul 単一インスタンス

目次シナリオタスクアイデア分析するコンセプトと選択ちょっとしたテスト環境説明予防実践テスト引用シナリ...