sobota, 14 września 2013

bash skrypty do tworzenia baz mysql, dodawania użytkowników, nadawania uprawnień

Na serwerach (środowisko produkcyjne) nie powinno się instalować zbędnych programów/aplikacji i jedną z nich jest phpmyadmin.

W związku z tym, że w pracy często zakładam/usuwam bazy danych mysql i nie koniecznie za każdym razem chce przypominać sobie pełną składnie polecenia i wolałbym wykonać jedną pętle aby stworzyć wszystkie bazy danych.

Po przeszukaniu dostępnych bashowych skryptów w sieci udało mi się odnaleźć jeden prawie działający (chyba było to na stackoverflow). Po przerobieniu skryptu zaczął on działać poprawnie, więc postanowiłem na jego przykładzie dopisać kilka dodatkowych.

Sprawdzanie zaszyfrowanego hasła:
#!/bin/bash
EXPECTED_ARGS=1
E_BADARGS=65
MYSQL=`which mysql`

Q1="SELECT password('$1');"
SQL="${Q1}"
echo $SQL;
if [ $# -ne $EXPECTED_ARGS ]
then
echo "Usage: $0 password"
exit $E_BADARGS
fi

$MYSQL -uroot -e "$SQL"

W tym przypadku należy wykonać skrypt z podaniem parametru (hasłem, które należy zaszyfrować).
W powyższym przykładzie konto roota do mysql'a nie posiada hasła, jeżeli chcemy wykonać polecenie na root mysql, który posiada hasło należy zmodyfikować ostatni wiersz na:
$MYSQL -uroot -pMoje_hasło_root -e "$SQL"



Usuwanie użytkownika mysql (dwa parametry wykonania skryptu login/lokalizacja local lub remote):
#!/bin/bash

EXPECTED_ARGS=2
E_BADARGS=65
MYSQL=`which mysql`

Q1="DROP USER '$1'@'$2';"
Q2="FLUSH PRIVILEGES;"
SQL="${Q1}${Q2}"

if [ $# -ne $EXPECTED_ARGS ]
then
echo "Usage: $0 login local_remote password"
exit $E_BADARGS
fi

$MYSQL -uroot -e "$SQL"





Tworzenia bazy danych oraz przypisywanie do nich uprawnień (dwa parametry wykonania skryptu nazwa bazy oraz nazwa użytkownika), można ten skrypt jeszcze rozbudować ale na moje potrzeby w zupełności wystarczy:
#!/bin/bash
EXPECTED_ARGS=2
E_BADARGS=65
MYSQL=`which mysql`

Q1="CREATE DATABASE IF NOT EXISTS $1 DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;"
Q2="GRANT ALL ON $1.* TO '$2'@'localhost';"
Q3="GRANT ALL ON $1.* TO 'root'@'localhost';"
Q4="FLUSH PRIVILEGES;"
SQL="${Q1}${Q2}${Q3}${Q4}"
echo $SQL;
if [ $# -ne $EXPECTED_ARGS ]
then
echo "Usage: $0 dbname dbuser"
exit $E_BADARGS
fi

$MYSQL -uroot -e "$SQL"



Tworzenie użytkownika bazy danych (w tym przypadku potrzebne są trzy parametry login/remote lub local/ zaszyfrowane hasło - pierwszy skrypt):
#!/bin/bash

EXPECTED_ARGS=3
E_BADARGS=65
MYSQL=`which mysql`

Q1="CREATE USER '$1'@'$2' IDENTIFIED BY password '$3';"
Q2="FLUSH PRIVILEGES;"
SQL="${Q1}${Q2}"

if [ $# -ne $EXPECTED_ARGS ]
then
echo "Usage: $0 login local_remote password"
exit $E_BADARGS
fi

$MYSQL -uroot -e "$SQL"



Powyższe skrypty można oczywiście udoskonalić np. w ostatnim tworzącym użytkownika można dodać automatyczne szyfrowanie hasła, ale tak jak napisałem powyżej na moje skromne potrzeby wystarczy.

Dlink wolny upload

Na domowym routerze miałem ostatnio problem z wysyłaniem plików.
Załączenie kilku zdjęć do wiadomości email trwało wieczność.

Problemy występowały przy wifi, spróbowałem się więc podłączyć kablowo przez router i w dalszym ciągu występował ten sam problem.

Postanowiłem więc podłączyć się do sieci bez routera i okazało się że transfer znacznie skoczył.

Po weryfikacji ustawień routera okazało się, że był włączony QOS bez podanych żadnych parametrów i było to przyczyną występowania problemu.

Gdy wyłączyłem QOS upload przyśpieszył.