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服务
其实很简单,以上的步骤揉在一起就可以了