Script for adding new MySQL database and user easily
At my company we have lots of MySQL databases(usually one for each virtual host) and each database has its unique user. Adding a new database and a user with proper permissions can be quite tedious, that’s why I hacked up the following script which saves some of my precious time
create_1db_mysql_user
#!/bin/sh
if [ "$1" = "" ]; then
read -p "Username: " USER
else
USER="$1"
fi
if [ $USER = 'root' ]; then
echo "User can't be root!"
exit 1;
fi
if [ "$2" = "" ]; then
read -p "DB:[$USER]" DB
if [ -z $DB ]; then
DB="$USER"
echo "using $DB"
fi
else
DB="$2"
fi
if [ "$3" = "" ]; then
HOST="localhost"
else
HOST="$3"
fi
stty -echo
read -p "DB root password: " ROOT
echo
RAND_PASSWD=`dd if=/dev/urandom count=1 2> /dev/null | uuencode -m - | head -n 2 | tail -n 1 | cut -c-8`
read -p "DB user password:[$RAND_PASSWD]" PASSWD
echo
if [ -z $PASSWD ]; then
PASSWD="$RAND_PASSWD"
echo "using $PASSWD"
fi
stty echo
MYSQL="mysql -u root -p$ROOT"
$MYSQL -e"SHOW DATABASES" | fgrep "$DB" > /dev/null
if [ "$?" != 0 ]; then
echo "No such database!"
read -p "Create one?[yn]" ANSWER
if [ "$ANSWER" != "n" ]; then
echo "Creating database $DB..."
$MYSQL -e"CREATE DATABASE $DB"
fi
fi
#$MYSQL -e"GRANT INSERT,SELECT,DELETE,UPDATE on `$DB`.* to '$USER'@'$HOST' IDENTIFIED BY '$PASSWD'"
$MYSQL -e"GRANT ALL PRIVILEGES on `$DB`.* to '$USER'@'$HOST' IDENTIFIED BY '$PASSWD'"
$MYSQL -e"FLUSH PRIVILEGES"
echo "done!"
Here’s the typical dialog with the script:
$ create_1db_mysql_user Username: foobar DB:[foobar] using foobar DB root password: DB user password:[JG25HBUn] using JG25HBUn No such database! Create one?[yn]y Creating database foobar... done!
First it asks for the user name and it assumes that the name of the user will be equal to the name of the database, however you can change it(in the example above I left it as is). Then it asks for the root password and asks for the user password as well(which if not specified is generated automatically). If the database doesn’t exist yet it asks if it should create one. And that’s it.
This script requires uuencode installed for automatic passwords generation. In Gentoo it can be installed as follows:
$ sudo emerge app-arch/sharutils
