工作中遇到数据库中一个表的数据量比较大,属于日志表。正常情况下是不会有查询操作的,但如果不进行分表数据太多,执行一条简单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_newsed -i "s/wsm_adentryshowrecord/db_adentryshowrecord_new/" $WSM_ADENTRYSHOWRECORD_FILE #同上 sed -i "s/AUTO_INCREMENT=[0-9]+/AUTO_INCREMENT=1/" $WSM_APPENTRYREQLOG_FILE #新表结构,ID自增值重置为1sed -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 < $WSM_APPENTRYREQLOG_FILE #先把新的表结构导入进去mysql -u$DB_USER -p$DB_PWD db < $WSM_APPENTRYREQLOG_SHELL mysql -u$DB_USER -p$DB_PWD db < $WSM_ADENTRYSHOWRECORD_FILE #执行替换表命令mysql -u$DB_USER -p$DB_PWD db < $WSM_ADENTRYSHOWRECORD_SHELL #恢复文件db_appentryreqlog_shell.sql和db_adentryshowrecord_shell.sql的内容为修改前sed -i "s/db_appentryreqlog_$DATE/db_appentryreqlog_bak/" $WSM_APPENTRYREQLOG_SHELLsed -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了。关于MySQL MyISAM 表并发每天定时备份MySQL数据库相关资讯 数据库
- 数据库范式详解 (06/20/2014 08:59:37)
- rman 创建catalog实验及说明 (10/07/2012 19:00:24)
- SYSTEM用户删除后怎么重新创建和原 (09/09/2012 10:00:38)
| - 分布式数据库:dblink (10/27/2012 15:57:32)
- AutoMySQLBackup实现数据库定期备 (09/14/2012 08:08:02)
- 利用dbstart和dbshut脚本自动启动 (08/21/2012 06:16:21)
|
本文评论 查看全部评论 (0)