需求:要求通过shell脚本实现对远程MySQL单表进行mysqldump逻辑备份
输入参数:
主机名(必选)
端口号(可选)
用户名(必选)
密码 (必选)
数据库(必选)
表名 (必选)
where条件(可选)
输出:逻辑备份文件
实现如下:
####################################################
#######功能:通过mysqldump导出数据
#######动作:新增
#######作者:zxy
#######版本:V1.0
#######日期:2014-3-26
#根据实际环境修改MYSQLDUMP BACKDIR SOCKET路径值
MYSQLDUMP=/application/mysql/software/mysql5.5/bin/mysqldump
SOCKET=/tmp/mysql.sock
BACKDIR=/mysqldump/backup
DATE=$(date +%y%m%d)
OLDDATE=$(date -d "-1 days" +%y%m%d)
#检查参数
if [ $# -lt 1 ]; then
echo "Please input parameter"
echo "-h 需要备份数据库主机名,必选参数"
echo "-P 数据库端口号,可选参数,默认为3306"
echo "-u 登录数据库用户名,必选参数"
echo "-p 登录数据库密码,必须参数"
echo "-d 需要备份的数据库名,必选参数"
echo "-t 需要备份的表名,必须参数"
echo "-w 指定where过滤条件,可选参数"
exit 1
fi
#异常处理函数
function error_exit {
echo " Specify the parameter $1, please check input parameter"
exit 1
}
#捕获参数
while getopts :h:s:u:p:d:t:w: opt
do
case $opt in
h) HOST=$OPTARG
echo "host = ${HOST}"
;;
s) PORT=$OPTARG
echo "port = ${PORT}"
;;
u) USERNAME=$OPTARG
echo "username = ${USERNAME}"
;;
p) PASSWORD=$OPTARG
echo "password = ${PASSWORD}"
;;
d) DBNAME=$OPTARG
echo "database name = ${DBNAME}"
;;
t) TABLES=$OPTARG
echo "tables = ${TABLES}"
;;
w) WHERE=$OPTARG
echo "where = ${WHERE}"
;;
\?) echo "error,please check input"
exit 1
;;
esac
done
####判断主机名、用户、密码、数据库、表名不能为空
if [ -z "${HOST}" ]; then
error_exit "-h "
fi
#没有指定参数的话,赋值默认端口号3306
if [ -z "${PORT}" ]; then
PORT=3306
echo "PORT=3306"
fi
if [ -z "${USERNAME}" ]; then
ST} -P${PORT}
error_exit "-u"
fi
if [ -z "${PASSWORD}" ]; then
error_exit "-p"
fi
if [ -z "${DBNAME}" ]; then
error_exit "-d"
fi
if [ -z "${TABLES}" ]; then
error_exit "-t"
fi
#备份文件存放路径管理
if [ ! -d ${BACKDIR} ]; then
mkdir -p ${BACKDIR}
fi
if [ ! -d ${BACKDIR}/${DATE} ]; then
mkdir ${BACKDIR}/${DATE}
fi
#备份文件名词
BACKUP_NAME=${BACKDIR}/${DATE}/${HOST}_${PORT}_${DBNAME}_${TABLES}_backup_${DATE}.sql
#拼接mysqldump命令
CMD="${MYSQLDUMP} -h${HOST} -P${PORT} -u${USERNAME} -p${PASSWORD} -S${SOCKET} ${DBNAME} ${TABLES}"
if [ -n "${WHERE}" ]; then
CMD="${CMD} -w${WHERE}"
echo "${CMD}"
fi
CMD="${CMD} --single-transaction --master-data=2"
echo ${CMD}
#执行备份命令
${CMD} > ${BACKUP_NAME}
#判断备份命令是否执行成功
if [ $? -eq 0 ]; then
echo "The return value $?"
echo "The table ${DBNAME}.${TABLES} backup success"
exit 0;
else
echo "The return value $?"
echo "The table ${DBNAME}.${TABLES} backup fail"
exit 1;
fi
注意事项:
1.路径修改
在脚本的开始,需要指定shell脚本运行环境上的mysqldump路径,以及mysql连接sock文件路径,需要指定备份文件存放的目录BACKDIR,如下:
MYSQLDUMP=/application/mysql/software/mysql5.5/bin/mysqldump
SOCKET=/tmp/mysql.sock
BACKDIR=/mysqldump/backup
2.输入参数解释:
-h 需要备份数据库主机名,必选参数
-P 数据库端口号,可选参数,默认为3306
-u 登录数据库用户名,必选参数
-p 登录数据库密码,必须参数
-d 需要备份的数据库名,必选参数
-t 需要备份的表名,必须参数
-w 指定where过滤条件,可选参数
3.备份文件路径
备份文件存放目录/当前日期/主机IP_端口号_数据库名_表名_backup_${DATE}.sql
4.命令示例:
sh mysqldump.sh -h10.10.10.1 -utest -ptest -dzxy -ttest_mysqldump