본 글에서는 Mysql 데이터베이스 테이블 정기 백업 실시 관련 내용을 주로 소개하고 있습니다. 필요하신 분들은
Mysql 데이터베이스 정기 백업 실시를 참고하시기 바랍니다. 테이블
0. 배경
실제 개발 환경에서는 프론트엔드 프로그램에서 MySQL이 지정한 데이터베이스 테이블에 데이터를 업데이트/삽입해야 합니다. 주어진 기간. 데이터의 양이 증가하고 기본 데이터베이스 테이블의 기본 개수가 증가함에 따라 업데이트할 때마다 약 5초 정도의 지연이 발생합니다.
개선 계획 1: 일괄 업데이트, 누적 10개 또는 100개 항목이 한 번 업데이트되어 저장됩니다.
개선 계획 2: 현재 날짜로부터 1개월 전의 데이터를 백업하고, 현재 데이터베이스 테이블에서 1개월 전의 데이터를 삭제하세요. 이 방법은 액세스 효율성을 어느 정도 향상시키는 것으로 확인되었습니다. 근본 원인: 기본 테이블의 카디널리티가 작아서 쿼리의 효율성이 상대적으로 향상되었습니다.
1. 데이터베이스 테이블 정기 백업 요약
1단계: Mysql이 지정한 데이터베이스에 지정한 데이터베이스 테이블을 백업한다.
mysqldump를 사용하여 기간을 30일로 설정하세요.
2단계: 60일 전에 백업한 파일과 압축 패키지를 삭제합니다.
3단계: 데이터베이스 테이블에서 현재 날짜로부터 30일 전의 데이터를 삭제합니다. (1단계는 이미 백업되어 있습니다.)
4단계: 타이머를 설정합니다.
crontab 설정.
rreee2. 일정 설정: 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!