mysql简单的多实例部署脚本BB(shell)

1 通用的log functions输出
#!/bin/bash

CWD=$(dirname `readlink -e "$0"`)
GLOBAL_LOG_PATH="${CWD}/install.log"
MYSQL_SYS_USER="mysql"
BASE_DIR="/XXXX"
DATA_DIR="/XXXX"
MYCNF_DIR="/XXXX"

### about function ###
function write_log() {
  local path="$1"
  local level="$2"
  local topic="$3"
  shift 2 
  if [[ -t 1 ]]; then
    echo $*
  fi
  #echo `date +"%Y-%m-%d %H:%M:%S "` "$level" "$topic" '"'"$*"'"' >>"${path}"
  echo `date +"%Y-%m-%d %H:%M:%S "` "$level"  '"'"$*"'"' >>"${path}"
}

function pipe_log() {
  local path="$1"
  local prefix="${2:-    }"
  local line
  if [[ -t 1 ]]; then
    while read line; do
      echo "${prefix}${line}"
      echo "${prefix}${line}" >>"${path}"
    done
  else
    while read line; do
      echo "${prefix}${line}"    
    done >>"${path}"
  fi
}

function global_log(){
    write_log "${GLOBAL_LOG_PATH}" $*
}

function pipe_global_log() {
  pipe_log "${GLOBAL_LOG_PATH}" "$1"
}
2 创建用户
3 判断是否为新实例添加
ps -ef | grep mysqld_safe|grep -v grep |wc -l
4 已存在实例的buffer pool统计
4.1 列出所有实例使用的bp总和:
for port in `netstat -ntlp |awk '/\/mysqld[ $]/{print $4}'|awk  -F ':' '{print $NF}'|sort -n`
do
  if [ ${#port} -eq 4 ]; then
    global_log INFO "MySQL_Install >>>>> 实例${port}的 innodb_buffer_pool_size: `grep innodb_buffer_pool_size /XXXX/my-${port}.cnf |awk '{print $3}'`" 
    bp=`grep innodb_buffer_pool_size "/XXXX/my-${port}.cnf" |sed 's/[^0-9]//g'`
    let sum+=${bp}
  fi
done
4.2 bp总和>内存的80%不允许添加新实例

有个比较尴尬的是shell中的正整数与非正整数比较比较麻烦,目前想到的是使用echo "${正整数} ${非正整数}"|bc

bp_total=`echo "\`free -g|grep "Mem"|awk '{print $2}'\`*0.8"|bc`
global_log INFO "MySQL_Install >>>>> MySQL所有实例已用BP: ${sum}G "
global_log INFO "MySQL_Install >>>>> OS内存: `free -g|grep "Mem"|awk '{print $2}'`G" 
if test `echo "${sum} > ${bp_total}"| bc` -eq 1;then 
    global_log WARNING "MySQL_Install >>>>> 不适合添加新实例!!!"
    exit 101
fi
5 MySQL初始化
5.1 相关目录创建
5.2 配置文件调整

路径、端口号、server-id、判断节点是否为read_only

5.3 添加启动脚本
cp xxx/support-files/mysql.server /etc/init.d/mysql端口号

修改脚本:
basedir、datadir、LSB init script functions注释掉、conf=、parse_server_arguments、mysqladmin ping、$bindir/mysqld_safe
大致以上几个地方

6 RHEL7的添加systemctl管理DB

之前写过方法,参考:systemctl添加mysql服务

其实很简单,以上的步骤揉在一起就可以了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值