您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息
免费发信息
三六零分类信息网 > 上饶分类信息网,免费分类信息发布

定时对大数据量的表进行分表对数据备份

2024/4/7 21:44:00发布32次查看
工作中遇到数据库中一个表的数据量比较大,属于日志表。正常情况下是不会有查询操作的,但如果不进行分表数据太多,执行一条简单
工作中遇到数据库中一个表的数据量比较大,属于日志表。正常情况下是不会有查询操作的,但如果不进行分表数据太多,执行一条简单sql语句要等好几分钟。。
分表工具:linux的shell + mysql自身提供的管理命令
原理:使用一个和原表数据结构一样的表,替换原表。
linux shell内容如下:
=======================开始
date=`date +%y%m%d`   #当前日期备份
backup_directory=/var/db_backup  #备份的目录,主要存放备份中需要的临时表
db_user=root               #数据库用户
db_pwd=123456         #数据库密码
wsm_appentryreqlog_shell=$backup_directory/db_appentryreqlog_shell.sql                     #替换表db_appentryreqlog时执行的sql命令文件存放位置
wsm_adentryshowrecord_shell=$backup_directory/db_adentryshowrecord_shell.sql      #替换表 db_adentryshowrecord时执行的sql命令文件存放位置
wsm_appentryreqlog_file=$backup_directory/db_appentryreqlog_nodata.sql                    #导出表db_appentryreqlog结构时的文件存放位置
wsm_adentryshowrecord_file=$backup_directory/db_adentryshowrecord_nodata.sql     #导出表db_adentryshowrecord结构时的文件存放位置
rm -f $wsm_appentryreqlog_file                                                                                                   #如果已经存在文件,,则删除
rm -f $wsm_adentryshowrecord_file                                                                                           #如果已经存在文件,则删除
mysqldump -u$db_user -p$db_pwd -d db db_appentryreqlog > $wsm_appentryreqlog_file    #导出表结构
mysqldump -u$db_user -p$db_pwd -d db db_adentryshowrecord > $wsm_adentryshowrecord_file  #导出表结构
sed -i s/wsm_appentryreqlog/db_appentryreqlog_new/ $wsm_appentryreqlog_file                         #将导出的表结构中表名称wsm_appentryreqlog替换为临时名称db_appentryreqlog_new
sed -i s/wsm_adentryshowrecord/db_adentryshowrecord_new/ $wsm_adentryshowrecord_file   #同上
sed -i 's/auto_increment=[0-9]\+/auto_increment=1/' $wsm_appentryreqlog_file                     #新表结构,id自增值重置为1
sed -i 's/auto_increment=[0-9]\+/auto_increment=1/' $wsm_adentryshowrecord_file
sed -i s/db_appentryreqlog_bak/db_appentryreqlog_$date/ $wsm_appentryreqlog_shell                            #将db_appentryreqlog_shell.sql文件中的备份表名称根据日期动态替换
sed -i s/db_adentryshowrecord_bak/db_adentryshowrecord_$date/ $wsm_adentryshowrecord_shell      #同上
#cat $wsm_appentryreqlog_file
#echo '---------------------------------------------------------------------------------1'
#cat $wsm_adentryshowrecord_file
#echo '---------------------------------------------------------------------------------2'
#cat $wsm_appentryreqlog_shell
#echo '---------------------------------------------------------------------------------3'
#cat $wsm_adentryshowrecord_shell
#echo '---------------------------------------------------------------------------------4'
#以上准备工作完成,开始替换表
mysql -u$db_user -p$db_pwd db
mysql -u$db_user -p$db_pwd db
mysql -u$db_user -p$db_pwd db
mysql -u$db_user -p$db_pwd db
#恢复文件db_appentryreqlog_shell.sql和db_adentryshowrecord_shell.sql的内容为修改前
sed -i s/db_appentryreqlog_$date/db_appentryreqlog_bak/ $wsm_appentryreqlog_shell
sed -i s/db_adentryshowrecord_$date/db_adentryshowrecord_bak/ $wsm_adentryshowrecord_shell
#执行完毕。
=======================结束 
其中db_appentryreqlog_shell.sq文件的内容为
rename table db_appentryreqlog to db_appentryreqlog_bak,db_appentryreqlog_new to db_appentryreqlog;
db_adentryshowrecord_shell.sql文件的内容为
rename table db_adentryshowrecord to db_adentryshowrecord_bak,db_adentryshowrecord_new to db_adentryshowrecord;   #先把旧表改名备份,然后把新的表改成旧表的名字
将shell命令文件 以及db_appentryreqlog_shell.sq和db_adentryshowrecord_shell.sql文件都放置到backup_directory=/var/db_backup目录下
然后把shell命令配置到定时任务cron里面,ok了。
上饶分类信息网,免费分类信息发布

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录