詳細介紹Mysql數據庫表定期備份實現的示例代碼

這篇文章主要介紹了mysql數據庫表定期備份的實現詳解的相關資料,需要的朋友可以參考下

Mysql數據庫表定期備份的實現

0.背景

實際開發環境中,前端程序需要在給定時間段內,將數據更新/插入到MySQL指定的庫表中。隨著數據量的增多,基礎庫表基數的增長,每更新一次都會有5s左右的卡頓。

改進方案一:批量更新,累計數10條或者100條進行一次更新入庫操作;

改進方案二:將當前日期前1個月之前的數據進行備份操作,并刪除當前庫表中1個月前的數據。經測定,該方法一定程度提高了訪問效率。根因:基礎表基數少,mysql數據庫效率相對提高。

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?&gt;?$BAK_DIR/$DISPOSE_TABLE.dump_$DATE.sql  $BIN_DIR/mysqldump?$DB_NAME?$DISPOSE_TABLE?|?gzip?&gt;?$BAK_DIR/$DISPOSE_TABLE.dump_$DATE.sql.gz    $BIN_DIR/mysqldump?$DB_NAME?$RST_TABLE?&gt;?$BAK_DIR/$RST_TABLE.dump_$DATE.sql  $BIN_DIR/mysqldump?$DB_NAME?$RST_TABLE?|?gzip?&gt;?$BAK_DIR/$RST_TABLE.dump_$DATE.sql.gz    #定期刪除60天的備份包  find?$BAK_DIR?-name?"name_*.sql.gz"?-type?f?-mtime?+60?-exec?rm?{}?;?&gt;?/dev/null?2&gt;&amp;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?<p><strong>2.定時設置:每隔30天的1點進行備份。</strong></p><pre class="brush:bash;">[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?&gt;?/dev/null?2&gt;&amp;1    [root@mysql_bak]#?crontab?-e  0?1?*/30?*?*?/home/mysql_bak/mysql_bak.sh?&gt;?/dev/null?2&gt;&amp;1

重啟crontab服務?

service?crond?restart

? 版權聲明
THE END
喜歡就支持一下吧
點贊6 分享