安装mysql单实例和多实例脚本

//将脚本的同目录创建一个file文件用来存放mysql的压缩包

#!/bin/bash

function init(){
    id mysql &>/dev/null
    if [ $? -ne 0 ];then
        useradd -rMs /sbin/nologin mysql
    fi
    echo "解压目录为:$unzip_dir"
#解压mysql文件    
    if [ ! -d ${mysqlinstall_dir} ];then
         echo '解压中...'
         tar xf file/mysql-5.7.38-linux-glibc2.12-x86_64.tar.gz -C $unzip_dir
         mv ${unzip_dir}/mysql-5.7.38-linux-glibc2.12-x86_64 ${unzip_dir}/mysql
    fi
    cd $unzip_dir
#修改目录/usr/local/mysql的属主属组    
    chown -R mysql.mysql $mysqlinstall_dir
#添加环境变量
    echo "export PATH=\$PATH:${mysqlinstall_dir}/bin/" > /etc/profile.d/mysql.sh
    ln -s ${unzip_dir}/mysql/include /usr/include/mysql
    echo ${mysqlinstall_dir}/lib > /etc/ld.so.conf.d/mysql.conf
    ldconfig
    grep 'mysql' /etc/man_db.conf &>/dev/null
    if [ $? -ne 0 ];then
    sed  -i "22aMANDATORY_MANPATH                       ${mysqlinstall_dir}/man" /etc/man_db.conf
    else
    echo 'good'
    fi
    chown -R mysql.mysql $datadir
}

function single(){
    if [ ! -d $datadir ];then
        mkdir -p $datadir
    fi
    init
    csh=$(ls -l $datadir |grep -v total|wc -l)
    if [ $csh -eq 0 ];then
        ${mysqlinstall_dir}/bin/mysqld --initialize --user=mysql --datadir=$datadir &>/tmp/pass
        temporary_pass=$(grep 'password' /tmp/pass |awk '{print $NF}')
    fi
    cat > /etc/my.cnf <<EOF
[mysqld]
basedir = $mysqlinstall_dir
datadir = $datadir
socket = /tmp/mysql.sock
port = 3306
pid-file = ${datadir}/mysql.pid
user = mysql
skip-name-resolve
EOF

    if [ ! -d /etc/init.d ];then
	mkdir -p /etc/init.d
    fi
    	cp -a ${mysqlinstall_dir}/support-files/mysql.server /etc/init.d/mysqld
	sed -ri "s#^(basedir=).*#\1${mysqlinstall_dir}#g" /etc/init.d/mysqld
	sed -ri "s#^(datadir=).*#\1${datadir}#g" /etc/init.d/mysqld
	chmod +x /etc/init.d/mysqld
	chkconfig --add mysqld
	service mysqld start 
	sleep 5
	${mysqlinstall_dir}/bin/mysql -uroot -p"$temporary_pass" --connect-expired-password -e "set password = password('$mysql_pass');" 
	echo "你的登录密码为$mysql_pass"

}

function multi(){
    init
    port=3306
    cat > /etc/my.cnf <<EOF
[mysqld_multi]
mysqld = ${mysqlinstall_dir}/bin/mysqld_safe
mysqladmin = ${mysqlinstall_dir}/bin/mysqladmin
EOF
    for a in $(seq $count);do
	mkdir -p ${datadir}/$port
	chown -R mysql.mysql ${datadir}
	 csh=$(ls -l ${datadir}/$port |grep -v total|wc -l)
        if [ $csh -eq 0 ];then
            ${mysqlinstall_dir}/bin/mysqld --initialize --user=mysql --datadir=${datadir}/$port &>/tmp/pass
            temporary_pass=$(grep 'password' /tmp/pass |awk '{print $NF}')
        fi
	cat >> /etc/my.cnf <<EOF
[mysqld$port]
datadir = ${datadir}/$port
port = $port
socket = /tmp/mysql${port}.sock
pid-file = ${datadir}/${port}/mysql_${port}.pid
log-error=/var/log/${port}.log
EOF
        ${mysqlinstall_dir}/bin/mysqld_multi start $port
        sleep 5
        ${mysqlinstall_dir}/bin/mysql -uroot -p"${temporary_pass}" -h127.0.0.1 -P${port}  --connect-expired-password -e "set password = password('$mysql_pass');"
	let port++
    done
	echo "安装成功,你的密码为:${mysql_pass}"

}

read -p '请选择你要安装的实例个数:' count
read -p '请选择你mysql的安装目录,默认/usr/local/mysql: ' mysqlinstall_dir
read -p '请输入MySQL密码,密码必须保持复杂性规则,大小写字母,数字,下划线,默认为123456:' mysql_pass
read -p '请输入MySQL数据存放的目录,默认为/data: ' datadir
dnf -y install libncurses*
echo $count |egrep '^[1-9]+[0-9]*$' &>/dev/null
if [ $? -ne 0 ];then
    echo "输入错误,请重新执行脚本!"
    exit
fi

#创建安装目录
echo $mysqlinstall_dir | egrep '^/[a-z]+(/[a-z]*)*$' &>/dev/null
if [ $? -ne 0 ];then
    mysqlinstall_dir=/usr/local/mysql
fi

if [[ $mysqlinstall_dir =~ /.*/mysql ]];then
	unzip_dir=$(dirname $mysqlinstall_dir)
else
	unzip_dir=$mysqlinstall_dir
fi
#修改密码
if [ -z $mysql_pass ];then
    mysql_pass=123456
else 
    echo $mysql_pass |egrep '[a-z]+'|egrep '[A-Z]+'|egrep '[0-9]+'|egrep '_+' &>/dev/null 
    if [ $? -ne 0 ] || [ ${#mysql_pass} -lt 8 ];then
    mysql_pass=123456
    fi
fi
echo "mysql密码为:$mysql_pass"

#创建数据存放目录
echo $datadir | egrep '^/[a-z]+(/[a-z]*)*$' &>/dev/null
if [ $? -ne 0 ];then
    datadir=/data
fi
echo "数据目录存放位置为$datadir"

if [ $count -eq 1 ];then
    single
else
    multi

fi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

1we11

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值