//将脚本的同目录创建一个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