mysql一键安装脚本---二进制安装

#!/bin/sh

MYSQL_TAB_FILE=""
MYSQL_REAL_DIR=""
INSTALL_DIR="/usr/local"
BASEDIR="$INSTALL_DIR"/mysql
DATADIR="$BASEDIR"/data
DEFAULT_STORAGE_ENGINE=""
ROOT_PWD=".mysql.$$"

trap "interrupt" 1 2 3 6 15

usage()
{
  cat <<EOF
	sh install.sh <MYSQL_TAB_FILE> <DEFAULT_STORAGE_ENGINE> <ROOT_PWD>
EOF
exit 1
}

cleanup(){
	echo "Cleaning up..."
	rm -f $command
}

clean_and_exit(){
	cleanup
	exit 1
}

interrupt(){
	echo 
	echo "Aborting!"
	echo 
	cleanup
	stty echo 
	exit 1
}

check()
{
	status=`whoami |awk '{print $1}'`
	
	if [ $status == "root" ]
	then
		echo "the current logined user is root! "
	else
		echo "the current logined user is not root! please install with root. "
	fi
	
	if [ $# -ne 3 ];then
		usage
	fi
	
	if [ ! -f $MYSQL_TAB_FILE ];then
		echo "The file $MYSQL_TAB_FILE does not exists!"
		exit 1
	fi
	
	if [ 0 -eq $(echo $MYSQL_TAB_FILE|grep "\.tar\.gz$"|wc -l) ];then
		echo "The file $MYSQL_TAR_FILE does not format *.tar.gz!"
		exit 1 
	fi
	
	if [ ! -d $INSTALL_DIR ];then
		echo "The directory $INSTALL_DIR does not exists!"
		exit 1 
	fi 
	
	if [ $DEFAULT_STORAGE_ENGINE != 'INNODB' -a $DEFAULT_STORAGE_ENGINE != 'MYISAM' ]
	then
		usgae
	fi
	
	if [ -d $INSTALL_DIR/$MYSQL_REAL_DIR ];then
		echo "The directory $INSTALL_DIR/$MYSQL_REAL_DIR exists! Mysql has been installed!"
		exit 1 
	fi 
	
	if [ -d $INSTALL_DIR/mysql ];then
		echo "The directory $INSTALL_DIR/mysql exists! Mysql has been installed!"
		exit 1 
	fi 
	
	if [ -d $DATADIR ];then
		echo "Create directory datadir $DATADIR..."
	fi 
}

init()
{
	MYSQL_TAB_FILE=$1
	MYSQL_REAL_DIR=`echo $MYSQL_TAB_FILE|sed 's/\.tar\.gz//g'`
	DEFAULT_STORAGE_ENGINE=`echo $2|tr 'a-z' 'A-Z'`
	ROOT_PWD=$3 
}

install()
{
	groupadd mysql
	useradd -g mysql mysql
	
	tar -zxvf $MYSQL_TAB_FILE -C $INSTALL_DIR
	cd $INSTALL_DIR
	
	ln -s $MYSQL_REAL_DIR mysql
	cd mysql
	script/mysql_install_db --user=mysql --datadir=$DATADIR --basedir=$BASEDIR
	chown -R root:mysql .
	chown -R mysql:mysql data
	
	rm -f /etc/init.d/mysqld 
	cp support-files/mysql.server /etc/init.d/mysqld
	chmod 700 /etc/init.d/mysqld
	chkconfig --add mysqld 
	chkconfig --level 345 mysqld on 
	
	if [ $DEFAULT_STORAGE_ENGINE = 'INNODB' ]
	then
		eval sed '/^#skip-networking$/a\basedir=$BASEDIR\\ndatadir=$DATADIR\\ncharacter-set-server=utf8\\ncollation-server=utf8_general_ci\\ninit_connect="SET NAMES 'utf8'"\\ndefault_storage_engine=InnoDB' ./support-files/my-large.cnf >/etc/my.cnf
	elif [ $DEFAULT_STORAGE_ENGINE = 'MYISAM' ]
	then
		eval sed '/^#skip-networking$/a\basedir=$BASEDIR\\ndatadir=$DATADIR\\ncharacter-set-server=utf8\\ncollation-server=utf8_general_ci\\ninit_connect="SET NAMES 'utf8'"\\ndefault_storage_engine=InnoDB' ./support-files/my-large.cnf >/etc/my.cnf
	fi
	
	echo 'export PATH=$PATH:/usr/local/mysql/bin' >>/etc/profile
	export PATH=$PATH:/usr/local/mysql/bin
	/etc/init.d/mysqld start
}

prepare_product_env(){
	echo "UPDATE mysql.user SET Password=PASSWORD('$ROOT_PWD') WHERE User='root';" >$command
	echo "DELETE FROM mysql.user WHERE User='';" >>$command
	echo "DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost','127.0.0.1','::1');" >>$command
	echo "DROP DATABASE test;" >>$command
	echo "DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';" >>$command
	echo "FLUSH PRIVILEGES;" >>$command
	mysql -uroot <$command
	if [ $? -eq 0 ];then
		echo "prepare product environment successfully!"
	else
		echo "prepare product environment failed!"
		clean_and_exit
	fi 
}

init $@
check $@
install
prepare_product_env
cleanup



这个脚本有很多需要改的地方,会继续改进,主要是my.cnf这块(这个应该根据os的内存,动态调整), 欢迎拍砖

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值