mysql二进制一键化部署脚本
执行脚本之前要把下载好的mysql的压缩包提前放到我下面写的项目目录的files目录里
我这里选的Linux-Generic操作系统,下载的是mysql-8.0.29-linux-glibc2.12-x86_64.tar.xz
大家需要什么版本的就下什么版本,下好将脚本里的默认版本号改成自己需要的版本号就行
项目目录
[root@localhost ~]# cd mysql/
[root@localhost mysql]# tree
.
├── files
│ └── mysql-5.7.34-linux-glibc2.12-x86_64.tar.gz
└── mysql_install_single.sh
1 directory, 2 files
脚本内容
执行脚本前要给脚本执行权限
大家在执行脚本的时候实例个数填1就好,其他的回车默认(因为我这个是写MySQL多实例抠出来的单实例),mysql默认密码为12345678
[root@localhost mysql]# ./mysql_install_single.sh
#!/bin/bash
if [ ${UID} -ne 0 ];then
echo "Please use root"
exit 1
fi
read -p "请输入要创建的实例个数,默认回车创建一个实例:" count
read -p "请输入安装目录,默认为/usr/local/mysql:" mysql_install_dir
read -p "请输入数据存放目录,默认为/data:" data_dir
read -p "请输入数据库的密码,默认为12345678(密码最少为8位且包含大小写字母,数字与特殊符号):" mysql_passwd
echo $count | grep '^[1-9]\+[0-9]*$' &>/dev/null
if [ $? -ne 0 ];then
echo "Input error Please try again"
exit
fi
echo -e "Install Dependent package,Please wait patiently\e[37;5m...... \e[0m"
dnf -y install chkconfig ncurses-compat-libs perl &>/dev/null && \
echo $mysql_install_dir | egrep '^/[a-z]+(/[a-z]*)*$'
if [ $? -eq 0 ];then
if [ ! -d $mysql_install_dir ];then
mkdir -p $mysql_install_dir
fi
else
mysql_install_dir=/usr/local/mysql
fi
if [ -z $mysql_install_dir ];then
mysql_install_dir=/usr/local/mysql
fi
if [[ $mysql_install_dir =~ /.*/mysql ]];then
unzip_dir=$(dirname $mysql_install_dir)
else
unzip_dir=$mysql_install_dir
fi
echo $data_dir | egrep '^/[a-z]+(/[a-z]*)*$' &>/dev/null
if [ $? -ne 0 ];then
data_dir=/data
fi
if [ ! -d $data_dir ];then
mkdir -p $data_dir
fi
if [ -z $data_dir ];then
data_dir=/data
fi
if [ -z $mysql_passwd ];then
mysql_passwd=12345678
fi
if [ $count -eq 1 ];then
id mysql &>/dev/null
if [ $? -ne 0 ];then
useradd -rMs /sbin/nologin mysql
fi
echo -e "unzip mysql\e[37;5m...... \e[0m"
tar xf files/mysql-5.7.34-linux-glibc2.12-x86_64.tar.gz -C $unzip_dir
mv ${unzip_dir}/mysql-5.7.34-linux-glibc2.12-x86_64 ${unzip_dir}/mysql
chown -R mysql.mysql $mysql_install_dir
echo "export PATH=${mysql_install_dir}/bin:\$PATH" > /etc/profile.d/mysql.sh
ln -s ${mysql_install_dir}/include /usr/include/mysql
echo ${mysql_install_dir}/lib > /etc/ld.so.conf.d/mysql.conf
ldconfig
grep mysql /etc/man_db.conf &>/dev/null
if [ $? -ne 0 ];then
sed -i "22a MANDATORY_MANPATH ${mysql_install_dir}/man" /etc/man_db.conf
fi
chown -R mysql.mysql $data_dir
${mysql_install_dir}/bin/mysqld --initialize --user=mysql --datadir=${data_dir} &>/tmp/passwd
temp_passwd=$(grep 'password' /tmp/passwd | awk '{print $NF}')
cat > /etc/my.cnf <<EOF
[mysqld]
basedir = ${mysql_install_dir}
datadir = $data_dir
socket = /tmp/mysql.sock
port = 3306
pid-file = ${data_dir}/mysql.pid
user = mysql
skip-name-resolve
EOF
if [ ! -d /etc/init.d ];then
mkdir -p /etc/init.d
fi
cp -a ${mysql_install_dir}/support-files/mysql.server /etc/init.d/mysqld
sed -ri "s#^(basedir=).*#\1${mysql_install_dir}#g" /etc/init.d/mysqld
sed -ri "s#^(datadir=).*#\1${data_dir}#g" /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
chkconfig --add mysqld
service mysqld start
sleep 6
${mysql_install_dir}/bin/mysql -uroot -p"${temp_passwd}" --connect-expired-password -e "set password = password('${mysql_passwd}');"
bash
echo "you set password is $mysql_passwd"
fi