本篇內容介紹了“怎么遷移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_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下執行腳本,即使終端斷開,也不用擔心,腳本終止執行。如果遇到錯誤,腳本會立即終止執行,此時需要手動來處理。
“怎么遷移mysql數據庫中的表”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。