linux使用shell脚本实现mysql数据库的自动更新


#!/bin/bash
DATA_BASE=test
DATA_TABLE=DDT_VERSION_INFO
NEW_VERSION="1.0.0.5"
DATA_USER=wangzg
DATA_PASSWORD="906797"
SQL_FILE=db.sql
#数据库是否存在
IS_VERSION_DB_EXIST=0
#数据表是否存在
IS_VERSION_TABLE_EXIST=0
#是否执行数据库操作
IS_VERSION_EXEC=0
#数据库版本值是否不为空
IS_VERSION_NOT_NULL=0
#版本是不是更新了
IS_VERSION_NEWER=0
if [ ! -z $(mysql -u${DATA_USER} -p${DATA_PASSWORD} -e 'show databases;'|awk '$1=="'${DATA_BASE}'" {print $1}') ];then
    IS_VERSION_DB_EXIST=1
else
    IS_VERSION_EXEC=1
fi
if [ ${IS_VERSION_DB_EXIST} -eq 1 ];then
    if [ ! -z $(mysql -u${DATA_USER} -p${DATA_PASSWORD} -D ${DATA_BASE} -e 'show tables;'|awk '$1=="'${DATA_TABLE}'" {print $1}') ];then
        IS_VERSION_TABLE_EXIST=1
    else
        IS_VERSION_EXEC=1
    fi
fi
if [ ${IS_VERSION_TABLE_EXIST} -eq 1 ];then
    if [ ! -z $(mysql -u${DATA_USER} -p${DATA_PASSWORD} -D ${DATA_BASE} -e "select * from ${DATA_TABLE};"|awk '/version/ {print $2}') ];then
        IS_VERSION_NOT_NULL=1
    else
        IS_VERSION_EXEC=1
    fi
fi
if [ ${IS_VERSION_NOT_NULL} -eq 1 ];then
    NEW_ARRAY=($(echo "${NEW_VERSION}" |awk -F. '{for(i=1;i<=NF;i++) print $i}'))
    OLD_VERSION=$(mysql -u${DATA_USER} -p${DATA_PASSWORD} -D ${DATA_BASE} -e "select * from ${DATA_TABLE};"|awk '/version/ {print $2}')
    OLD_ARRAY=($(echo ${OLD_VERSION} |awk -F. '{for(i=1;i<=NF;i++) print $i}'))
    for((i=0;i< ${#OLD_ARRAY[@]};i++))
    do
        if [[ "${OLD_ARRAY[$i]}" < "${NEW_ARRAY[$i]}" ]];then
            IS_VERSION_NEWER=1;break;
        elif [[ "${OLD_ARRAY[$i]}" > "${NEW_ARRAY[$i]}" ]];then
            IS_VERSION_NEWER=-1;break;
        else
            continue;
        fi
    done
fi
if [ ${IS_VERSION_EXEC} -eq 1 -o ${IS_VERSION_NEWER} -gt 0 ];then
    mysql -u${DATA_USER} -p${DATA_PASSWORD} -e "CREATE DATABASE IF NOT EXISTS ${DATA_BASE};"
    mysql -u${DATA_USER} -p${DATA_PASSWORD} -D ${DATA_BASE} -e "CREATE TABLE IF NOT EXISTS ${DATA_TABLE}(field varchar(32) primary key not null,value varchar(64))CHARSET=utf8;"
    mysql -u${DATA_USER} -p${DATA_PASSWORD} -D ${DATA_BASE} -e "insert into ${DATA_TABLE}(field,value) values('version','${NEW_VERSION}')ON DUPLICATE KEY UPDATE value=values(value);"
    mysql -u${DATA_USER} -p${DATA_PASSWORD} -e "source ${SQL_FILE}"
fi