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. JavaScriptで反映する2.1 Reflect.get(タ...

MySQL での mysqladmin 日常管理コマンドの概要 (必読)

mysqladmin ツールの使用形式は次のとおりです。 mysqladmin [オプション] コ...

JavaScriptの信頼性の低い未定義

undefined JavaScript では、値が undefined かどうかを判断したい場合は...

垂直グリッドと漸進的な行間隔の例

新しい質問急いで来て、急いで行ってください。 「垂直グリッドとプログレッシブ行間隔 (パート 1)」...

Zabbix 監視 Docker アプリケーション構成

コンテナの応用はますます一般的になっていますが、大量のコンテナをどのように管理すればよいのでしょうか...

Linux での i3 ウィンドウ マネージャーの設定と使用に関するチュートリアル

この記事では、Fedora 28 に i3 をインストールして簡単に設定する方法を説明します。 1....

メモリの原則に関する詳細な説明: JS では変数はヒープに保存されるのか、スタックに保存されるのか?

目次1. 冷蔵庫に入りきらない象2. シャドウクローン文字列3. 実際に見た「奇妙なボール」 4. ...

MySQL カウントを向上させる方法のまとめ

多くのプログラマーは MySQL に精通していると思います。多くの人が count の使い方と、最適...

Vue における v-for のキーの一意性の詳細な説明

目次1. DOM の違い2. 同じレイヤーの同じタイプの要素にキー属性を追加する3. キーはインデッ...

Vue.js フロントエンドプロジェクト向け多言語ソリューションのアイデアと実践

目次1. 通常どのようなコンテンツを処理する必要があるか2. 基本的な考え方3. 具体的な実践の詳細...

Linux カーネル デバイス ドライバー仮想ファイル システムに関する注意事項

/******************** * 仮想ファイルシステム VFS **********...

mysqlサーバーは--skip-grant-tablesオプションで実行されています

MySQLサーバーは--skip-grant-tablesオプションで実行されているため、このステー...

Vue cli開発に基づく外部コンポーネントVantのデフォルトスタイルの変更の詳細な説明

目次序文1. 少ない2. コンポーネントをインポートする3. 設定ファイルを変更するステップ1: l...

文字列の最初の文字を取得してテキストアイコン機能を実現する純粋なCSS

CSS でテキストアイコンを実装する方法 /*アイコンスタイル*/ .nav-icon-norma...

MySQL ジョイントテーブル更新デー​​タの詳細な例

1.MySQL UPDATE JOIN構文MySQL では、UPDATE ステートメントでJOIN句...