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

推薦する

Node.js での SerialPort モジュールの使用

目次目的モジュールのインストール基本的な使い方ポートをスキャンする開いているポートデータの送信データ...

JavaScript の instanceof メソッドの手動実装

1. instanceofの使用法instanceof演算子は、コンストラクター関数のprototy...

ElementUI ページネーション コンポーネントの使い方 Vue でのページネーション

ElementUIページングコンポーネントPagination in Vueの使用は参考になります。...

MySQLは文字列の連結、インターセプション、置換、位置検索操作を実装しています

MySQL 文字列の連結、インターセプト、置換、および検索位置。よく使用される文字列関数:関数例示す...

ホームページのデザインはウェブデザイナーのレベルを最もよく反映する

私がこれまで携わってきた多くのプロジェクトでは、基本的に避けられない悪循環がありました。それは、ホー...

Windows10のマウスを模倣して境界線を光らせる効果を実現するCSSの詳細解説

最新の Windows 10 アップデートをインストールした後、システム UI の詳細な効果が顕著に...

DIVマスクを使用して、マウスでチェックボックスを直接チェックすることが無効である問題を解決します

フロントエンドの開発過程で、チェックボックスが必要な状況が発生しました。ユーザー操作の利便性を考慮し...

マウス追従ゲームを実現するjs

この記事では、マウス追従ゲームを実装するためのjsの具体的なコードを参考までに共有します。具体的な内...

NginxとLuaによるグレースケールリリースの実装

memcachedをインストールする yum インストール -y memcached #memcac...

LeetCode の SQL 実装 (181. 従業員は管理職よりも収入が高い)

[LeetCode] 181.従業員の収入が管理職よりも多い従業員テーブルには、マネージャーを含む...

HTMLとは何ですか?

HTML 開発の歴史: HTML は英語で Hypertext Marked Language の...

three.js で 3D ダイナミック テキスト効果を実現する方法

序文みなさんこんにちは。CSS ウィザードの alphardex です。以前、海外のウェブサイトを閲...

MySQLが正常にインストールされたかどうかを確認する方法

MySQL をインストールした後、DOS ウィンドウまたは MySQL 5.7 コマンドライン クラ...

Ubuntu 20.04 Firefox でビデオを再生できない (Flash プラグインがない) 場合の解決策

1. Flashプラグインパッケージのダウンロードアドレス: https://get.adobe.c...

Mysql Explainコマンドの使用と分析

mysql explain コマンドは、MySQL がインデックスを使用して選択ステートメントを処理...