#!/bin/bash

:<<DESC

Progame:

   mysql多实例脚本创建,5.XX版本都可以使用。

以前在51.cto的论坛发布过,不知道为什么找不到。

History:

   20190918 v1.0

DESC


export LANG="zh_CN.UTF-8"

export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin


# 用于赋值server-id

id=6


# 判断mysql用户

[ id mysql &>/dev/null ] || useradd -s /sbin/nologin -M mysql -u1000


for port in {3306..3307};do


# 判断 /data/{3306,3307} 目录是否存在

   if [ ! -d /data/$port ];then

       mkdir -p /data/$port/data

   fi


########## 1、创建my.cnf配置文件

cat >/data/$port/my.cnf<<EOF

[client]

port            =$port

socket          =/data/$port/mysql.sock


[mysqld]

user            =mysql

port            =$port

socket          =/data/$port/mysql.sock

basedir         =/application/mysql

datadir         =/data/$port/data

log-bin         =/data/$port/mysql-bin

server-id       =$id

expire-logs-day =7


[mysqld_safe]

log-error       =/data/$port/mysql_${port}.err

pid-file        =/data/$port/mysqld.pid

EOF

((id++))

########## 结束


########## 2、创建启动脚本

cat >/data/$port/mysql<<EOF

#!/bin/sh

# $port start scripts

# init

CmdPath="/application/mysql/bin"

mysql_sock="/data/$port/mysql.sock"

mysqld_pid_file_path=/data/$port/$port.pid


start(){

       if [ ! -e "\$mysql_sock" ];then

        printf "Starting MySQL...\n"

        /bin/sh \$CmdPath/mysqld_safe --defaults-file=/data/$port/my.cnf --pid-file=\$mysqld_pid_file_path' &>/dev/null &

        sleep 3

    else

        printf "MySQL is running...\n"

        exit 1

    fi

}


stop(){

   if [ ! -e "\$mysql_sock" ];then

       printf "MySQL is stopped...\n"

       exit 1

   else

       printf "Stoping MySQL...\n"

       mysqld_pid=\$(cat "\$mysqld_pid_file_path")

        if (kill -0 \$mysqld_pid 2>/dev/null);then

               kill \$mysqld_pid

           sleep 2

        fi

   fi

}


restart(){

   printf "Restarting MySQL...\n"

   stop

   sleep 2

   start

}


case "\$1" in

   start)

       start

 ;;

   stop)

       stop

 ;;

   restart)

       restart

 ;;

   *)

       printf "Usage: /data/$port/mysql {start|stop|restart}\n"

    ;;

esac

EOF

chmod +x /data/$port/mysql

########## 结束

done

chown -R mysql.mysql /data/

####脚本结束


#####################################

下面是验证脚本结果的内容

[root@mysql scripts]# id mysql

id: mysql:无此用户

[root@mysql scripts]# ll /data

ls: 无法访问/data: 没有那个文件或目录

[root@mysql scripts]# sh mycnf.sh  

[root@mysql scripts]# tree /data/

/data/

├── 3306

│?? ├── data

│?? ├── my.cnf

│?? └── mysql

└── 3307

   ├── data

   ├── my.cnf

   └── mysql


4 directories, 4 files

[root@mysql scripts]# id mysql

uid=1000(mysql) gid=1000(mysql) 组=1000(mysql)

[root@mysql scripts]# ll /data/{3306,3307}/mysql

-rwxr-xr-x 1 mysql mysql 1045 3月  20 23:58 /data/3306/mysql

-rwxr-xr-x 1 mysql mysql 1045 3月  20 23:58 /data/3307/mysql

[root@mysql scripts]# ll -d /data

drwxr-xr-x 4 mysql mysql 4096 3月  20 23:58 /data


参考文献:

惨绿少年的博客 - CLSN博客 ---- 数据库介绍(MySQL安装 体系结构、基本管理)https://clsn.io/