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 でシステム ディスクを初期化した後にデータ ディスクを再マウントする方法

推薦する

React forwardRefの使い方と注意点

これまで react.forwardRef は react の高階コンポーネントには適用できませんで...

5分でWebRTCビデオチャットを構築する

前回の記事では、Ubuntu 上の webrtc ベースの多人数ビデオチャット サービスの詳細なコー...

MySQLデータ損失の原因と解決策

目次序文問題の説明原因分析拡大する総括する序文最近、データの欠落やデータの損失に関するフィードバック...

ミニプログラム録画機能の実装

序文ミニプログラムを開発する過程では、録音機能を実装し、録音を再生し、録音をサーバーにアップロードす...

Docker Composeを使用してDOCleverをインストールする詳細なプロセスを説明します

目次1. Docker Composeとは何か、インストールして使用する方法2. DOCleverと...

MySQL 中断された接続警告ログの分析

序文:場合によっては、MySQL に接続されたセッションが異常終了することが多く、エラー ログに「通...

MySQL 5.7.18 MSI インストール グラフィック チュートリアル

この記事では、参考までにMySQL 5.7.18 MSIインストールチュートリアルを紹介します。具体...

ウェブページを作成するために最もよく使用されるHTMLタグ

1. よく使われるHTMLタグの最適化HTML は Web 編集者にとって基本的なスキルであるべきで...

MySQLデータベースインデックスの詳細な紹介

目次マインドマップシンプルな理解インデックスモデルの進化二分探索木自己バランス型二分木BツリーB+ ...

MySQL のテーブル内のレコード数を制限する方法

目次1. トリガーソリューション2. パーティションテーブルソリューション3. 一般的な表領域ソリュ...

Ansible を使用した Nginx のバッチ デプロイのサンプル コード

1.1 nginxインストールパッケージとインストールスクリプトをクライアントにコピーし、スクリプト...

デスクトップ仮想化を実現するために Hyper-V を展開する手順 (グラフィック チュートリアル)

Hyper-V を展開するためのハードウェア要件は次のとおりです。 64 ビット プロセッサ、具体...

Node.jsがES6モジュールを処理する方法の詳細な説明

目次1. 2つのモジュールの違い2. Node.jsとの違い3. CommonJSモジュールの読み込...

JavaScript における型の必須および暗黙的な変換の詳細な説明

目次1. 暗黙的な変換二重等号での変換ブール型変換「+」と「-」 2. 強制型変換' ...