Last active 1764358143

KarelWintersky revised this gist 1764358143. Go to revision

1 file changed, 2 insertions

mysql_dbu_create.sh

@@ -8,6 +8,8 @@
8 8 # mysql_config_editor set --login-path=proftpd --host=localhost --user=proftpd --password
9 9 # version this: https://gist.github.com/KarelWintersky/72021fe214f9d2f6ddc6a28c732baac1
10 10 # version 0.2: https://gist.github.com/KarelWintersky/9cb12557873ebc59b5cb94cb37bb6913
11 + #
12 + #
11 13
12 14 _bold=$(tput bold)
13 15 _underline=$(tput sgr 0 1)

KarelWintersky revised this gist 1764358136. Go to revision

1 file changed, 1 insertion, 1 deletion

mysql_dbu_create.sh

@@ -6,7 +6,7 @@
6 6 # @author Karel Wintersky <karel.wintersky@gmail.com>
7 7 # @version 0.4
8 8 # mysql_config_editor set --login-path=proftpd --host=localhost --user=proftpd --password
9 - # version this: ...
9 + # version this: https://gist.github.com/KarelWintersky/72021fe214f9d2f6ddc6a28c732baac1
10 10 # version 0.2: https://gist.github.com/KarelWintersky/9cb12557873ebc59b5cb94cb37bb6913
11 11
12 12 _bold=$(tput bold)

KarelWintersky revised this gist 1764358100. Go to revision

1 file changed, 252 insertions

mysql_dbu_create.sh(file created)

@@ -0,0 +1,252 @@
1 + #!/usr/bin/env bash
2 +
3 + #
4 + # Script to create MySQL/MariaDB db + user
5 + #
6 + # @author Karel Wintersky <karel.wintersky@gmail.com>
7 + # @version 0.4
8 + # mysql_config_editor set --login-path=proftpd --host=localhost --user=proftpd --password
9 + # version this: ...
10 + # version 0.2: https://gist.github.com/KarelWintersky/9cb12557873ebc59b5cb94cb37bb6913
11 +
12 + _bold=$(tput bold)
13 + _underline=$(tput sgr 0 1)
14 + _reset=$(tput sgr0)
15 +
16 + _purple=$(tput setaf 171)
17 + _red=$(tput setaf 1)
18 + _green=$(tput setaf 76)
19 + _tan=$(tput setaf 3)
20 + _blue=$(tput setaf 38)
21 + _cyan=$(tput setaf 6)
22 + _yellow=$(tput setaf 3)
23 +
24 + function _success()
25 + {
26 + printf "${_green}✔ %s${_reset}\n" "$@"
27 + }
28 +
29 + function _warning()
30 + {
31 + printf "${_yellow}⚠ %s${_reset}\n" "$@"
32 + }
33 +
34 + function _error()
35 + {
36 + printf "${_red}✖ %s${_reset}\n" "$@"
37 + }
38 +
39 + function _info()
40 + {
41 + printf "${_blue}ℹ %s${_reset}\n" "$@"
42 + }
43 +
44 + function _debug()
45 + {
46 + printf "${_cyan}🔧 %s${_reset}\n" "$@"
47 + }
48 +
49 + function _printPoweredBy()
50 + {
51 + local db_type=$(detectDBType)
52 + local db_title="${_bold}${_blue}MySQL${_reset}"
53 +
54 + if [ "$db_type" = "mariadb" ]; then
55 + db_title="${_bold}${_purple}MariaDB${_reset}"
56 + fi
57 +
58 + echo ""
59 + echo "${_bold}################################################################${_reset}"
60 + echo "${_bold}${db_title} :: Create database, user and password${_reset}"
61 + echo "${_bold}(c) Karel Wintersky <karel.wintersky@gmail.com>, 2018${_reset}"
62 + echo "${_bold}################################################################${_reset}"
63 + echo ""
64 + }
65 +
66 + function detectDBType()
67 + {
68 + local mysql_bin=$(which mysql 2>/dev/null)
69 +
70 + if [ -z "$mysql_bin" ]; then
71 + _error "MySQL client not found!"
72 + exit 1
73 + fi
74 +
75 + # Проверяем, является ли /usr/bin/mysql символической ссылкой
76 + if [ -L "/usr/bin/mysql" ]; then
77 + local link_target=$(readlink -f "/usr/bin/mysql")
78 + if [[ "$link_target" == *"mariadb"* ]]; then
79 + echo "mariadb"
80 + return
81 + fi
82 + fi
83 +
84 + # Дополнительная проверка через which mariadb
85 + local mariadb_bin=$(which mariadb 2>/dev/null)
86 + if [ -n "$mariadb_bin" ] && [ "$mysql_bin" = "$mariadb_bin" ]; then
87 + echo "mariadb"
88 + return
89 + fi
90 +
91 + echo "mysql"
92 + }
93 +
94 + function getDBBinary()
95 + {
96 + local db_type=$(detectDBType)
97 +
98 + if [ "$db_type" = "mariadb" ]; then
99 + which mariadb
100 + else
101 + which mysql
102 + fi
103 + }
104 +
105 + function generatePassword()
106 + {
107 + echo "$(openssl rand -base64 12)"
108 + }
109 +
110 + function getCredentials()
111 + {
112 + _info "Please enter database credentials:"
113 + echo ""
114 +
115 + read -e -p "${_bold}${_blue}?${_reset} ${_bold}Enter the NAME of the new database:${_reset} " DBNAME
116 + read -e -p "${_bold}${_blue}?${_reset} ${_bold}Enter HOST for user access (% for remote access): ${_reset} " -i "localhost" USERHOST
117 + read -e -p "${_bold}${_blue}?${_reset} ${_bold}Enter the database CHARACTER SET (latin1, utf8): ${_reset} " -i "utf8mb4" CHARSET
118 + read -e -p "${_bold}${_blue}?${_reset} ${_bold}Enter the NAME of the user:${_reset} " -i "$DBNAME" USERNAME
119 + read -e -p "${_bold}${_blue}?${_reset} ${_bold}Enter the PASSWORD for the user:${_reset} " -i "$PASSWORD" PASSWORD
120 + }
121 +
122 + function getRootPassword()
123 + {
124 + echo ""
125 + _warning "Root password required for database operations"
126 + read -e -p "${_bold}${_yellow}?${_reset} ${_bold}Enter MySQL/MariaDB root user password:${_reset} " -s ROOTPASSWORD
127 + echo ""
128 +
129 + ROOTACCESS="--user=root --password=${ROOTPASSWORD}"
130 + }
131 +
132 + function checkDBExist()
133 + {
134 + local FOUND
135 + FOUND=$(${DB_BINARY} ${ROOTACCESS} -e "SHOW DATABASES LIKE '${DBNAME}';" | grep ${DBNAME})
136 + echo ${FOUND}
137 + }
138 +
139 + function checkUserExist()
140 + {
141 + local FOUND
142 + FOUND=$(${DB_BINARY} ${ROOTACCESS} -e "SELECT COUNT(*) FROM mysql.user WHERE user = '${USERNAME}';" | grep 1)
143 +
144 + if [ "${FOUND}" = "1" ]; then
145 + echo "1"
146 + else
147 + echo "0"
148 + fi
149 + }
150 +
151 + function create()
152 + {
153 + if [ ! -f ~/.my.cnf ]; then
154 + getRootPassword
155 + fi
156 +
157 + echo ""
158 + _info "Starting database creation process..."
159 + echo ""
160 +
161 + if [[ -n $(checkDBExist) ]]; then
162 + _warning "Database ${_bold}${DBNAME}${_reset} already exists!";
163 + else
164 + _info "Creating database ${_bold}${DBNAME}${_reset}..."
165 + ${DB_BINARY} ${ROOTACCESS} -e "CREATE DATABASE ${DBNAME} /*\!40100 DEFAULT CHARACTER SET ${CHARSET} */;"
166 + _success "Database ${_bold}${DBNAME}${_reset} successfully created!"
167 + fi
168 +
169 + echo ""
170 +
171 + if [ $(checkUserExist) = "0" ]; then
172 + _info "Creating new user ${_bold}${USERNAME}${_reset}..."
173 + ${DB_BINARY} ${ROOTACCESS} -e "CREATE USER ${USERNAME}@'${USERHOST}' IDENTIFIED BY '${PASSWORD}';"
174 + _success "User ${_bold}${USERNAME}${_reset} successfully created!"
175 + else
176 + _warning "User ${_bold}${USERNAME}${_reset} already exists!";
177 + fi
178 +
179 + echo ""
180 +
181 + _info "Granting ALL privileges on ${_bold}${DBNAME}${_reset} to ${_bold}${USERNAME}${_reset}..."
182 + ${DB_BINARY} ${ROOTACCESS} -e "GRANT ALL PRIVILEGES ON ${DBNAME}.* TO '${USERNAME}'@'${USERHOST}';"
183 + ${DB_BINARY} ${ROOTACCESS} -e "FLUSH PRIVILEGES;"
184 + _success "Privileges successfully granted!"
185 + echo ""
186 + }
187 +
188 + function printSuccessMessage()
189 + {
190 + local db_type=$(detectDBType)
191 + local db_name="${_bold}${_blue}MySQL${_reset}"
192 +
193 + if [ "$db_type" = "mariadb" ]; then
194 + db_name="${_bold}${_purple}MariaDB${_reset}"
195 + fi
196 +
197 + _success "${db_name} database creation completed!"
198 + echo ""
199 +
200 + echo "${_bold}${_green}################################################################${_reset}"
201 + echo ""
202 + echo " ${_green}✓${_reset} ${_bold}Database Type:${_reset} ${db_name}"
203 + echo " ${_green}✓${_reset} ${_bold}Database:${_reset} ${_green}${DBNAME}${_reset}"
204 + echo " ${_green}✓${_reset} ${_bold}User:${_reset} ${_green}${USERNAME}${_reset}"
205 + echo " ${_green}✓${_reset} ${_bold}Password:${_reset} ${_green}${PASSWORD}${_reset}"
206 + echo " ${_green}✓${_reset} ${_bold}Host:${_reset} ${_green}${USERHOST}${_reset}"
207 + echo " ${_green}✓${_reset} ${_bold}Charset:${_reset} ${_green}${CHARSET}${_reset}"
208 + echo ""
209 + echo "${_bold}${_green}################################################################${_reset}"
210 + }
211 +
212 + ################################################################################
213 + # Main
214 + ################################################################################
215 + export LC_CTYPE=C
216 + export LANG=C
217 + VERSION="0.3"
218 +
219 + # Определяем бинарник для работы с БД
220 + DB_BINARY=$(getDBBinary)
221 + DB_TYPE=$(detectDBType)
222 +
223 + if [ -z "$DB_BINARY" ]; then
224 + _error "No database client found (mysql or mariadb)"
225 + exit 1
226 + fi
227 +
228 + ROOTACCESS=
229 + ROOTPASSWORD=
230 + CHARSET='utf8mb4';
231 + DBNAME=
232 + USERNAME=
233 + USERHOST='localhost'
234 + PASSWORD=$(generatePassword);
235 +
236 + function main()
237 + {
238 + _printPoweredBy
239 +
240 + getCredentials
241 +
242 + echo ""
243 + echo "${_bold}${_blue}################################################################${_reset}"
244 + echo ""
245 +
246 + create
247 + printSuccessMessage
248 + }
249 +
250 + main
251 +
252 + exit 0
Newer Older