2015-11-02 145 views
17

这看起来应该很简单,我发誓这段代码已经工作了好几个月,但现在不工作。我确信我只是太累了,但我会很感激一个知道的微调。在bash脚本中创建mysql数据库和用户

# create random password 
PASSWDDB="$(openssl rand -base64 12)" 

# replace "-" with "_" for database username 
MAINDB=${USER_NAME//[^a-zA-Z0-9]/_} 

# create database and user 
mysql -e "CREATE DATABASE $MAINDB" 
mysql -e "GRANT ALL PRIVILEGES ON $MAINDB.* TO [email protected] IDENTIFIED BY '$PASSWDDB!'" 

MAINDB先前在脚本中提供。我最终得到的是一个数据库,一个用户和适当的权限,并且用户有一个密码 - 它不是在$ PASSWORDDB中定义的密码。

MariaDB的10.0.22 的Ubuntu 14.04

+1

是在'$'PASSWDDB一个错字是感叹号创建数据库的细节!? – Joe

+0

我真的不知道为什么!在那里,乔。不过,我很累。 –

回答

33

这是我使用方法:https://raw.githubusercontent.com/saadismail/useful-bash-scripts/master/db.sh

你的情况,你可以使用这个:

# create random password 
PASSWDDB="$(openssl rand -base64 12)" 

# replace "-" with "_" for database username 
MAINDB=${USER_NAME//[^a-zA-Z0-9]/_} 

# If /root/.my.cnf exists then it won't ask for root password 
if [ -f /root/.my.cnf ]; then 

    mysql -e "CREATE DATABASE ${MAINDB} /*\!40100 DEFAULT CHARACTER SET utf8 */;" 
    mysql -e "CREATE USER ${MAINDB}@localhost IDENTIFIED BY '${PASSWDDB}';" 
    mysql -e "GRANT ALL PRIVILEGES ON ${MAINDB}.* TO '${MAINDB}'@'localhost';" 
    mysql -e "FLUSH PRIVILEGES;" 

# If /root/.my.cnf doesn't exist then it'll ask for root password 
else 
    echo "Please enter root user MySQL password!" 
    read rootpasswd 
    mysql -uroot -p${rootpasswd} -e "CREATE DATABASE ${MAINDB} /*\!40100 DEFAULT CHARACTER SET utf8 */;" 
    mysql -uroot -p${rootpasswd} -e "CREATE USER ${MAINDB}@localhost IDENTIFIED BY '${PASSWDDB}';" 
    mysql -uroot -p${rootpasswd} -e "GRANT ALL PRIVILEGES ON ${MAINDB}.* TO '${MAINDB}'@'localhost';" 
    mysql -uroot -p${rootpasswd} -e "FLUSH PRIVILEGES;" 
fi 
+0

这很好,谢谢! –

+0

@DavidRahrer很高兴我能帮到你。 –

+1

使用'read -sp rootpasswd'来避免在屏幕上显示 – squarecandy

3
mysql -uroot -p$*PASSWORD_OF_MYSQL_ROOT_USER* -e "CREATE DATABASE $MAINDB" 
mysql -uroot -p$*PASSWORD_OF_MYSQL_ROOT_USER* -e "GRANT ALL PRIVILEGES ON $MAINDB.* TO [email protected] IDENTIFIED BY '$PASSWDDB!'" 

这会为你工作。

3

我创建了一个,你可能会发现有用:

#!/bin/bash 

# 
# Script to create MySQL db + user 
# 
# @author Raj KB <[email protected]> 
# @website http://www.magepsycho.com 
# @version 0.1.0 

################################################################################ 
# CORE FUNCTIONS - Do not edit 
################################################################################ 
# 
# VARIABLES 
# 
_bold=$(tput bold) 
_underline=$(tput sgr 0 1) 
_reset=$(tput sgr0) 

_purple=$(tput setaf 171) 
_red=$(tput setaf 1) 
_green=$(tput setaf 76) 
_tan=$(tput setaf 3) 
_blue=$(tput setaf 38) 

# 
# HEADERS & LOGGING 
# 
function _debug() 
{ 
    [ "$DEBUG" -eq 1 ] && [email protected] 
} 

function _header() 
{ 
    printf "\n${_bold}${_purple}========== %s ==========${_reset}\n" "[email protected]" 
} 

function _arrow() 
{ 
    printf "➜ [email protected]\n" 
} 

function _success() 
{ 
    printf "${_green}✔ %s${_reset}\n" "[email protected]" 
} 

function _error() { 
    printf "${_red}✖ %s${_reset}\n" "[email protected]" 
} 

function _warning() 
{ 
    printf "${_tan}➜ %s${_reset}\n" "[email protected]" 
} 

function _underline() 
{ 
    printf "${_underline}${_bold}%s${_reset}\n" "[email protected]" 
} 

function _bold() 
{ 
    printf "${_bold}%s${_reset}\n" "[email protected]" 
} 

function _note() 
{ 
    printf "${_underline}${_bold}${_blue}Note:${_reset} ${_blue}%s${_reset}\n" "[email protected]" 
} 

function _die() 
{ 
    _error "[email protected]" 
    exit 1 
} 

function _safeExit() 
{ 
    exit 0 
} 

# 
# UTILITY HELPER 
# 
function _seekConfirmation() 
{ 
    printf "\n${_bold}[email protected]${_reset}" 
    read -p " (y/n) " -n 1 
    printf "\n" 
} 

# Test whether the result of an 'ask' is a confirmation 
function _isConfirmed() 
{ 
    if [[ "$REPLY" =~ ^[Yy]$ ]]; then 
     return 0 
    fi 
    return 1 
} 


function _typeExists() 
{ 
    if [ $(type -P $1) ]; then 
     return 0 
    fi 
    return 1 
} 

function _isOs() 
{ 
    if [[ "${OSTYPE}" == $1* ]]; then 
     return 0 
    fi 
    return 1 
} 

function _checkRootUser() 
{ 
    #if [ "$(id -u)" != "0" ]; then 
    if [ "$(whoami)" != 'root' ]; then 
     echo "You have no permission to run $0 as non-root user. Use sudo" 
     exit 1; 
    fi 

} 

function _printPoweredBy() 
{ 
    cat <<"EOF" 

Powered By: 
    __ ___    ___    __ 
/|/ /__ ____ ____/_ \___ __ ______//___ 
//|_//_ `/ _ `/ -_) ___(_-</ ///__/ _ \/ _ \ 
/_/ /_/\_,_/\_, /\__/_/ /___/\_, /\__/_//_/\___/ 
      /___/    /___/ 

>> Store: http://www.magepsycho.com 
>> Blog: http://www.blog.magepsycho.com 

################################################################ 
EOF 
} 
################################################################################ 
# SCRIPT FUNCTIONS 
################################################################################ 
function generatePassword() 
{ 
    echo "$(openssl rand -base64 12)" 
} 

function _printUsage() 
{ 
    echo -n "$(basename $0) [OPTION]... 

Create MySQL db & user. 
Version $VERSION 

    Options: 
     -h, --host  MySQL Host 
     -d, --database MySQL Database 
     -u, --user  MySQL User 
     -p, --pass  MySQL Password (If empty, auto-generated) 
     -h, --help  Display this help and exit 
     -v, --version  Output version information and exit 

    Examples: 
     $(basename $0) --help 

" 
    _printPoweredBy 
    exit 1 
} 

function processArgs() 
{ 
    # Parse Arguments 
    for arg in "[email protected]" 
    do 
     case $arg in 
      -h=*|--host=*) 
       DB_HOST="${arg#*=}" 
      ;; 
      -d=*|--database=*) 
       DB_NAME="${arg#*=}" 
      ;; 
      -u=*|--user=*) 
       DB_USER="${arg#*=}" 
      ;; 
      -p=*|--pass=*) 
       DB_PASS="${arg#*=}" 
      ;; 
      --debug) 
       DEBUG=1 
      ;; 
      -h|--help) 
       _printUsage 
      ;; 
      *) 
       _printUsage 
      ;; 
     esac 
    done 
    [[ -z $DB_NAME ]] && _error "Database name cannot be empty." && exit 1 
    [[ $DB_USER ]] || DB_USER=$DB_NAME 
} 

function createMysqlDbUser() 
{ 
    SQL1="CREATE DATABASE IF NOT EXISTS ${DB_NAME};" 
    SQL2="CREATE USER '${DB_USER}'@'%' IDENTIFIED BY '${DB_PASS}';" 
    SQL3="GRANT ALL PRIVILEGES ON ${DB_NAME}.* TO '${DB_USER}'@'%';" 
    SQL4="FLUSH PRIVILEGES;" 

    if [ -f /root/.my.cnf ]; then 
     $BIN_MYSQL -e "${SQL1}${SQL2}${SQL3}${SQL4}" 
    else 
     # If /root/.my.cnf doesn't exist then it'll ask for root password 
     _arrow "Please enter root user MySQL password!" 
     read rootPassword 
     $BIN_MYSQL -h $DB_HOST -u root -p${rootPassword} -e "${SQL1}${SQL2}${SQL3}${SQL4}" 
    fi 
} 

function printSuccessMessage() 
{ 
    _success "MySQL DB/User creation completed!" 

    echo "################################################################" 
    echo "" 
    echo " >> Host  : ${DB_HOST}" 
    echo " >> Database : ${DB_NAME}" 
    echo " >> User  : ${DB_USER}" 
    echo " >> Pass  : ${DB_PASS}" 
    echo "" 
    echo "################################################################" 
    _printPoweredBy 

} 

################################################################################ 
# Main 
################################################################################ 
export LC_CTYPE=C 
export LANG=C 

DEBUG=0 # 1|0 
_debug set -x 
VERSION="0.1.0" 

BIN_MYSQL=$(which mysql) 

DB_HOST='localhost' 
DB_NAME= 
DB_USER= 
DB_PASS=$(generatePassword) 

function main() 
{ 
    [[ $# -lt 1 ]] && _printUsage 
    _success "Processing arguments..." 
    processArgs "[email protected]" 
    _success "Done!" 

    _success "Creating MySQL db and user..." 
    createMysqlDbUser 
    _success "Done!" 

    printSuccessMessage 

    exit 0 
} 

main "[email protected]" 

_debug set +x 

用法:

./mysql-create-db-user.sh --host=localhost --database=test-db --user=test-user 

有关详细信息:
http://www.blog.magepsycho.com/bash-script-create-mysql-database-user-optional-password/

0

enter image description here 上传的图像是如何则表