Shell脚本实现MySQL主从自动化配置

/ 前言 /

       该Shell脚本适用于一主一从, 但是如果你需要布置为一主多从或者多主多从只需要简单修改即可, 修改方式在脚本备注中
       当前脚本暂无自动安装MySQL的流程, 我会尽快完善, 也可以看我之前的博文安装MySQLCentos7安装MySQL5.7图文解析 (附MySQL安装包官网地址及MySQL5.7安装手册)
       如需了解MySQL主从搭建的流程及原理可以看我的博文MySQL主从搭建图文解析及原理

/ 自动化Shell脚本 /

#!/bin/bash

function check() {
  echo "check is running"
  check_results=$(yum list installed | grep mysql)
  echo "command(rpm -qa) results are: $check_results"
  if [[ -n $check_results ]]; then
    echo "开始MySQL主从配置"
  else
    echo "请先安装MySQL"
  fi
}

LOG_FILE
POSITION

# 配置master
function master() {

  service ${SERVER_ID} stop
  sed -i '/mysqld/a\log-bin=master-bin' ${CFG_PATH}
  sed -i '/mysqld/a\server-id=1' ${CFG_PATH}
  service ${SERVER_ID} start
  # 获取Master-Server中的logfile和position
  MASTER_INFO=`mysql -uroot -pMyNewPass4! -e"show master status\G"`
  LOG_FILE=`echo "${MASTER_INFO}" | grep "File" | awk '{print $2}'`
  POSITION=`echo "${MASTER_INFO}" | grep "Position" | awk '{print $2}'`
  echo "Master logfile : " ${LOG_FILE}
  echo "Master position : " ${POSITION}
  mysql -uroot -p${MASTER_PASSWORD} <<eof
    DELETE FROM mysql.user WHERE User='${REPLICATION_NAME}';
    CREATE USER '${REPLICATION_NAME}'@'${SLAVE_IP}' IDENTIFIED BY '${REPLICATION_PASSWORD}';
    GRANT REPLICATION SLAVE ON *.* TO '${REPLICATION_NAME}'@'${SLAVE_IP}';
eof
}

# 配置slave
# 如需配置一主多从只需将当前slave函数复制一份更改一SLAVE_IP即可
function slave() {
  echo "即将开启ssh通道连接Slave-Server"
  ssh -Tq ${SLAVE_IP} <<sshEOF
  service ${SERVER_ID} stop
  sed -i '/mysqld/a\server-id=2' ${CFG_PATH}
  service ${SERVER_ID} start
  mysql -uroot -p${SLAVE_PASSWORD} <<mysqlEof
    stop slave;
    CHANGE MASTER TO MASTER_HOST='${MASTER_IP}', MASTER_USER='${REPLICATION_NAME}', MASTER_PASSWORD='${REPLICATION_PASSWORD}', MASTER_LOG_FILE='${LOG_FILE}', MASTER_LOG_POS=${POSITION};
    start slave;
mysqlEof
sshEOF
}

# 检测slave是否启动
function check_is_running() {
IS_RUNNING=$(ssh -Tq ${SLAVE_IP} <<sshEof
   mysql -uroot -p${SLAVE_PASSWORD} -e "show slave status\G" 2>/dev/null |grep "Running:"|wc -l
sshEof
)
  if [ ${IS_RUNNING} -eq 2 ]; then
    echo "MySQL主从搭建成功!"
  else
    echo "MySQL主从搭建失败"
  fi
}

check

read -p "请输入MySQL Server的进程ID, 如mysqld : " SERVER_ID
echo "SERVER_ID : " ${SERVER_ID}
read -p "请输入Master-Server的IP地址 : " MASTER_IP
echo "MASTER_IP : " ${MASTER_IP}
read -p "请输入SLAVE-Server的IP地址: " SLAVE_IP
echo "SLAVE_IP : " ${SLAVE_IP}
read -p "请输入Master-Server的密码 : " MASTER_PASSWORD
echo "MASTER_PASSWORD : " ${MASTER_PASSWORD}
read -p "请输入SLAVE-Server的密码 : " SLAVE_PASSWORD
echo "SLAVE_PASSWORD : " ${SLAVE_PASSWORD}
read -p "请输入当前MySQL-Server的配置文件路径,如/etc/my.cnf : " CFG_PATH
echo "MySQL主从复制需要创建独立账户, 请输入以下信息"
read -p "主从复制账户用户名, 如replication :" REPLICATION_NAME
echo "MySQL5.7后账户密码需要符合策略 : 数字、小写字母、大写字母 、特殊字符、长度至少8位"
read -p "主从复制账户密码, 如 :MasterRePass4!" REPLICATION_PASSWORD

master
slave
check_is_running
原创文章 42 获赞 51 访问量 1万+

猜你喜欢

转载自blog.csdn.net/F1004145107/article/details/106182338