shell 备份mysql数据库数据_shell脚本备份mysql数据库中的表

#!/bin/bash

##############################################

#

#               手动备份数据库

#

##############################################

export HOSTNAME="prd-mysql002"

export DUMP_PRD_MYSQL="mysqldump -h$HOSTNAME -P3306 -uroot -p123456"

export CONNECT_PRD_MYSQL="mysql -h$HOSTNAME -P3306 -uroot -p123456"

export BACK_DIR="/backup/deply_mysql/"

export BACKUP_FILE=""

#

# 帮助 -h

# @param

#

usage() {

echo -e "\n\t-d database table   备份表"

echo -e "\t-s database table   查看表的大小";

echo -e "\t\t-s ?             显示库"

echo -e "\t\t-s database ?    显示表\n"

exit

}

#

# 输出显示蓝色

# @param $1 string

#

echo_blue() {

echo -e "\033[36m$1\033[0m";

}

#

# 输出显示红色

# @param $1 string

#

echo_red() {

echo -e "\033[31m$1\033[0m"

}

#

# 日期

# @param

# @return 输出格式如:20181017

#

dir_time() {

echo $(date "+%Y%m%d")

}

#

# 获取库名和表名

# @param $1 database name

# @param $2 table name

#

set_database_table_name() {

export DATABASE=$1

export TABLE=$2

}

#

# 检查数据库是否存在

# @param $1 数据库名称

#

check_database_exists() {

local dbname=$1

query=$($CONNECT_PRD_MYSQL -e "SELECT information_schema.SCHEMATA.SCHEMA_NAME FROM information_schema.SCHEMATA where SCHEMA_NAME='${dbname}'" | grep $dbname)

if [ -z "$query" ]; then

echo $(echo_red "ERROR: database $dbname NOT exists!")

exit;

fi

}

#

# 查看帮助

# @param

#

show_help() {

if [ "$DATABASE" == "?" ] ; then

echo "show databases";

show_database

exit 0

elif [ "$TABLE" == "?" ] ; then

echo "show tables"

show_tables $DATABASE

exit 0

elif [ -z "$DATABASE" ] ; then

usage

exit 1

elif [ -z "$TABLE" ] ; then

usage

exit 1

fi

}

#

# 创建备份目录

# @param

#

get_directory() {

local databasename=$1

local directory=$BACK_DIR$databasename/$(dir_time)

if [ ! -d $directory ]; then

mkdir $directory -p

fi

echo $directory

}

#

# 显示数据库

# @param

#

show_database() {

$CONNECT_PRD_MYSQL -e "show databases"

}

#

# 显示数据库下面的表

# @param $1 数据库名称

#

show_tables() {

local dbname=$1

check_database_exists $dbname

$CONNECT_PRD_MYSQL -e "use $dbname;show tables"

}

#

# 显示表大小

# @param $1 数据库名称

# @param $2 表名称

#

show_table_size() {

local databasename=$1

local tablename=$2

local query=$($CONNECT_PRD_MYSQL -e "use information_schema;select concat(round(sum(DATA_LENGTH/1024/1024),2),'MB') as data  from TABLES where table_schema='$databasename' and table_name='$tablename';" | grep MB)

echo_blue $query

}

#

# 备份表

# @param $1 数据库名称

# @param $2 表名称

# @param $3 备份存放的目录

#

backup_table() {

local databasename=$1

local tablename=$2

local backupdir=$3

local backupfile=$backupdir/$tablename".sql"

$DUMP_PRD_MYSQL $databasename $tablename > $backupfile

# echo "$DUMP_PRD_MYSQL $databasename $tablename > $backupfile"

if [ "$?" -eq 0 ] ; then

echo $backupfile

fi

}

#

# 备份数据

# @param $1 数据库名称

# @param $2 表名称

#

confirm_option() {

local databasename=$1

local tablename=$2

echo -e "\n$tablename size is:"

echo -e "\t"$(show_table_size $databasename $tablename)

read -p "确定要备份 $(echo_blue $databasename) 的 $(echo_blue $tablename) 表吗? y/n:" answer

case $answer in

y|Y)

# 开始备份

echo -e "start backup ..."

BACKUP_FILE=$(backup_table $databasename $tablename $(get_directory $databasename))

echo -e "$BACKUP_FILE size is:\n\t" $(echo_blue $(du -sh $BACKUP_FILE))

echo -e "backup is OK"

;;

n|N)

echo_red "备份已取消!"

;;

esac

}

if [ -z "$1" ]; then

usage

fi

while [ -n "$1" ]

do

case "$1" in

-d|--database)

set_database_table_name $2 $3

show_help

confirm_option $2 $3

shift 2

;;

-s|--showtablesize)

set_database_table_name $2 $3

show_help

show_table_size $2 $3

shift 2

;;

-h|--help)

usage

;;

*)

usage

;;

esac

shift

done

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值