MySQL installation and deployment-8.0.33-script

#!/bin/bash
set -o pipefail

# 参数
# mysql_install.sh <MYSQL_PORT> <MYSQL_VERSION> <MYSQL_DATA_BASE>
#  sh db_install.sh 3308 5.6 /home/data
# <MYSQL_DATA_BASE> :因为测试环境数据目录一般在 /home/data 下,线上在 /data 下。
#  所以将这个路径作为参数传入,区别线上和测试环境

# 判断参数个数
if [ $# -ne 3 ]; then
  echo "Usage: bash $0 <MYSQL_PORT> <MYSQL_VERSION> <MYSQL_DATA_BASE>."
  exit 1
fi

# 自行设置安装包位置
SOFTWARE="/opt/software"
if [ ! -d ${
    
    SOFTWARE} ];then
  echo "====================Create the directory ${SOFTWARE}===================="
  mkdir ${
    
    SOFTWARE}
  echo "====================Finish creating the directory ${SOFTWARE}===================="
fi

# 获取赋值
MYSQL_PORT=$1
MYSQL_VERSION=$2
MYSQL_DATA_BASE=$3

# 安装依赖包
yum install -y ncurses-devel cmake libaio-devel openssl-devel
yum install -y cmake gcc gcc-c++ openssl* bison zlib autoconf libarchive
yum install doxygen
yum install -y libtirpc libtirpc-devel

# ============================ install =================================
#  MYSQL_PORT $2: MYSQL_VERSION $3: MYSQL_DATA_BASE

TAR_DIR=${
    
    SOFTWARE}/mysql-${
    
    MYSQL_VERSION}.tar.gz
if [ ! -e ${
    
    TAR_DIR} ]
then
  echo "error: ${TAR_DIR} is not exist!"
  exit 1
fi

if [ ! -d  ${
    
    SOFTWARE}/mysql-${
    
    MYSQL_VERSION} ]
then
  tar -zxvf ${
    
    SOFTWARE}/mysql-${
    
    MYSQL_VERSION}.tar.gz
  echo "The file ${SOFTWARE}/mysql-${MYSQL_VERSION}.tar.gz extraction is complete."
else
  echo "The directory is already ${SOFTWARE}/mysql-${MYSQL_VERSION} exist."
fi
cd ${
    
    SOFTWARE}/mysql-${
    
    MYSQL_VERSION}

BASEDIR=/data/app/mysql_${
    
    MYSQL_VERSION}
MYSQL_DATA_DIR=${
    
    MYSQL_DATA_BASE}/mysql_${
    
    MYSQL_PORT}
if [ ! -e  ${
    
    SOFTWARE}/mysql-${
    
    MYSQL_VERSION}/CMakeCache.txt ]; then
    echo "====================Cmake Start===================="
    cmake . -DCMAKE_INSTALL_PREFIX=$BASEDIR -DSYSCONFDIR=$BASEDIR/etc -DSYSTEMD_PID_DIR=$BASEDIR -DDEFAULT_charset=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_SSL=system -DWITH_READLINE=on -DMYSQL_DATADIR=${
    
    MYSQL_DATA_DIR} -DWITH_BOOST=./boost -DFORCE_INSOURCE_BUILD=1 -DDOWNLOAD_BOOST=1
    echo "====================Cmake End===================="
fi

echo "====================Make Install Start===================="
make -j `grep processor /proc/cpuinfo | wc -l` && make install
echo "====================Make Install End===================="

# 创建相关文件夹
echo -e "Create directories $BASEDIR/tmp, $BASEDIR/etc, ${MYSQL_DATA_DIR}_logs, ${MYSQL_DATA_DIR}\n"
mkdir -p $BASEDIR/tmp
mkdir -p $BASEDIR/etc
mkdir -p ${
    
    MYSQL_DATA_DIR}_logs
mkdir -p ${
    
    MYSQL_DATA_DIR}
echo -e "Finish creating directories $BASEDIR/tmp, $BASEDIR/etc, ${MYSQL_DATA_DIR}_logs, ${MYSQL_DATA_DIR}\n"

# 配置 my.cnf
#[mysqld]
#port=${MYSQL_PORT}
#basedir=${BASEDIR}
#datadir=${MYSQL_DATA_DIR}
#tmpdir=$BASEDIR/tmp
#socket=${MYSQL_DATA_DIR}/mysql.sock
#pid-file=${MYSQL_DATA_DIR}/mysql.pid
#log-error=${MYSQL_DATA_DIR}_logs/error.log
#lower_case_table_names=1
#lc_messages_dir=${BASEDIR}/share
#lc_messages=en_US
#innodb_buffer_pool_size=24G
#server-id=1
#
#[mysql]
#no-auto-rehash
echo -e "$BASEDIR/etc/my.cnf"
cp /etc/my.cnf $BASEDIR/etc/my.cnf

echo -e "====================Start editing my.cnf====================\n"
sed -i "s:port=.*:port=${MYSQL_PORT}:g" $BASEDIR/etc/my.cnf
sed -i "s:basedir=.*:basedir=${BASEDIR}:g" $BASEDIR/etc/my.cnf
sed -i "s:datadir=.*:datadir=${MYSQL_DATA_DIR}:g" $BASEDIR/etc/my.cnf
sed -i "s:tmpdir=.*:tmpdir=$BASEDIR/tmp:g" $BASEDIR/etc/my.cnf
sed -i "s:socket=.*:socket=${MYSQL_DATA_DIR}/mysql.sock:g" $BASEDIR/etc/my.cnf
sed -i "s:pid-file=.*:pid-file=${MYSQL_DATA_DIR}/mysql.pid:g" $BASEDIR/etc/my.cnf
sed -i "s:log-error=.*:log-error=${MYSQL_DATA_DIR}_logs/error.log:g" $BASEDIR/etc/my.cnf
sed -i "s:lc_messages_dir=.*:lc_messages_dir=${BASEDIR}/share:g" $BASEDIR/etc/my.cnf
echo "====================End of edit my.cnf===================="

# 创建mysql用户/组
USER=mysql
UGROUP=mysql
# 查找用户组 并不显示输出
egrep "^${UGROUP}" /etc/group >& /dev/null

if [ $? -eq 0 ]; then
  useradd -g $UGROUP $USER
  echo "Create ${UGROUP}"
fi

chown -R $USER:$UGROUP ${
    
    BASEDIR}
chmod -R 755 ${
    
    BASEDIR}
chown -R $USER:$UGROUP ${
    
    MYSQL_DATA_DIR}
chmod -R 755 ${
    
    MYSQL_DATA_DIR}
chown -R $USER:$UGROUP ${
    
    MYSQL_DATA_DIR}_logs

echo "====================MYSQL ${MYSQL_VERSION}:${MYSQL_PORT} is successfully installed to install in ${BASEDIR}===================="

# ============================ install =================================

# ============================ initialize ==============================
if [ "$(echo ${MYSQL_VERSION} | cut -d "." -f -2)" != "5.6" ]; then
    $BASEDIR/bin/mysqld --defaults-file=$BASEDIR/etc/my.cnf --user=mysql --basedir=$BASEDIR --datadir=${
    
    MYSQL_DATA_DIR} --initialize --console
    password=$(awk '/password/ {print $NF}' ${
    
    MYSQL_DATA_DIR}_logs/error.log)
    if [ $? -eq 0 ]; then
        echo "================= A temporary password is generated for root@localhost: $password ==============="
    fi
elif [ "$(echo ${MYSQL_VERSION} | cut -d "." -f -2)" == "5.6" ]; then
    $BASEDIR/scripts/mysql_install_db --defaults-file=$BASEDIR/etc/my.cnf --user=mysql --basedir=$BASEDIR --datadir=${
    
    MYSQL_DATA_DIR}
fi

echo "================= MYSQL $MYSQL_VERSION is installed successfully ==============="

echo -e "Please start the MYSQL service first: \n"
echo -e "$BASEDIR/bin/mysqld_safe --defaults-file=$BASEDIR/etc/my.cnf --user=mysql &\n"
echo -e "Then you can run MYSQL ${MYSQL_VERSION}: \n"

if [ "$(echo ${MYSQL_VERSION} | cut -d "." -f -2)" != "5.6" ]; then
    echo -e "$BASEDIR/bin/mysql -uroot -P ${MYSQL_PORT} -h 127.0.0.1 -p$password\n"

elif [ "$(echo ${MYSQL_VERSION} | cut -d "." -f -2)" == "5.6" ]; then
    echo -e "$BASEDIR/bin/mysql -uroot -P ${MYSQL_PORT} -h 127.0.0.1\n"
fi


exit 0

Semi-automatic installation of MySQL database script, suitable for compilation and installation of versions 5.6/5.7/8.0.

Instructions:

mysql_install.sh <MYSQL_PORT> <MYSQL_VERSION> <MYSQL_DATA_BASE>

For example:

/opt/shell/mysql_install.sh 4406 5.6.51 /data/app/test

result

Successful installation!

Insert image description here

Guess you like

Origin blog.csdn.net/qq_44696532/article/details/134592171