mysql利用脚本批量修改数据库名字,安全快捷

时间:2021-03-22 07:27:49

本人数据库的引擎是innodb;


脚本,里面包含了,字符串的匹配,以及正则表达式

if语句, for 语句


之前网上有一种,

是直接修改数据库里面的表面的形式,很遗憾这样做,还是会出现丢表的现象。


最安全的一种形式应该是,备份与还原


#!/bin/bash
mysqlconn="mysql -ulyon3306 -p5601564a -h192.168.1.128"

mysqldump_out="mysqldump -ulyon3306 -p5601564a -h192.168.1.128 --opt -R heke > /dtd/backup/sqls/heke.sql"
mysqldump_in="mysql -ulyon3306 -p5601564a -h192.168.1.128 hewke < /dtd/backup/sqls/heke.sql"
olddb="heke"
newdb="hewke"

create_newdb="$mysqlconn -e 'create database heke10000 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;'"

echo $create_newdb;
#eval $create_newdb ;
params=$($mysqlconn -N -e "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE table_schema='$olddb'")
params_dbs=$($mysqlconn -N -e "show databases")
#$create_newdb &&

for db_name in $params_dbs ;do

if [[ $db_name == heke100* ]]
then
new_db_name=${db_name/'heke'/'hewke'}
create_inewdb=${create_newdb/'heke10000'/$new_db_name}
imysqldump_out=${mysqldump_out//'heke'/$db_name}
imysqldump_in=${mysqldump_in//'heke'/$db_name}
imysqldump_in=${imysqldump_in//'hewke'/$new_db_name}


echo $new_db_name;
echo $db_name;
echo $create_inewdb;
echo $imysqldump_out;
echo $imysqldump_in;

eval $create_inewdb ;
eval $imysqldump_out;
eval $imysqldump_in;


#for name in $params; do
#show="$mysqlconn -e 'RENAME TABLE $db_name.$name to $new_db_name.$name';"


#echo $name
#echo $show


#eval $show;
#done;

fi

done;

#$mysqlconn -e “DROP DATABASE $olddb”


mysqldump -h192.168.1.128 -ulyon -p5601564a --opt -R heke10034  > G:\conf\log_basic_1119.sql