ホームページ >データベース >mysql チュートリアル >Mysql データベース テーブルの定期バックアップのサンプル コードの詳細な紹介

Mysql データベース テーブルの定期バックアップのサンプル コードの詳細な紹介

黄舟
黄舟オリジナル
2017-03-21 13:31:301045ブラウズ

この記事では主に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

2. スケジュール設定: 30 日ごとの 1 時にバックアップします。

[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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。