详细介绍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 分享