linux 上作mysql的数据备份


#数据库备份
echo $1
echo $2mysql

#!/bin/bash
# MYSQLDBUSERNAME是MySQL数据库的用户名,可自定义
MYSQLDBUSERNAME=$1
# MYSQLDBPASSWORD是MySQL数据库的密码,可自定义
MYSQLDBPASSWORD=$2
# MYSQBASEDIR是MySQL数据库的安装目录,--prefix=$MYSQBASEDIR,可自定义
MYSQBASEDIR=/usr/local/mysql
# MYSQL是mysql命令的绝对路径,可自定义
MYSQL=$MYSQBASEDIR/bin/mysql
# MYSQLDUMP是mysqldump命令的绝对路径,可自定义
MYSQLDUMP=$MYSQBASEDIR/bin/mysqldump
# BACKDIR是数据库备份的存放地址,能够自定义修改为远程地址
BACKDIR=/home/backup/mysql
# 获取当前时间,格式为:年-月-日,用于生成以这种时间格式的目录名称
DATEFORMATTYPE1=$(date +%Y-%m-%d)
# 获取当前时间,格式为:年月日时分秒,用于生成以这种时间格式的文件名称
DATEFORMATTYPE2=$(date +%Y%m%d%H%M%S)
# 若是存在MYSQBASEDIR目录,则将MYSQDATADIR设置为$MYSQBASEDIR/data,具体是什么路径,就把data改为什么路径,不然将MYSQBASEDIR设定为/var/lib/mysql,可自定义
[ -d $MYSQBASEDIR ] && MYSQDATADIR=$MYSQBASEDIR/data || MYSQDATADIR=/var/lib/mysql
# 若是mysql命令存在并可执行,则继续,不然将MYSQL设定为mysql,默认路径下的mysql
[ -x $MYSQL ] || MYSQL=mysql
# 若是mysqldump命令存在并可执行,则继续,不然将MYSQLDUMP设定为mysqldump,默认路径下的mysqldump
[ -x $MYSQLDUMP ] || MYSQLDUMP=mysqldump
# 若是不存在备份目录则建立这个目录
[ -d ${BACKDIR} ] || mkdir -p ${BACKDIR}sql

#若是存在则删除该文件,防止屡次备份数据混乱
if [ -d ${BACKDIR}/${DATEFORMATTYPE1} ] 数据库

    then  
        echo '存在目录:'+ ${BACKDIR}/${DATEFORMATTYPE1} +',则进行删除'
        rm -rf ${BACKDIR}/${DATEFORMATTYPE1}
fibash


[ -d ${BACKDIR}/${DATEFORMATTYPE1} ] || mkdir ${BACKDIR}/${DATEFORMATTYPE1}
# 获取MySQL中有哪些数据库,根据mysqldatadir下的目录名字来确认,此处能够自定义,TODO
DBLIST=`ls -p $MYSQDATADIR | grep / |tr -d /`
#DBLIST= "audit4 idm sso"    
#echo "集合内中元素为: ${DBLIST[@]}"
# 从数据库列表中循环取出数据库名称,执行备份操做
#for DBNAME in audit4 idm sso函数

 for DBNAME in $DBLIST日志

    # mysqldump skip one table
    # -- Warning: Skipping the data of table mysql.event. Specify the --events option explicitly.
    # mysqldump --ignore-table=mysql.event
    # http://serverfault.com/questions/376904/mysqldump-skip-one-table
    # --routines,备份存储过程和函数
    # --events,跳过mysql.event表
    # --triggers,备份触发器
    # --single-transaction,针对InnoDB,在单次事务中经过转储全部数据库表建立一个一致性的快照,此选项会致使自动锁表,所以不须要--lock-all-tables
    # --flush-logs,在dump转储前刷新日志
    # --ignore-table,忽略某个表,--ignore-table=database.table
    # --master-data=2 ,若是启用MySQL复制功能,则能够添加这个选项
    # 将dump出的sql语句用gzip压缩到一个以时间命名的文件
    doserver

    echo $BACKDIR/$DATEFORMATTYPE1/$DBNAME
    ${MYSQLDUMP} --user=${MYSQLDBUSERNAME} --password=${MYSQLDBPASSWORD} --routines --events --triggers --single-transaction --flush-logs --ignore-table=mysql.event --databases ${DBNAME} | gzip > ${BACKDIR}/${DATEFORMATTYPE1}/${DBNAME}-backup-${DATEFORMATTYPE2}.sql.gz
    # 检查执行结果,若是错误代码为0则输出成功,不然输出失败
    [ $? -eq 0 ] && echo "${DBNAME} has been backuped successful" || echo "${DBNAME} has been backuped failed"
    # 等待3s,可自定义
    /bin/sleep 3
done事务

相关文章
相关标签/搜索