工作中遇到数据库中一个表的数据量比较大,属于日志表。正常情况下是不会有查询操作的,但如果不进行分表数据太多,执行一条简单
工作中遇到数据库中一个表的数据量比较大,属于日志表。正常情况下是不会有查询操作的,但如果不进行分表数据太多,执行一条简单sql语句要等好几分钟。。
分表工具:linux的shell + mysql自身提供的管理命令
原理:使用一个和原表数据结构一样的表,替换原表。
Linux Shell内容如下:
=======================开始
DATE=`date +%Y%m%d` #当前日期备份
BACKUP_DIRECTORY="/var/db_backup" #备份的目录,主要存放备份中需要的临时表
易和阳光购物商城原为伴江行购物商城,只是根据互联网的发展对网站程序进行改进! 修改了50%以上的代码部分,暂时没有对数据库修改! 易和阳光购物商城 v1.6功能简介 增加了会员卡功能 绑定了会员卡的会员可以使用会员卡及用户名双登陆 会员卡自带积分充值功能
0
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了。

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号