实现功能: 可以按库名导出一个mysql实例中的表,视图,存储过程/函数,触发器,事件
用法:
1. 将脚本保存为dump.sh
2. sh dump.sh 备份路径 用户 密码 IP 端口
例:sh dump.sh /backup/bjdb root root 127.0.0.1 3306
##############################################
# Function: DUMP MYSQL TABLE, PROCEDURE,VIEW,TRIGGER,EVENT
# Date: 2015-01-21
# Author: Liang Wei
# Mail: liangweione@gmail.com
# Version: 1.0
###########################################################
#DEFINE VARIABLES
MYSQL=`which mysql`
MYSQLDUMP=`which mysqldump`
GZIP=`which gzip`
BACKUP_DIRECTORY=$1
V_USERNAME=$2
V_PASSWORD=$3
V_HOST=$4
V_PORT=$5
MYCMD="$MYSQL -u$V_USERNAME -p$V_PASSWORD -h$V_HOST -P$V_PORT "
DUMP_TB="$MYSQLDUMP -u$V_USERNAME -p$V_PASSWORD -h$V_HOST -P$V_PORT --compact -d"
DUMP_TRIGGER="$MYSQLDUMP -u$V_USERNAME -p$V_PASSWORD -h$V_HOST -P$V_PORT --triggers \
--no-create-info --no-data --no-create-db --skip-opt"
DUMP_PROC="$MYSQLDUMP -u$V_USERNAME -p$V_PASSWORD -h$V_HOST -P$V_PORT --routines \
--no-create-info --no-data --no-create-db --skip-opt --skip-triggers"
DUMP_EVENTS="$MYSQLDUMP -u$V_USERNAME -p$V_PASSWORD -h$V_HOST -P$V_PORT --events \
--no-create-info --no-data --no-create-db --skip-opt --skip-triggers"
#echo MYSQL=$MYSQL
#echo MYSQLDUMP=$MYSQLDUMP
#echo GZIP=$GZIP
# VALIDATE INPUT ARGUMENTS
if [ "$#" -ne 5 ]; then
echo "Usage: $0 "
exit 1;
fi
# VALIDATE BACKUP DIR
BACKUP_DIR="$1"
if [ ! -d $BACKUP_DIR ]; then
echo "$BACKUP_DIR does not exist"
exit 1;
fi
DUMP_DIR="$BACKUP_DIR/`date +%F`"
if [ ! -d $DUMP_DIR ]; then
mkdir -p $DUMP_DIR
if [ ! -d $DUMP_DIR ]; then
echo "Failed to create backup dir $DUMP_DIR"
exit 1;
fi
fi
for DB in `$MYCMD -N -e "show databases" | grep -v 'Database\|performance_schema\|information_schema'`
# for DB in sakila
do
mkdir -p $DUMP_DIR/$DB/{table,view,trigger,proc,event}
# Dump table define
for TB in `$MYCMD -N -e "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES \
WHERE TABLE_SCHEMA IN('${DB}') AND ENGINE IS NOT NULL AND ENGINE NOT IN('CSV');" `
do
BK_FILE=$DUMP_DIR/$DB/table/${TB}.sql
$DUMP_TB $DB $TB >$BK_FILE
done
#Dump view
for VW in `$MYCMD -N -e "SELECT table_name from information_schema.views where TABLE_SCHEMA in('${DB}')" `
do
$DUMP_TB $DB $VW > $DUMP_DIR/$DB/view/${VW}.sql
done
#Dump triggers
$DUMP_TRIGGER $DB >$DUMP_DIR/$DB/trigger/${DB}_trigger.sql
#Dump routines
$DUMP_PROC $DB >$DUMP_DIR/$DB/proc/${DB}_proc_function.sql
#Dump events
$DUMP_EVENTS $DB >$DUMP_DIR/$DB/event/${DB}_event.sql