千家信息网

怎么迁移mysql数据库中的表

发表于:2024-09-21 作者:千家信息网编辑
千家信息网最后更新 2024年09月21日,本篇内容介绍了"怎么迁移mysql数据库中的表"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!作为写脚
千家信息网最后更新 2024年09月21日怎么迁移mysql数据库中的表

本篇内容介绍了"怎么迁移mysql数据库中的表"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

作为写脚本的,这次的重点在于实现了类似于其他语言的logging模块的输出功能。感觉还是蛮有用的,简单直观。

输出log如下所示:

2017-03-31 16:26:57 --- INFO --- You choose the name of the table below:2017-03-31 16:26:57 --- INFO --- 2016_06_24_record_base_log2017-03-31 16:26:57 --- INFO --- 2016_06_16_record_base_log2017-03-31 16:26:57 --- INFO --- table insert statements 2016_06_24_record_base_log backuping2017-03-31 16:26:57 --- INFO --- table struct 2016_06_24_record_base_log backuping2017-03-31 16:26:57 --- INFO --- table insert statements 2016_06_16_record_base_log backuping2017-03-31 16:26:57 --- INFO --- table struct 2016_06_16_record_base_log backuping2017-03-31 16:26:57 --- INFO --- append the ENGINE=InnoDB --> DATA DIRECTORY\=\'\/data2\/db\/mysql\'/ to struct/2016_06_24_record_base_log.sql2017-03-31 16:26:57 --- INFO --- append the ENGINE=InnoDB --> DATA DIRECTORY\=\'\/data2\/db\/mysql\'/ to struct/2016_06_16_record_base_log.sql2017-03-31 16:26:57 --- INFO --- There is no back up the table2017-03-31 16:26:57 --- INFO --- The import table structure2017-03-31 16:26:57 --- INFO --- Insert data to the table2017-03-31 16:26:57 --- INFO --- There is no back up the table2017-03-31 16:26:57 --- INFO --- The import table structure2017-03-31 16:26:57 --- INFO --- Insert data to the table2017-03-31 16:26:57 --- INFO --- Successfully completed the operation !

shell脚本如下所示,此脚本在centos系统测试通过:

#!/bin/bashmysqluser='root'mysqlpass='dbpassword'mysqlhost='127.0.0.1'mysqldb='dbname'mysqlpath='/usr/local/mysql/bin'mysqlport=3306datetimes=`date "+%Y-%m-%d %H:%M:%S"`datetimes2=`date "+%Y%m%d%H%M"`datetimes3=`date "+%Y%m%d%H%M%S"`backupdir="backup"structdir="struct"logfile="logs/test_${datetimes3}.log"tablist="ltab.txt"# Set the echo colorgray='\033[30;1m'red='\033[31;1m'green='\033[32;1m'yellow='\033[33;1m'blue='\033[34;1m'pink='\033[35;1m'white='\033[37;1m'reset='\033[0m'[ ! -d $backupdir ] && mkdir -p $backupdir[ ! -d $structdir ] && mkdir $structdir[ ! -d logs ] && mkdir logs# logging functionfunction logging {    if [ ! -z "$1" ] && [ ! -z "$2" ];then        echo -e "${green} ${1} --- ${2} ${reset}"        echo -e "${datetimes} --- ${1} --- ${2}" >> $logfile    fi}function error {    if [ $? -eq 0 ];then        logging "INFO" "$1"    else        logging "ERROR" "${reset}${red} $1 ,have an error occurred!"        exit 1    fi}function yesorno {    echo -e "${yellow} $1 ${reset}"    read var    case "$var" in    [yY][eE][sS] )         echo "Your input is YES,Program to continue" ;;    [nN][oO] )         echo "Your input is no.";        exit 0;;    **)        echo -e "${red} Input Error! ${reset}"         exit 0    ;;    esac}echo -e "${yellow} This script is used to mysql table DATA DIRECTORY and INDEX DIRECTORY set to/data2/db/mysql and the migration of data to /data2/db/mysql directory. ${reset} " yesorno "Do you want to continue, yes or no?"logging "INFO" "You choose the name of the table below:"# Confirm the table to by updatefor tab in `cat $tablist`;do        logging "INFO" "${tab}"doneyesorno "The above is the table you choose, you want to continue? Yes or no?"# dump table data and struct to $backupdir and $structdirfor tab in `cat $tablist`;do        $mysqlpath/mysqldump -u$mysqluser -p$mysqlpass -h$mysqlhost -P$mysqlport --no-create-info $mysqldb $tab > ${backupdir}/${tab}.sql        error "table insert statements $tab backuping"        $mysqlpath/mysqldump -u$mysqluser -p$mysqlpass -h$mysqlhost -P$mysqlport --no-data $mysqldb $tab > ${structdir}/${tab}.sql        error "table struct $tab backuping"done# append the DATA DIRECTOY and DATA DIRINDEX to table struct.for tab in `cat $tablist`;do        if grep 'ENGINE=InnoDB' ${structdir}/${tab}.sql;then                sed -i "s/ENGINE=InnoDB/& DATA DIRECTORY\=\'\/data2\/db\/mysql\' INDEX DIRECTORY\=\'\/data2\/db\/mysql\'/" ${structdir}/${tab}.sql                error "append the ENGINE=InnoDB --> DATA DIRECTORY\=\'\/data2\/db\/mysql\'/ to ${structdir}/${tab}.sql"        elif grep 'ENGINE=MyISAM' ${structdir}/${tab}.sql;then                sed -i "s/ENGINE=MyISAM/& DATA DIRECTORY\=\'\/data2\/db\/mysql\' INDEX DIRECTORY\=\'\/data2\/db\/mysql\'/" ${structdir}/${tab}.sql                error "append the ENGINE=InnoDB --> DATA DIRECTORY\=\'\/data2\/db\/mysql\'/ to ${structdir}/${tab}.sql"        else                logging "ERROR,Table structure is not found in the match engine ."                exit 1        fidone# drop old database for tab in `cat $tablist`;do        if [ -f ${backupdir}/${tab}.sql ] && [ -f ${structdir}/${tab}.sql ];then                $mysqlpath/mysql -u$mysqluser -p$mysqlpass -h$mysqlhost -P$mysqlport $mysqldb -e "drop table ${tab};"                error "There is no back up the table"        fi        # import table struct to db        if [ -f ${structdir}/${tab}.sql ];then                $mysqlpath/mysql -u$mysqluser -p$mysqlpass -h$mysqlhost -P$mysqlport $mysqldb < ${structdir}/${tab}.sql                error "The import table structure"        fi        # import table data to db        if [ -f ${backupdir}/${tab}.sql ];then                $mysqlpath/mysql -u$mysqluser -p$mysqlpass -h$mysqlhost -P$mysqlport $mysqldb < ${backupdir}/${tab}.sql                error "Insert data to the table"        fidonelogging "INFO" "Successfully completed the operation !"

ltab.txt中存储你要想迁移的表名,如下所示:

[root@SERVER_DB] cat ltab.txt2016_06_24_record_base_log2016_06_16_record_base_log

最后,记得在screen下执行脚本,即使终端断开,也不用担心,脚本终止执行。如果遇到错误,脚本会立即终止执行,此时需要手动来处理。

"怎么迁移mysql数据库中的表"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

0