怎么迁移mysql数据库中的表
admin
2023-05-26 09:21:22
0

作为写脚本的,这次的重点在于实现了类似于其他语言的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_log
2017-03-31 16:26:57 --- INFO --- 2016_06_16_record_base_log
2017-03-31 16:26:57 --- INFO --- table insert statements 2016_06_24_record_base_log backuping
2017-03-31 16:26:57 --- INFO --- table struct 2016_06_24_record_base_log backuping
2017-03-31 16:26:57 --- INFO --- table insert statements 2016_06_16_record_base_log backuping
2017-03-31 16:26:57 --- INFO --- table struct 2016_06_16_record_base_log backuping
2017-03-31 16:26:57 --- INFO --- append the ENGINE=InnoDB --> DATA DIRECTORY\=\'\/data2\/db\/mysql\'/ to struct/2016_06_24_record_base_log.sql
2017-03-31 16:26:57 --- INFO --- append the ENGINE=InnoDB --> DATA DIRECTORY\=\'\/data2\/db\/mysql\'/ to struct/2016_06_16_record_base_log.sql
2017-03-31 16:26:57 --- INFO --- There is no back up the table
2017-03-31 16:26:57 --- INFO --- The import table structure
2017-03-31 16:26:57 --- INFO --- Insert data to the table
2017-03-31 16:26:57 --- INFO --- There is no back up the table
2017-03-31 16:26:57 --- INFO --- The import table structure
2017-03-31 16:26:57 --- INFO --- Insert data to the table
2017-03-31 16:26:57 --- INFO --- Successfully completed the operation !

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

#!/bin/bash
mysqluser='root'
mysqlpass='dbpassword'
mysqlhost='127.0.0.1'
mysqldb='dbname'
mysqlpath='/usr/local/mysql/bin'
mysqlport=3306

datetimes=`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 color
gray='\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 function
function 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 update
for tab in `cat $tablist`;do
        logging "INFO" "${tab}"
done

yesorno "The above is the table you choose, you want to continue? Yes or no?"


# dump table data and struct to $backupdir and $structdir
for 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
	fi
done

# 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"
	fi
done

logging "INFO" "Successfully completed the operation !"

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

[root@SERVER_DB] cat ltab.txt
2016_06_24_record_base_log
2016_06_16_record_base_log

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

相关内容

热门资讯

印度缺油,快受不了了 文字 | 无刺王冠龙 制图 | 果 校对 | 朝乾 编辑 | 果最近,印度人的日子一天比一天难熬了:...
用柠檬酸清洗热水器应该配多少浓... 使用柠檬酸清洗热水器的水垢,在配对比例上应当是1:20需要注意的是具体情况还需要根据水垢的严重度来进...
告诉一下金帝集成灶最新款适合开... 最佳回答 你说的蒸箱款呢?还是蒸烤一体机?我觉得金帝集成灶的设计都非常好看,跟橱柜搭配非常和谐,吸烟...
侧吸油烟机漏油怎么回事 侧吸油烟机漏油怎么回事1、有时候在安装的时候没有调整好角度,仰角不够,或者是清洗时间过长导致油箱的堵...
侧吸油烟机漏油了怎么办 侧吸油烟机是厨房中必不可少的家电之一,可以有效地吸收油烟,保持厨房清洁和舒适。然而,如果侧吸油烟机出...
方太吸油烟机声音大 可能是里面的油烟太多了,需要进行清洗。或者是油烟机要坏掉了,需要专业人员进行维修。如果油烟机不能安装...
男子男扮女装、衣着暴露在学校周... 近日,海南省文昌市互联网信息办公室在日常巡查中发现,某短视频平台网络主播杨某某多次以男扮女装、衣着暴...
伊朗最高领袖:战争让官员肩负更... 据英国天空新闻报道,伊朗现任最高领袖穆杰塔巴·哈梅内伊近日发表书面声明,在纪念已故前总统莱希逝世两周...
雨夜坠河的皮卡,满车都是亲戚 作者 | 黄泽敏 实习生 | 黄思婷 编辑 | 向现肖逸(化名)没有等来奇迹。5月18日,肖逸告诉南...
赖清德抛0到18岁月发5000... 海峡导报综合报道 台湾地区领导人赖清德20日发表两周年就职演说,宣称台当局近日将提出所谓台湾人口对策...