>  기사  >  데이터 베이스  >  MySQL 데이터베이스 테이블 정기 백업을 위한 샘플 코드에 대한 자세한 소개

MySQL 데이터베이스 테이블 정기 백업을 위한 샘플 코드에 대한 자세한 소개

黄舟
黄舟원래의
2017-03-21 13:31:301035검색

본 글에서는 Mysql 데이터베이스 테이블 정기 백업 실시 관련 내용을 주로 소개하고 있습니다. 필요하신 분들은

Mysql 데이터베이스 정기 백업 실시를 참고하시기 바랍니다. 테이블

0. 배경

실제 개발 환경에서는 프론트엔드 프로그램에서 MySQL이 지정한 데이터베이스 테이블에 데이터를 업데이트/삽입해야 합니다. 주어진 기간. 데이터의 양이 증가하고 기본 데이터베이스 테이블의 기본 개수가 증가함에 따라 업데이트할 때마다 약 5초 정도의 지연이 발생합니다.

개선 계획 1: 일괄 업데이트, 누적 10개 또는 100개 항목이 한 번 업데이트되어 저장됩니다.

개선 계획 2: 현재 날짜로부터 1개월 전의 데이터를 백업하고, 현재 데이터베이스 테이블에서 1개월 전의 데이터를 삭제하세요. 이 방법은 액세스 효율성을 어느 정도 향상시키는 것으로 확인되었습니다. 근본 원인: 기본 테이블의 카디널리티가 작아서 쿼리의 효율성이 상대적으로 향상되었습니다.

1. 데이터베이스 테이블 정기 백업 요약

1단계: Mysql이 지정한 데이터베이스에 지정한 데이터베이스 테이블을 백업한다.

mysqldump를 사용하여 기간을 30일로 설정하세요.

2단계: 60일 전에 백업한 파일과 압축 패키지를 삭제합니다.

3단계: 데이터베이스 테이블에서 현재 날짜로부터 30일 전의 데이터를 삭제합니다. (1단계는 이미 백업되어 있습니다.)

4단계: 타이머를 설정합니다.

crontab 설정.

rreee

2. 일정 설정: 30일마다 1시에 백업합니다.

[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

crontab 서비스 다시 시작

[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

위 내용은 MySQL 데이터베이스 테이블 정기 백업을 위한 샘플 코드에 대한 자세한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.