Skip to content

Instantly share code, notes, and snippets.

@CattenLinger
Created October 26, 2019 15:46
Show Gist options
  • Save CattenLinger/241ab568eaf8c7aa3eb6f9c3d474806d to your computer and use it in GitHub Desktop.
Save CattenLinger/241ab568eaf8c7aa3eb6f9c3d474806d to your computer and use it in GitHub Desktop.
A little script to creating database and user for application.
#!/bin/bash
set -e
app_name=""
app_username=""
app_password="123456"
app_user_host="localhost"
db_name=""
mysql_username="root"
mysql_password=""
echo
echo "# "
echo "# Application Database Create Script "
echo "# For MySQL "
echo "# "
echo
input=""
#
# Asking mysql login token
#
password_field=""
read -p "Mysql username (Default is ${mysql_username}) : " input
[[ -z "${input}" ]] || mysql_username="${input}"
read -s -p "Mysql password (Default is empty) : " mysql_password && echo
[[ -z "$mysql_password" ]] || password_field="-p${mysql_password}"
mysql -u $mysql_username ${password_field} -e "select user,host from mysql.user where user='${mysql_user}';" --raw --batch 2> /dev/null > /dev/null || (echo "Login failed." && exit 1)
echo "Login success"
#
# Input database and user info
#
read -p "Application name?: " app_name
[[ "${app_name}" =~ ^[0-9A-Za-z_\-]{3,16}$ ]] || ( echo "App name doesn't match pattern ^[0-9A-Za-z_\-]{3,16}$ " && exit 1 )
app_username="app_${app_name}"
read -p "Choose a username (Default is ${app_username}) : " input
[[ -z "${input}" ]] || app_username="${input}"
[[ "${app_username}" =~ ^[0-9A-Za-z_\-]{3,16}$ ]] || ( echo "Username doesn't match pattern ^[0-9A-Za-z_\-]{3,16}$" && exit 1 )
read -p "User login scope? (Default is ${app_user_host}): " input
[[ -z "${input}" ]] || app_user_host="${input}"
[[ "${app_user_host}" =~ ^[A-Za-z0-9.\-_]{1,32}$ ]] || ( echo "User host doesn't match pattern ^[A-Za-z0-9.\-_]{1,32}$" && exit 1 )
exists_user=$(mysql -u ${mysql_username} ${password_field} -e "select user,host from mysql.user where user = '${app_username}' and host = '${app_user_host}'" 2> /dev/null | awk 'NR > 1 { print $1 }')
[[ -z "${exists_user}" ]] || ( echo "User was exists" && exit 1 )
read -s -p "Choose a password (Default is ${app_password}) : " input && echo
[[ -z "${input}" ]] || (\
app_password="${input}" &&\
read -s -p "Confirm password: " input && echo &&\
[[ "${input}" == "${app_password}" ]] || ( echo "Password not match." && exit 1 )\
)
db_name="db_${app_name}";
read -p "Database name? (Default is ${db_name}) : " input;
[[ -z "${input}" ]] || db_name="${input}";
[[ "${db_name}" =~ ^[0-9A-Za-z_\-]{3,16}$ ]] || ( echo "Database name not match pattern ^[0-9A-Za-z_\-]{3,16}$ " && exit 1 );
exists_db=$(mysql -u ${mysql_username} ${password_field} -e "show databases" --batch --raw 2> /dev/null | grep "${db_name}");
[[ -z "${exists_db}" ]] || ( echo "Database exists." && exit 1 );
echo "Create database and user for ${app_name}:"
echo "Username : ${app_username}"
echo "Hostname : ${app_user_host}"
echo "Password : ${app_password}"
echo "Database : ${db_name}"
read -p "Is that right?(Y/N):" input
[[ "${input}" =~ ^(yes|YES|Y|y)$ ]] || ( echo "Canceled." && exit 1 );
echo "Doing something ......"
mysql -u ${mysql_username} ${password_field} -e "\
create database ${db_name} charset utf8mb4;\
create user '${app_username}'@'${app_user_host}' identified by '${app_password}';\
grant all on ${db_name}.* to '${app_username}'@'${app_user_host}';\
flush privileges;\
" --batch --raw || ( echo "Crate database failed." && exit 1 )
echo "Create database successful"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment