Skip to content

Instantly share code, notes, and snippets.

@Raven24
Last active August 29, 2015 14:19
Show Gist options
  • Save Raven24/e1b11c313d4d5e068618 to your computer and use it in GitHub Desktop.
Save Raven24/e1b11c313d4d5e068618 to your computer and use it in GitHub Desktop.
Create a ramdisk with a mySQL server for running CI
#!/bin/bash -xEe
# original source: http://blog.ionelmc.ro/2013/05/30/mysql-too-slow-in-tests-ramdisk-it/
# invocation :
# ./mysql_ramdisk.sh 1 512M some_user some_password
#
random_pass=$(ruby -e "print [*'a'..'z', *'A'..'Z', *'0'..'9'].shuffle.first(8).join")
i=$1
mem=${2:-350M}
user=${3:-test}
pass=${4:-$random_pass}
root_pass=${5:-$random_pass}
if [ `id -u` -ne 0 ] ; then
echo "this script must be run as root!"
exit 1
fi
if [ -z "$i" ]; then
echo "Missing argument: instance number."
exit 1
fi
myconf="/etc/mysql/my.cnf"
if [ -e "/etc/my.cnf" ]; then
myconf="/etc/my.cnf"
fi
port=$[3306+$i]
sock="/var/run/mysqld/mysqld$i.sock"
pidfile="/var/run/mysqld/mysqld$i.pid"
pid=`cat "$pidfile" || true`
if [ -n "$pid" ]; then
kill -9 $pid
while kill -0 $pid; do
sleep 0.5
done
fi
umount -l "/var/lib/mysql$i" || true
rm -rf "/var/lib/mysql$i"
mkdir "/var/lib/mysql$i"
mount -t tmpfs -o size=$mem tmpfs "/var/lib/mysql$i"
chown -R mysql.mysql "/var/lib/mysql$i"
mkdir -p "/var/log/mysql$i"
chown -R mysql.mysql "/var/log/mysql$i"
rm -rf "/etc/mysql$i"
mkdir "/etc/mysql$i"
cp "$myconf" "/etc/mysql$i"
cd "/etc/mysql$i/"
sed -i "s/3306/$port/g" my.cnf
sed -i "s/^socket\s*=[^\n]*sock\$/socket = ${sock//\//\\\/}/g" my.cnf
sed -i "s/^pid-file\s*=[^\n]*pid\$/pid-file = ${pidfile//\//\\\/}/g" my.cnf
sed -i "s/var\/lib\/mysql/var\/lib\/mysql$i/g" my.cnf
sed -i "s/var\/log\/mysql/var\/log\/mysql$i/g" my.cnf
# ubuntu stuff
if [ -d /etc/apparmor.d ] && [ ! -f /etc/apparmor.d/disable/usr.sbin.mysqld ]; then
touch /etc/apparmor.d/disable/usr.sbin.mysqld
service apparmor reload
fi
mysql_install_db --user=mysql --datadir="/var/lib/mysql$i" --basedir=/usr
sleep 5
mysqld_safe --defaults-file=/etc/mysql$i/my.cnf --datadir="/var/lib/mysql$i" &
sleep 10
#ls -la /var/run/mysqld/*.sock
mysqladmin -S $sock -u root password "$root_pass"
cat <<EOF | mysql -uroot -S$sock -P$port -p$root_pass
USE mysql;
CREATE USER "$user"@"localhost" IDENTIFIED BY "$pass";
GRANT ALL ON *.* TO "$user"@"localhost";
FLUSH PRIVILEGES;
EOF
printf "#-> the server socket is %s\n" $sock
printf "#-> also listening on port %d\n\n" $port
printf "#-> root password: $root_pass"
printf "#-> created user: %s" $user
printf "#-> with password: %s\n\n" $pass
printf "done.\n"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment