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の再起動 読んでいただきありがとうございます。お役に立てれば幸いです。このサイトをサポートしていただきありがとうございます。 以下もご興味があるかもしれません:
|
>>: Linux でシステム ディスクを初期化した後にデータ ディスクを再マウントする方法
目次1. 配列を結合する2. 配列をマージする(最初に) 3. 配列の複製4. 構造化分解割り当て5...
XAML レイアウトを使用する場合、インターフェイスを Metro 風にするために、一部のボタンでは...
効果プレビュー右側の「クリックしてプレビュー」ボタンを押すと現在のページでプレビューが表示され、リン...
目次1 設定ディレクトリとデータディレクトリを作成する3 イメージからホストに構成ファイルをコピーす...
目次1. 指令とは何ですか? Vue でよく使われる組み込みの v ディレクティブv-if と v-...
序文ゲートウェイプロジェクトを開発する場合、署名 sign_key 情報はリクエスト時にリクエスト ...
目次1. 画像のバイナリデータを表示する方法2. 絵の種類の見分け方3. 画像の種類を検出する方法3...
序文:一部のアプリケーション シナリオでは、成績や年齢によるランキングなど、ランキングの問題が発生す...
この記事の内容: ページ中空マスクレイヤー、ページ中空マスクガイドレイヤー、画像中空マスク通常のマス...
導入JavaScript はデフォルトでシングルスレッドであるため、コードは並列実行するための新しい...
1. ダウンロード2. 減圧3. パス環境変数を追加し、mysqlが配置されているbinディレクトリ...
目次FileReaderはローカルファイルまたはBLOBを読み取ります1. FileReaderの使...
Vue では、ほとんどの場合、テンプレートを使用して HTML を作成することを推奨しています。ただ...
<テンプレート> <div id="ルート"> <...
目次シナリオタスクアイデア分析するコンセプトと選択ちょっとしたテスト環境説明予防実践テスト引用シナリ...