diff --git a/README.md b/README.md index 0172a03..d50158d 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,20 @@ # db -MySQL tool \ No newline at end of file +MySQL tool + +![DB](./db.jpg) + +Installation + +```sh +git clone https://git.vaidis.eu/stevaidis/db.git +chmod +x db/db +ln -s $PWD/db/db /usr/sbin/ +``` + +Configure + +```sh +DBUSER="root" +DBPASS="1234" +``` diff --git a/db b/db new file mode 100755 index 0000000..3549d0c --- /dev/null +++ b/db @@ -0,0 +1,163 @@ +#!/bin/bash + +RED="\e[0;31m" +GRN="\e[0;32m" +BLU="\e[0;34m" +WHT="\e[0;97m" +BOLDRED="\e[1;31m" +BOLDGRN="\e[1;32m" +BOLDBLU="\e[1;34m" +BOLDWHT="\e[1;97m" +END="\e[00m" + +DBUSER="root" +DBPASS="1234" + +function usage() { + echo + echo -e " ${BOLDWHT}db${END} v1.0 is a simple MySQL tool" + echo + echo -e " 🌈 \e[1mList\e[0m" + echo -e "${WHT}./db ${BOLDBLU}-lu${END} List users" + echo -e "${WHT}./db ${BOLDBLU}-ld${END} List databases" + echo -e "${WHT}./db ${BOLDBLU}-lt${BLU} dbname${END} List tables from dbname" + echo + echo -e " 🔥 \e[1mDelete\e[0m" + echo -e "${WHT}./db ${BOLDRED}-d${RED} xzy${END} Delete user & database" + echo -e "${WHT}./db ${BOLDRED}-du${RED} xzy${END} Delete user" + echo -e "${WHT}./db ${BOLDRED}-dd${RED} xzy${END} Delete database" + echo + echo -e " 🌱 \e[1mCreate\e[0m" + echo -e "${WHT}./db ${BOLDGRN}-c${GRN} xzy${END} Create user & database" + echo -e "${WHT}./db ${BOLDGRN}-cu${GRN} xzy${END} Create user" + echo -e "${WHT}./db ${BOLDGRN}-cd${GRN} xzy${END} Create database" + echo + echo -e " 🛟 \e[1mBackup\e[0m" + echo -e "${WHT}./db ${BOLDBLU}-e${BLU} dbname${END} Export database to dbname.sql" + echo -e "${WHT}./db ${BOLDBLU}-i${BLU} dbname dump.sql${END} Import dump.sql into dbname" + echo + exit +} + +# List + +function list_databases() { + mysql -u${DBUSER} -p${DBPASS} -Nse 'show databases' | grep -Ev '(information_schema|mysql|performance_schema)' +} + +function list_users() { + mysql -u${DBUSER} -p${DBPASS} -Nse "SELECT user FROM mysql.user WHERE user NOT IN ('root','mysql','mariadb.sys','mysql.sys')" +} + +function list_tables() { + echo -e "Database ${BOLDBLU}${1}${END} contains ${BOLDWHT}$(mysql -u${DBUSER} -p${DBPASS} -Nse "use $1; show tables;" | wc -l)${END} tables" +} + +# DELETE + +function delete_database() { + mysql -u${DBUSER} -p${DBPASS} -e "drop database $1" + list_databases | grep -e "^$1$" +} + +function delete_user() { + mysql -u${DBUSER} -p${DBPASS} -e "DROP USER '$1'@'localhost'" + list_users | grep -e "^$1$" +} + +function delete_all() { + delete_user $1 + delete_database $1 +} + + +# CREATE + +function create_database() { + mysql -u${DBUSER} -p${DBPASS} -e "create database $1" + echo -e "Database created: ${BOLDGRN}$(list_databases | grep $1)${END}" +} + +function create_user() { + mysql -u${DBUSER} -p${DBPASS} -e "CREATE USER $1@localhost IDENTIFIED BY '1234'" + mysql -u${DBUSER} -p${DBPASS} -e "GRANT ALL ON $1.* TO $1@localhost" + echo -e "User created: ${BOLDGRN}$(list_users | grep $1)${END}" +} + +function create_all() { + create_database $1 + create_user $1 +} + +# BACKUP + +function export_database() { + mysqldump -u${DBUSER} -p${DBPASS} $1 > $1.sql + ls -l $1.sql +} + +function import_database() { + echo -e "Before import database ${BOLDBLU}${1}${END} contains ${BOLDWHT}$(mysql -u${DBUSER} -p${DBPASS} -Nse "use $1; show tables;" | wc -l)${END} tables" + mysql -u${DBUSER} -p${DBPASS} $1 < $2 + echo -e "After import database ${BOLDBLU}${1}${END} contains ${BOLDWHT}$(mysql -u${DBUSER} -p${DBPASS} -Nse "use $1; show tables;" | wc -l)${END} tables" +} + +for i in "$@" +do + case $i in + -h) + usage + exit + ;; + -lu) + list_users + exit + ;; + -ld) + list_databases + exit + ;; + -lt) + list_tables $2 + exit + ;; + -dd) + delete_database $2 + exit + ;; + -du) + delete_user $2 + exit + ;; + -d) + delete_all $2 + exit + ;; + -cd) + create_database $2 + exit + ;; + -cu) + create_user $2 + exit + ;; + -c) + create_all $2 + exit + ;; + -e) + export_database $2 + exit + ;; + -i) + import_database $2 $3 + exit + ;; + *) + usage + exit + ;; + esac +done + +usage diff --git a/db.png b/db.png new file mode 100644 index 0000000..35761c1 Binary files /dev/null and b/db.png differ