2013-07-22 14:43:12 -04:00
|
|
|
#!/usr/bin/env bash
|
|
|
|
|
|
|
|
function usage() {
|
|
|
|
echo "setup.mysql.bash"
|
|
|
|
echo "--mysqlbuild=$mysqlbuild --shutdown=$shutdown --install=$install --startup=$startup"
|
|
|
|
}
|
|
|
|
|
|
|
|
mysqlbuild=
|
|
|
|
shutdown=1
|
|
|
|
install=1
|
|
|
|
startup=1
|
|
|
|
s3bucket=tokutek-mysql-build
|
2013-10-31 11:38:02 -04:00
|
|
|
sleeptime=60
|
|
|
|
builtins="mysqlbuild shutdown install startup s3bucket sleeptime"
|
2013-07-22 14:43:12 -04:00
|
|
|
mysqld_args="--user=mysql --core-file --core-file-size=unlimited"
|
2014-02-12 10:46:11 -05:00
|
|
|
sudo=/usr/bin/sudo
|
2013-07-22 14:43:12 -04:00
|
|
|
defaultsfile=""
|
|
|
|
if [ -f /etc/$(whoami).my.cnf ] ; then
|
|
|
|
defaultsfile=/etc/$(whoami).my.cnf
|
|
|
|
fi
|
|
|
|
|
|
|
|
function is_builtin() {
|
|
|
|
local v=$1; shift
|
|
|
|
local x
|
|
|
|
for x in $* ; do
|
|
|
|
if [ $v = $x ] ; then echo 1; return; fi
|
|
|
|
done
|
|
|
|
echo 0
|
|
|
|
}
|
|
|
|
|
|
|
|
while [ $# -gt 0 ] ; do
|
|
|
|
arg=$1; shift
|
|
|
|
if [ $arg = "--help" -o $arg = "-h" -o $arg = "-?" ] ; then
|
|
|
|
usage; exit 1
|
|
|
|
elif [[ $arg =~ --(.*)=(.*) ]] ; then
|
|
|
|
r=$(is_builtin ${BASH_REMATCH[1]} $builtins)
|
|
|
|
if [ $r = 1 ] ; then
|
|
|
|
eval ${BASH_REMATCH[1]}=${BASH_REMATCH[2]}
|
|
|
|
else
|
|
|
|
mysqld_args="$mysqld_args $arg"
|
|
|
|
fi
|
|
|
|
else
|
|
|
|
mysqld_args="$mysqld_args $arg"
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
2013-07-23 09:01:07 -04:00
|
|
|
if [ -d /data/mysql/tmp ] ; then mysqld_args="$mysqld_args --tmpdir=/data/mysql/tmp"; fi
|
|
|
|
|
2013-07-22 14:43:12 -04:00
|
|
|
if [[ $mysqlbuild =~ (.*)-(tokudb\-.*)-(linux)-(x86_64) ]] ; then
|
|
|
|
mysql=${BASH_REMATCH[1]}
|
|
|
|
tokudb=${BASH_REMATCH[2]}
|
|
|
|
system=${BASH_REMATCH[3]}
|
|
|
|
arch=${BASH_REMATCH[4]}
|
|
|
|
else
|
2013-11-23 07:47:25 -05:00
|
|
|
echo $mysqlbuild is not a tokudb build
|
2013-07-22 14:43:12 -04:00
|
|
|
fi
|
|
|
|
|
|
|
|
if [ ! -d downloads ] ; then mkdir downloads; fi
|
|
|
|
|
|
|
|
pushd downloads
|
|
|
|
if [ $? != 0 ] ; then exit 1; fi
|
|
|
|
|
|
|
|
basedir=$PWD
|
|
|
|
|
2013-11-23 07:47:25 -05:00
|
|
|
mysqltarball=$mysqlbuild.tar.gz
|
|
|
|
|
|
|
|
if [ -f $mysqlbuild.tar.gz ] ; then
|
|
|
|
compression=-z
|
|
|
|
mysqltarball=$mysqlbuild.tar.gz
|
|
|
|
elif [ -f $mysqlbuild.tar.bz2 ] ; then
|
|
|
|
compression=-j
|
|
|
|
mysqltarball=$mysqlbuild.tar.bz2
|
|
|
|
fi
|
|
|
|
|
2013-07-22 14:43:12 -04:00
|
|
|
# get the release
|
|
|
|
if [ ! -f $mysqltarball ] ; then
|
|
|
|
s3get $s3bucket $mysqltarball $mysqltarball
|
|
|
|
if [ $? -ne 0 ] ; then exit 1; fi
|
|
|
|
fi
|
|
|
|
if [ ! -f $mysqltarball.md5 ] ; then
|
|
|
|
s3get $s3bucket $mysqltarball.md5 $mysqltarball.md5
|
|
|
|
if [ $? -ne 0 ] ; then exit 1; fi
|
|
|
|
fi
|
|
|
|
|
2013-07-23 10:23:09 -04:00
|
|
|
# check the md5 sum
|
2013-07-22 14:43:12 -04:00
|
|
|
md5sum --check $mysqltarball.md5
|
2013-07-23 09:01:07 -04:00
|
|
|
if [ $? -ne 0 ] ; then
|
2013-07-23 10:23:09 -04:00
|
|
|
# support jacksum md5 output which is almost the same as md5sum
|
2013-07-23 09:01:07 -04:00
|
|
|
diff -b <(cat $mysqltarball.md5) <(md5sum $mysqltarball)
|
|
|
|
if [ $? -ne 0 ] ; then exit 1; fi
|
|
|
|
fi
|
2013-07-22 14:43:12 -04:00
|
|
|
|
2013-10-31 11:38:02 -04:00
|
|
|
# set ldpath
|
|
|
|
ldpath=""
|
|
|
|
if [ -d /usr/local/gcc-4.7/lib64 ] ; then
|
2014-02-12 10:46:11 -05:00
|
|
|
echo skip ldpath="export LD_LIBRARY_PATH=/usr/local/gcc-4.7/lib64:\$LD_LIBRARY_PATH;"
|
2013-10-31 11:38:02 -04:00
|
|
|
fi
|
|
|
|
|
2013-07-22 14:43:12 -04:00
|
|
|
# shutdown mysql
|
|
|
|
if [ $shutdown -ne 0 ] ; then
|
|
|
|
if [ -x /etc/init.d/mysql ] ; then
|
2014-02-12 10:46:11 -05:00
|
|
|
$sudo setsid /etc/init.d/mysql stop
|
2013-07-22 14:43:12 -04:00
|
|
|
else
|
|
|
|
/usr/local/mysql/bin/mysqladmin shutdown
|
|
|
|
fi
|
2013-10-31 11:38:02 -04:00
|
|
|
sleep $sleeptime
|
2013-07-22 14:43:12 -04:00
|
|
|
fi
|
|
|
|
|
|
|
|
pushd /usr/local
|
|
|
|
if [ $? = 0 ] ; then
|
|
|
|
rm mysql
|
|
|
|
popd
|
|
|
|
fi
|
|
|
|
|
|
|
|
# install the release
|
|
|
|
pushd /usr/local/mysqls 2>/dev/null
|
|
|
|
if [ $? = 0 ] ; then
|
|
|
|
mysqldir=mysqls/$mysqlbuild
|
|
|
|
else
|
|
|
|
pushd /usr/local
|
|
|
|
if [ $? -ne 0 ] ; then exit 1; fi
|
|
|
|
mysqldir=$mysqlbuild
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [ ! -d $mysqlbuild ] || [ $install -ne 0 ] ; then
|
|
|
|
rm mysql
|
2014-02-12 10:46:11 -05:00
|
|
|
if [ -d $mysqlbuild ] ; then $sudo rm -rf $mysqlbuild; fi
|
2013-07-22 14:43:12 -04:00
|
|
|
|
2013-11-23 07:47:25 -05:00
|
|
|
tar -x $compression -f $basedir/$mysqltarball
|
2013-07-22 14:43:12 -04:00
|
|
|
if [ $? -ne 0 ] ; then exit 1; fi
|
|
|
|
ln -s $mysqldir /usr/local/mysql
|
2013-10-31 11:38:02 -04:00
|
|
|
if [ $? -ne 0 ] ; then exit 1; fi
|
|
|
|
ln -s $mysqldir /usr/local/$mysqlbuild
|
|
|
|
if [ $? -ne 0 ] ; then exit 1; fi
|
2013-07-22 14:43:12 -04:00
|
|
|
|
|
|
|
installdb=$mysqlbuild/bin/mysql_install_db
|
|
|
|
if [ ! -f $installdb ] ; then
|
|
|
|
installdb=$mysqlbuild/scripts/mysql_install_db
|
|
|
|
fi
|
|
|
|
|
2014-02-12 10:46:11 -05:00
|
|
|
$sudo chown -R mysql $mysqlbuild/data
|
|
|
|
$sudo chgrp -R mysql $mysqlbuild/data
|
2013-07-22 14:43:12 -04:00
|
|
|
|
|
|
|
# 5.6 debug build needs this
|
|
|
|
if [ ! -f $mysqlbuild/bin/mysqld ] && [ -f $mysqlbuild/bin/mysqld-debug ] ; then
|
|
|
|
ln $mysqlbuild/bin/mysqld-debug $mysqlbuild/bin/mysqld
|
|
|
|
fi
|
|
|
|
|
2013-10-31 11:38:02 -04:00
|
|
|
if [ -z "$defaultsfile" ] ; then
|
|
|
|
default_arg=""
|
2013-07-22 14:43:12 -04:00
|
|
|
else
|
2013-10-31 11:38:02 -04:00
|
|
|
default_arg="--defaults-file=$defaultsfile"
|
2013-07-22 14:43:12 -04:00
|
|
|
fi
|
2014-02-12 10:46:11 -05:00
|
|
|
$sudo bash -c "$ldpath $installdb $default_arg --user=mysql --basedir=$PWD/$mysqlbuild --datadir=$PWD/$mysqlbuild/data"
|
2013-07-22 14:43:12 -04:00
|
|
|
if [ $? -ne 0 ] ; then exit 1; fi
|
|
|
|
else
|
|
|
|
# create link
|
2014-02-12 10:46:11 -05:00
|
|
|
rm /usr/local/mysql
|
2013-07-22 14:43:12 -04:00
|
|
|
ln -s $mysqldir /usr/local/mysql
|
|
|
|
if [ $? -ne 0 ] ; then exit 1; fi
|
2014-02-12 10:46:11 -05:00
|
|
|
rm /usr/local/$mysqlbuild
|
2013-10-31 11:38:02 -04:00
|
|
|
ln -s $mysqldir /usr/local/$mysqlbuild
|
|
|
|
if [ $? -ne 0 ] ; then exit 1; fi
|
2013-07-22 14:43:12 -04:00
|
|
|
fi
|
|
|
|
popd
|
|
|
|
|
|
|
|
# start mysql
|
|
|
|
if [ $startup -ne 0 ] ; then
|
|
|
|
ulimit -a
|
|
|
|
# increase the open file limit
|
|
|
|
ulimit -n 10240
|
|
|
|
exitcode=$?
|
|
|
|
echo ulimit -n 10240 exitcode $exitcode
|
|
|
|
|
|
|
|
if [ -x /etc/init.d/mysql ] ; then
|
2014-02-12 10:46:11 -05:00
|
|
|
$sudo setsid /etc/init.d/mysql start
|
2013-07-22 14:43:12 -04:00
|
|
|
else
|
2013-10-31 11:38:02 -04:00
|
|
|
if [ -z "$defaultsfile" ] ; then
|
|
|
|
default_arg=""
|
|
|
|
else
|
|
|
|
default_arg="--defaults-file=$defaultsfile"
|
|
|
|
fi
|
2014-02-12 10:46:11 -05:00
|
|
|
$sudo -b bash -c "$ldpath /usr/local/mysql/bin/mysqld_safe $default_arg $mysqld_args" >/dev/null 2>&1 &
|
2013-07-22 14:43:12 -04:00
|
|
|
fi
|
2013-10-31 11:38:02 -04:00
|
|
|
sleep $sleeptime
|
2013-07-22 14:43:12 -04:00
|
|
|
|
|
|
|
# add mysql grants
|
|
|
|
/usr/local/mysql/bin/mysql -u root -e "grant all on *.* to tokubuild@localhost"
|
|
|
|
/usr/local/mysql/bin/mysql -u root -e "grant all on *.* to 'ec2-user'@localhost"
|
|
|
|
fi
|
|
|
|
|
|
|
|
popd
|
|
|
|
|
|
|
|
exit 0
|