この記事では主にMysqlデータベーステーブルの定期バックアップの実装に関する関連情報を紹介しますので、必要な方は
Mysqlデータベーステーブル
0の定期バックアップの実装を参照してください。実際の開発環境では、フロントエンド プログラムは、一定期間内に MySQL で指定されたデータベース テーブルにデータを更新/挿入する必要があります。データ量が増加し、基本データベーステーブルの基数が増加すると、更新のたびに5秒程度のタイムラグが発生します。
改善案1:
バッチ更新、10件または100件の累積数を一度更新して保存します。
改善案2:
現在の日付の1か月前のデータをバックアップし、1からデータを削除します。現在のデータベース テーブルの 1 か月前。この方法により、アクセス効率がある程度向上することが確認されている。根本原因: ベース テーブルのカーディナリティが小さいため、クエリ効率が比較的向上しています。
1. データベーステーブルの定期バックアップの概要ステップ 1: Mysql で指定したデータベース内の指定したデータベーステーブルをバックアップします。
mysqldump を使用して、期間を 30 日に設定します。 ステップ 2: 60 日前にバックアップされたファイルと圧縮パッケージを削除します。
ステップ 3: 現在の日付の 30 日前のデータベース テーブルのデータを削除します。 (ステップ 1 はすでにバックアップされています)。
ステップ 4: タイマーを設定します。
crontabの設定。
[root@mysql_bak]# cat mysql_bak.sh #!/bin/sh #DATABASE INFO DB_NAME="ppdb" DB_USER="root" DB_PASS="password" DISPOSE_TABLE="dispose_ticles" RST_TABLE="match_rst" DB_IP=100.55.1.129 BIN_DIR="/usr/bin" BAK_DIR="/home/mysql_bak/data" DATE=`date +%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 day ago' +%Y-%m-%d` echo "delete_date=$delete_date" #删除rst表信息 rst_sql="delete from $RST_TABLE where update_time <= $delete_date order by update_time;"; echo "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"); echo $ret #删除dispose表信息 dispose_sql="delete from $DISPOSE_TABLE where judge_time <= $delete_date order by judge_time;"; echo "dispose_sql=$dispose_sql" ret=$(mysql -h${DB_IP} $DB_NAME -e "$dispose_sql"); echo $ret
[root@mysql_bak]# cat /etc/crontab SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # For details see man 4 crontabs # Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed 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サービスを再起動します
service crond restart
以上がMysql データベース テーブルの定期バックアップのサンプル コードの詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。