#!/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/