mysql快速导出导入脚本,修改库名和所有者,实现快速迁移
Posted Demonson
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql快速导出导入脚本,修改库名和所有者,实现快速迁移相关的知识,希望对你有一定的参考价值。
背景
开发库迁移部署时,需要部署的库越来越多,部署时需要统一修改目标库名称,根绝创建用户统一修改存储过程所有者,所以此脚本在于快速解决这一问题
脚本
vim imex.sh
#!/bin/sh
#导入环境变量
PATH=/usr/local/mysql/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/bin:/sbin:~/bin
export PATH
#备份路径和需要备份数据库的记录文件
BACKUP_PATH='/opt/bak/dump'
DB_NAME='/opt/bak/db_name.sql'
#源端数据库连接
USERBANE1='root'
PASSWD1='root123'
HOST1='192.168.8.223'
PORT1='3306'
#目标端数据库连接
USERBANE2='root'
PASSWD2='root123'
HOST2='10.11.40.212'
PORT2='3306'
#修改存储过程所有者
OLDUSERNAME='root'
NEWUSERNAME='test'
#修改数据库
OLDDBNAME='db1'
NEWDBNAME='db2'
#批量导出数据库
function exportdb(){
cat $DB_NAME | while read line
do
echo "export database: "$line
mysqldump -u$USERBANE1 -p$PASSWD1 -h$HOST1 -P$PORT1 -R -E --column-statistics=0 --single-transaction --master-data=2 --set-gtid-purged=OFF $line > $BACKUP_PATH"/"$line".sql"
done
}
#批量修改库名
function renamedb(){
cp $DB_NAME $DB_NAME".rename"
sed -i "s/$OLDDBNAME/$NEWDBNAME/g" `grep $OLDDBNAME -rl $DB_NAME".rename"`
awk '{print "create database if not exists "$0}' $DB_NAME".rename" >$DB_NAME".create1"
awk '{print $0";"}' $DB_NAME".create1" >$DB_NAME".create"
rm -f $DB_NAME".create1"
#修改导出脚本名称
for file in `ls $BACKUP_PATH"/"*.sql`;do mv $file `echo $file|sed "s/$OLDDBNAME/$NEWDBNAME/g"`;done;
}
#批量导入数据库
function importdb(){
cat $DB_NAME".rename" | while read line
do
echo "import database: "$line
mysql -u$USERBANE2 -p$PASSWD2 -h$HOST2 -P$PORT2 -D $line < $BACKUP_PATH"/"$line".sql"
done
}
#批量创建数据库
function createdb(){
cat $DB_NAME".create" | while read line
do
echo "create database: "$line
done
mysql -u$USERBANE2 -p$PASSWD2 -h$HOST2 -P$PORT2 < $DB_NAME".create"
}
#批量修改存储过程所有者
function renameproc(){
sed -i "s/$OLDUSERNAME/$NEWUSERNAME/g" `grep $OLDUSERNAME -rl $BACKUP_PATH`
}
#清空导出脚本DEFINER所有者
function cleardefiner(){
sed -i "s/DEFINER=.*%\\`//g" `grep DEFINER= -rl $BACKUP_PATH`
}
#执行函数,安装实际情况注释下面函数,实现分步导出导入,下面只是导出,要是源和目标库网络联通,可去掉注释实现一步导出导入
exportdb #导出数据
cleardefiner #清空definer
#renamedb #修改库名
#createdb #创建数据库
#renameproc #修改存储过程/函数/触发器/视图等所有者
#importdb #导入数据
#rm -f $DB_NAME"."*
#rm -f $BACKUP_PATH"/"*
以上是关于mysql快速导出导入脚本,修改库名和所有者,实现快速迁移的主要内容,如果未能解决你的问题,请参考以下文章