mysql引擎转化脚本示例(1)

1、用于将mysql innodb引擎的数据表.ibd转化为myisam的.MYD和.MYI。后者可以直接迁移至其他磁盘,做到缓解当前磁盘使用率的目的

2、整个过程包括:(1)将innodb数据引擎转化为myisam。(2)将转化后的MYI和MYD进行数据库插件的压缩(后者只能读不能写)。

#!/bin/sh

DBUSER=***
DBPASS=***
DBHOST="127.0.0.1"
DBPORT="3306"
CONVERT_ENGINES="MYISAM"

DBNAME_1="rmlog_bs_db_01 rmlog_bs_db_02 rmlog_bs_db_03 rmlog_bs_db_04 rmlog_bs_db_05 rmlog_bs_db_06 rmlog_bs_db_07 rmlog_bs_db_08 rmlog_bs_db_09 rmlog_bs_db_10 rmlog_bs_db_11 rmlog_bs_db_12 rmlog_bs_db_13 rmlog_bs_db_14 rmlog_bs_db_15 rmlog_bs_db_16"
TBNAME_PRE_1="log_deliver_mail_ log_imap_mail_ log_pop_mail_ log_read_mail_ log_read_new_mail_ log_send_mail_ log_ua_info_"

MYSQL_HOME="/mysql/product/"
DBDATA_HOME="/mysql/dbdata/"
DAY_NUM=30
DATE="`date +%F`"
LOGDIR="/home/mysql/scripts/convert_engines_to_myisam/logs/"
LOGFILE="$LOGDIR/convert_engines_to_myisam.log.$DATE"

if [ ! -d $LOGDIR ];then
        mkdir -p $LOGDIR
fi

for i in $DBNAME_1; do
        for j in $TBNAME_PRE_1; do
                DAY=$DAY_NUM
                for k in `seq 20`; do
                        TBNAME_1=$j`date -d "-$DAY day" +%Y%m%d`
            if [ -f $DBDATA_HOME/$i/$TBNAME_1.ibd ];then
                            date +"%F %T START mysql_convert_table_format $i $TBNAME_1" >> $LOGFILE 2>&1
                            $MYSQL_HOME/bin/mysql_convert_table_format  --user=$DBUSER --password=$DBPASS --host=$DBHOST --port=$DBPORT --type=$CONVERT_ENGINES $i $TBNAME_1 >> $LOGFILE 2>&1
                            date +"%F %T END mysql_convert_table_format $i $TBNAME_1" >> $LOGFILE 2>&1
            fi
            if [ -f $DBDATA_HOME/$i/$TBNAME_1.MYI ];then
                            date +"%F %T START myisampack $i $TBNAME_1" >> $LOGFILE 2>&1
                $MYSQL_HOME/bin/myisampack $DBDATA_HOME/$i/$TBNAME_1.MYI >> $LOGFILE 2>&1
                            date +"%F %T START myisamchk $i $TBNAME_1" >> $LOGFILE 2>&1
                $MYSQL_HOME/bin/myisamchk -rq --sort-index --analyze $DBDATA_HOME/$i/$TBNAME_1.MYI >> $LOGFILE 2>&1
                            date +"%F %T END myisampack myisamchk $i $TBNAME_1" >> $LOGFILE 2>&1
            fi
                        let DAY=DAY+1
                done
        done
done


date +"%F %T START mysqladmin flush-tables" >> $LOGFILE 2>&1
$MYSQL_HOME/bin/mysqladmin -u$DBUSER -p$DBPASS flush-tables
date +"%F %T END mysqladmin flush-tables" >> $LOGFILE 2>&1

 

posted @ 2016-12-14 15:12  一头猪的奇妙旅行  阅读(228)  评论(0编辑  收藏  举报