Created
October 26, 2019 15:46
-
-
Save CattenLinger/241ab568eaf8c7aa3eb6f9c3d474806d to your computer and use it in GitHub Desktop.
A little script to creating database and user for application.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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